codd-dev 2.86.0__tar.gz → 2.87.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 (620) hide show
  1. {codd_dev-2.86.0 → codd_dev-2.87.0}/PKG-INFO +1 -1
  2. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/__init__.py +1 -1
  3. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/extractor.py +75 -235
  4. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/parsing/__init__.py +10 -22
  5. codd_dev-2.87.0/codd/parsing/extractor_registry.py +120 -0
  6. codd_dev-2.87.0/codd/parsing/regex_strategies.py +544 -0
  7. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/scanner.py +15 -40
  8. {codd_dev-2.86.0 → codd_dev-2.87.0}/pyproject.toml +1 -1
  9. {codd_dev-2.86.0 → codd_dev-2.87.0}/.gitignore +0 -0
  10. {codd_dev-2.86.0 → codd_dev-2.87.0}/LICENSE +0 -0
  11. {codd_dev-2.86.0 → codd_dev-2.87.0}/README.md +0 -0
  12. {codd_dev-2.86.0 → codd_dev-2.87.0}/bench_fixture/README.md +0 -0
  13. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/__main__.py +0 -0
  14. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/_git_helper.py +0 -0
  15. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/action_outcome.py +0 -0
  16. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/ai_invoke.py +0 -0
  17. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/ai_patch.py +0 -0
  18. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/artifact_contract.py +0 -0
  19. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/artifact_ids.py +0 -0
  20. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/artifacts/catalog.yaml +0 -0
  21. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/ask_user_question_adapter.py +0 -0
  22. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/assembler.py +0 -0
  23. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/bridge.py +0 -0
  24. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/brownfield/__init__.py +0 -0
  25. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/brownfield/pipeline.py +0 -0
  26. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/capability_completeness.py +0 -0
  27. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/claude_cli.py +0 -0
  28. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/cli.py +0 -0
  29. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/clustering.py +0 -0
  30. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/coherence_adapters.py +0 -0
  31. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/coherence_engine.py +0 -0
  32. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/confidence.py +0 -0
  33. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/config.py +0 -0
  34. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/config_schema.py +0 -0
  35. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/contracts.py +0 -0
  36. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/contracts_registry/__init__.py +0 -0
  37. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/contracts_registry/__main__.py +0 -0
  38. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/contracts_registry/certify.py +0 -0
  39. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/contracts_registry/generate_matrix.py +0 -0
  40. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/contracts_registry/registry.py +0 -0
  41. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/coverage_auditor.py +0 -0
  42. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/coverage_execution_coherence.py +0 -0
  43. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/coverage_metrics.py +0 -0
  44. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/__init__.py +0 -0
  45. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/auto_repair.py +0 -0
  46. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/builder.py +0 -0
  47. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/__init__.py +0 -0
  48. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
  49. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/artifact_contract_check.py +0 -0
  50. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/ci_health.py +0 -0
  51. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/dependency_freshness.py +0 -0
  52. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/depends_on_consistency.py +0 -0
  53. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/deployment_completeness.py +0 -0
  54. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/edge_validity.py +0 -0
  55. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/environment_coverage.py +0 -0
  56. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/implementation_coverage.py +0 -0
  57. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/node_completeness.py +0 -0
  58. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/opt_out.py +0 -0
  59. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/task_completion.py +0 -0
  60. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/transitive_closure.py +0 -0
  61. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/ui_coherence.py +0 -0
  62. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/checks/user_journey_coherence.py +0 -0
  63. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/coverage_axes.py +0 -0
  64. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/defaults/cli.yaml +0 -0
  65. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
  66. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/defaults/csharp.yaml +0 -0
  67. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/defaults/elixir.yaml +0 -0
  68. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/defaults/generic.yaml +0 -0
  69. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/defaults/iot.yaml +0 -0
  70. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/defaults/java.yaml +0 -0
  71. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/defaults/kotlin.yaml +0 -0
  72. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/defaults/mobile.yaml +0 -0
  73. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/defaults/ruby.yaml +0 -0
  74. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/defaults/rust.yaml +0 -0
  75. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/defaults/scala.yaml +0 -0
  76. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/defaults/swift.yaml +0 -0
  77. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
  78. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/defaults/web.yaml +0 -0
  79. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/extractor.py +0 -0
  80. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/impact.py +0 -0
  81. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dag/runner.py +0 -0
  82. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/defaults.py +0 -0
  83. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/defaults.yaml +0 -0
  84. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/dependency_lock_coherence.py +0 -0
  85. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deploy_targets/__init__.py +0 -0
  86. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deploy_targets/app_service.py +0 -0
  87. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deploy_targets/base.py +0 -0
  88. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deploy_targets/docker_compose.py +0 -0
  89. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployer.py +0 -0
  90. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/__init__.py +0 -0
  91. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/checks/__init__.py +0 -0
  92. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
  93. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
  94. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
  95. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
  96. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/extractor.py +0 -0
  97. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/__init__.py +0 -0
  98. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/ai_command.py +0 -0
  99. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/ai_command_factory.py +0 -0
  100. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/codex_app_server.py +0 -0
  101. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/llm_consideration.py +0 -0
  102. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/schema/__init__.py +0 -0
  103. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/schema/prisma.py +0 -0
  104. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/target/__init__.py +0 -0
  105. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/target/docker_compose.py +0 -0
  106. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/verification/__init__.py +0 -0
  107. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
  108. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
  109. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
  110. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
  111. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
  112. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/verification/curl.py +0 -0
  113. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
  114. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
  115. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/verification/playwright.py +0 -0
  116. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/verification/pytest_http.py +0 -0
  117. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/deployment/providers/verification/vitest.py +0 -0
  118. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/design_md.py +0 -0
  119. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/diff/__init__.py +0 -0
  120. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/diff/apply.py +0 -0
  121. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/diff/engine.py +0 -0
  122. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/diff/persistence.py +0 -0
  123. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/diff/templates/diff_prompt.md +0 -0
  124. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/discovery.py +0 -0
  125. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/drift.py +0 -0
  126. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/e2e_contract_coherence.py +0 -0
  127. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/e2e_extractor.py +0 -0
  128. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/e2e_generator.py +0 -0
  129. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/e2e_harness.py +0 -0
  130. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/e2e_runner.py +0 -0
  131. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/elicit/__init__.py +0 -0
  132. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/elicit/apply.py +0 -0
  133. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/elicit/engine.py +0 -0
  134. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/elicit/finding.py +0 -0
  135. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/elicit/formatters/__init__.py +0 -0
  136. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/elicit/formatters/base.py +0 -0
  137. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/elicit/formatters/interactive.py +0 -0
  138. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/elicit/formatters/json_fmt.py +0 -0
  139. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/elicit/formatters/md.py +0 -0
  140. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/elicit/lexicon_loader.py +0 -0
  141. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/elicit/persistence.py +0 -0
  142. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
  143. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/env_refs.py +0 -0
  144. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/extract_ai.py +0 -0
  145. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/extract_paths.py +0 -0
  146. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fix/__init__.py +0 -0
  147. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fix/candidate_selector.py +0 -0
  148. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fix/design_updater.py +0 -0
  149. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fix/impl_propagation.py +0 -0
  150. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fix/interactive_prompt.py +0 -0
  151. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fix/phenomenon_fixer.py +0 -0
  152. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fix/phenomenon_parser.py +0 -0
  153. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fix/risk_classifier.py +0 -0
  154. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fix/templates/clarification_question.txt +0 -0
  155. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fix/templates/design_update.txt +0 -0
  156. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fix/templates/impl_update.txt +0 -0
  157. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
  158. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fix/templates/risk_assessment.txt +0 -0
  159. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fix/templates_loader.py +0 -0
  160. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fixer.py +0 -0
  161. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fixup_drift.py +0 -0
  162. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fixup_drift_strategies/__init__.py +0 -0
  163. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
  164. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
  165. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
  166. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/frontmatter.py +0 -0
  167. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/generator.py +0 -0
  168. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/git_evidence.py +0 -0
  169. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/graph.py +0 -0
  170. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/greenfield/__init__.py +0 -0
  171. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/greenfield/pipeline.py +0 -0
  172. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/hitl_session.py +0 -0
  173. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/hooks/__init__.py +0 -0
  174. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/hooks/pre-commit +0 -0
  175. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
  176. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
  177. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/hooks/recipes/codex_hook.sh +0 -0
  178. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
  179. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
  180. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/iac_nfr.py +0 -0
  181. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/implement_oracle.py +0 -0
  182. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/implement_oracle_scope.py +0 -0
  183. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/implement_oracle_types.py +0 -0
  184. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/implementer/__init__.py +0 -0
  185. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/implementer/chunked_runner.py +0 -0
  186. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/implementer/typecheck_loop.py +0 -0
  187. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/implementer.py +0 -0
  188. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/import_coherence.py +0 -0
  189. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/inheritance.py +0 -0
  190. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/init/__init__.py +0 -0
  191. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/init/lexicon_suggest.py +0 -0
  192. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/init/llm_lexicon_suggester.py +0 -0
  193. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/init/stack_detector.py +0 -0
  194. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/knowledge_fetcher.py +0 -0
  195. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/__init__.py +0 -0
  196. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/adapters/__init__.py +0 -0
  197. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/adapters/implement_oracle.py +0 -0
  198. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/adapters/oracle_go.py +0 -0
  199. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/adapters/oracle_python.py +0 -0
  200. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/adapters/oracle_typescript.py +0 -0
  201. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/adapters/runner_report.py +0 -0
  202. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/builtin_adapters.py +0 -0
  203. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/compat.py +0 -0
  204. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/contract.py +0 -0
  205. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/loader.py +0 -0
  206. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/oracle_executor.py +0 -0
  207. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/path_planner.py +0 -0
  208. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/profile.py +0 -0
  209. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/profiles/go.yaml +0 -0
  210. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/profiles/python.yaml +0 -0
  211. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/profiles/typescript.yaml +0 -0
  212. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/registry.py +0 -0
  213. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/verify_executor.py +0 -0
  214. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/languages/verify_plan.py +0 -0
  215. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/lexicon.py +0 -0
  216. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/lexicon_cli/__init__.py +0 -0
  217. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
  218. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/lexicon_cli/formatters/html.py +0 -0
  219. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
  220. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/lexicon_cli/formatters/md.py +0 -0
  221. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/lexicon_cli/inspector.py +0 -0
  222. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/lexicon_cli/manager.py +0 -0
  223. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/lexicon_cli/reporter.py +0 -0
  224. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/lexicon_cli/threshold.py +0 -0
  225. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/__init__.py +0 -0
  226. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/approval.py +0 -0
  227. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/best_practice_augmenter.py +0 -0
  228. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/criteria_expander.py +0 -0
  229. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/design_doc_extractor.py +0 -0
  230. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/impl_step_deriver.py +0 -0
  231. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/means_catalog_loader.py +0 -0
  232. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/parser.py +0 -0
  233. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/plan_deriver.py +0 -0
  234. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/prompt_builder.py +0 -0
  235. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/strategy_validator.py +0 -0
  236. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
  237. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
  238. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
  239. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
  240. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
  241. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/templates/meta_instruction.md +0 -0
  242. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/templates/plan_derive_meta.md +0 -0
  243. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
  244. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/mcp_server.py +0 -0
  245. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/measure.py +0 -0
  246. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/operational_e2e_audit.py +0 -0
  247. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/operations_derive.py +0 -0
  248. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/parsing/_shared.py +0 -0
  249. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/parsing/api_specs.py +0 -0
  250. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/parsing/filesystem_routes.py +0 -0
  251. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/parsing/iac.py +0 -0
  252. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/parsing/python_ast.py +0 -0
  253. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/parsing/schemas.py +0 -0
  254. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/parsing/tests_builddeps.py +0 -0
  255. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/parsing/treesitter.py +0 -0
  256. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/planner.py +0 -0
  257. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/policy.py +0 -0
  258. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/preflight/__init__.py +0 -0
  259. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/preflight/defaults/cli.yaml +0 -0
  260. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/preflight/defaults/generic.yaml +0 -0
  261. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/preflight/defaults/iot.yaml +0 -0
  262. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/preflight/defaults/mobile.yaml +0 -0
  263. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/preflight/defaults/web.yaml +0 -0
  264. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/project_types.py +0 -0
  265. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/propagate.py +0 -0
  266. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/propagation_common.py +0 -0
  267. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/propagator.py +0 -0
  268. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/reconciliation_ledger.py +0 -0
  269. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/reference_resolution.py +0 -0
  270. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/registry.py +0 -0
  271. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/__init__.py +0 -0
  272. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/approval_repair.py +0 -0
  273. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/auto_scope_guard.py +0 -0
  274. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/engine.py +0 -0
  275. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/git_patcher.py +0 -0
  276. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/history.py +0 -0
  277. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/llm_repair_engine.py +0 -0
  278. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/loop.py +0 -0
  279. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/primary_picker.py +0 -0
  280. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/proof_breaks.py +0 -0
  281. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/repair_result.py +0 -0
  282. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/repairability_classifier.py +0 -0
  283. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/schema.py +0 -0
  284. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/templates/analyze_meta.md +0 -0
  285. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/templates/propose_meta.md +0 -0
  286. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
  287. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/templates/repairability_meta.md +0 -0
  288. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/test_failure_attribution.py +0 -0
  289. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair/verify_runner.py +0 -0
  290. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/repair_slice.py +0 -0
  291. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/require.py +0 -0
  292. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/require_plugins.py +0 -0
  293. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/require_propagate.py +0 -0
  294. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
  295. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
  296. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
  297. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
  298. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/required_artifacts/defaults/web.yaml +0 -0
  299. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/required_artifacts_deriver.py +0 -0
  300. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
  301. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
  302. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
  303. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
  304. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
  305. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/requirement_completeness_auditor.py +0 -0
  306. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/requirement_reconciliation.py +0 -0
  307. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/requirements_meta.py +0 -0
  308. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/restoration_report.py +0 -0
  309. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/restore.py +0 -0
  310. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/routes_extractor.py +0 -0
  311. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/runtime_smoke/__init__.py +0 -0
  312. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/runtime_smoke/checks.py +0 -0
  313. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/runtime_smoke/config.py +0 -0
  314. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/runtime_smoke/report.py +0 -0
  315. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/runtime_smoke/runner.py +0 -0
  316. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/schema_refs.py +0 -0
  317. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/screen_flow_validator.py +0 -0
  318. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/screen_transition_extractor.py +0 -0
  319. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/screen_transitions/defaults.yaml +0 -0
  320. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/skills_cli/__init__.py +0 -0
  321. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/skills_cli/discovery.py +0 -0
  322. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/skills_cli/manager.py +0 -0
  323. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/skills_cli/paths.py +0 -0
  324. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/__init__.py +0 -0
  325. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/adapters/__init__.py +0 -0
  326. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/adapters/_base.py +0 -0
  327. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/adapters/nextjs.py +0 -0
  328. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/adapters/playwright.py +0 -0
  329. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/compose.py +0 -0
  330. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/loader.py +0 -0
  331. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/lock.py +0 -0
  332. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/obligations.py +0 -0
  333. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/profile.py +0 -0
  334. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/profiles/addons/playwright.yaml +0 -0
  335. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/profiles/addons/prisma.yaml +0 -0
  336. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/profiles/frameworks/nextjs.yaml +0 -0
  337. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/project.py +0 -0
  338. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/registry.py +0 -0
  339. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/stack/resolve.py +0 -0
  340. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/surface_reconciliation.py +0 -0
  341. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/synth.py +0 -0
  342. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/templates/codd.yaml.tmpl +0 -0
  343. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/templates/conventions.yaml.tmpl +0 -0
  344. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
  345. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/templates/doc_links.yaml.tmpl +0 -0
  346. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
  347. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
  348. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
  349. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
  350. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
  351. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/templates/extracted/system-context.md.j2 +0 -0
  352. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/templates/gitignore.tmpl +0 -0
  353. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/templates/lexicon_questions.md +0 -0
  354. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/templates/lexicon_schema.yaml +0 -0
  355. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/templates/overrides.yaml.tmpl +0 -0
  356. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/test_detection.py +0 -0
  357. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/test_import_coherence.py +0 -0
  358. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/traceability.py +0 -0
  359. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/validator.py +0 -0
  360. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/vb_marker_authenticity.py +0 -0
  361. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/vb_rerun_scope.py +0 -0
  362. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/verifiable_behavior_audit.py +0 -0
  363. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/watch/__init__.py +0 -0
  364. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/watch/events.py +0 -0
  365. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/watch/propagation_log.py +0 -0
  366. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/watch/propagation_pipeline.py +0 -0
  367. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/watch/test_runner.py +0 -0
  368. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/watch/watcher.py +0 -0
  369. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd/wiring.py +0 -0
  370. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
  371. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
  372. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
  373. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
  374. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
  375. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
  376. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
  377. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
  378. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
  379. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
  380. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
  381. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
  382. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
  383. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
  384. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
  385. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
  386. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
  387. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
  388. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
  389. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
  390. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
  391. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
  392. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
  393. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
  394. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
  395. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
  396. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
  397. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
  398. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
  399. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
  400. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
  401. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
  402. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
  403. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
  404. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
  405. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
  406. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
  407. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
  408. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
  409. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
  410. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
  411. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
  412. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
  413. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
  414. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
  415. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
  416. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
  417. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
  418. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
  419. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
  420. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
  421. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
  422. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
  423. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
  424. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
  425. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
  426. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
  427. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
  428. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
  429. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
  430. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
  431. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
  432. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
  433. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
  434. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
  435. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
  436. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
  437. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
  438. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
  439. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
  440. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
  441. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
  442. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
  443. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
  444. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
  445. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
  446. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
  447. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
  448. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
  449. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
  450. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
  451. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
  452. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
  453. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
  454. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
  455. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
  456. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
  457. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
  458. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
  459. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
  460. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
  461. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
  462. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
  463. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
  464. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
  465. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
  466. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
  467. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
  468. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
  469. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
  470. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
  471. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
  472. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
  473. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
  474. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
  475. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
  476. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
  477. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
  478. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
  479. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
  480. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
  481. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
  482. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
  483. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
  484. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
  485. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
  486. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
  487. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
  488. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
  489. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
  490. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
  491. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
  492. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
  493. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
  494. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
  495. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
  496. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
  497. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
  498. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
  499. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
  500. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
  501. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
  502. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
  503. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
  504. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
  505. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
  506. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
  507. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
  508. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
  509. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
  510. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
  511. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
  512. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
  513. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
  514. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
  515. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
  516. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
  517. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
  518. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
  519. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
  520. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
  521. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
  522. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
  523. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
  524. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
  525. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
  526. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
  527. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
  528. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
  529. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
  530. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
  531. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
  532. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
  533. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
  534. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
  535. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
  536. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
  537. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
  538. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
  539. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
  540. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
  541. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
  542. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
  543. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
  544. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
  545. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
  546. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
  547. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
  548. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
  549. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
  550. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
  551. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
  552. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
  553. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
  554. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
  555. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
  556. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
  557. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
  558. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
  559. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
  560. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
  561. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
  562. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
  563. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
  564. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
  565. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
  566. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
  567. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
  568. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
  569. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
  570. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
  571. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
  572. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
  573. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
  574. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
  575. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
  576. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
  577. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
  578. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
  579. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
  580. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
  581. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
  582. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
  583. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
  584. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
  585. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
  586. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
  587. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
  588. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
  589. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
  590. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
  591. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
  592. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
  593. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
  594. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
  595. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
  596. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
  597. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
  598. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
  599. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
  600. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
  601. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
  602. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
  603. {codd_dev-2.86.0 → codd_dev-2.87.0}/codd_plugins/stack_map.yaml +0 -0
  604. {codd_dev-2.86.0 → codd_dev-2.87.0}/docs/cookbook/cdp_browser/README.md +0 -0
  605. {codd_dev-2.86.0 → codd_dev-2.87.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
  606. {codd_dev-2.86.0 → codd_dev-2.87.0}/docs/requirements/README.md +0 -0
  607. {codd_dev-2.86.0 → codd_dev-2.87.0}/dogfood/README.md +0 -0
  608. {codd_dev-2.86.0 → codd_dev-2.87.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
  609. {codd_dev-2.86.0 → codd_dev-2.87.0}/examples/README.md +0 -0
  610. {codd_dev-2.86.0 → codd_dev-2.87.0}/skills/codd-assemble/SKILL.md +0 -0
  611. {codd_dev-2.86.0 → codd_dev-2.87.0}/skills/codd-evolve/SKILL.md +0 -0
  612. {codd_dev-2.86.0 → codd_dev-2.87.0}/skills/codd-generate/SKILL.md +0 -0
  613. {codd_dev-2.86.0 → codd_dev-2.87.0}/skills/codd-greenfield/SKILL.md +0 -0
  614. {codd_dev-2.86.0 → codd_dev-2.87.0}/skills/codd-impact/SKILL.md +0 -0
  615. {codd_dev-2.86.0 → codd_dev-2.87.0}/skills/codd-init/SKILL.md +0 -0
  616. {codd_dev-2.86.0 → codd_dev-2.87.0}/skills/codd-propagate/SKILL.md +0 -0
  617. {codd_dev-2.86.0 → codd_dev-2.87.0}/skills/codd-restore/SKILL.md +0 -0
  618. {codd_dev-2.86.0 → codd_dev-2.87.0}/skills/codd-scan/SKILL.md +0 -0
  619. {codd_dev-2.86.0 → codd_dev-2.87.0}/skills/codd-validate/SKILL.md +0 -0
  620. {codd_dev-2.86.0 → codd_dev-2.87.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.86.0
3
+ Version: 2.87.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.86.0"
3
+ __version__ = "2.87.0"
@@ -365,13 +365,14 @@ def _detect_test_dirs(project_root: Path) -> list[str]:
365
365
 
366
366
 
367
367
  def _language_extensions(language: str) -> set[str]:
368
- return {
369
- "python": {".py"},
370
- "typescript": {".ts", ".tsx"},
371
- "javascript": {".js", ".jsx"},
372
- "java": {".java"},
373
- "go": {".go"},
374
- }.get(language, set())
368
+ """Source-file extensions for ``language`` (registry-data lookup).
369
+
370
+ Contract Kernel Cut Condition A: no language-name keyed dict in core — the
371
+ extension table lives in the registry-DATA strategy. Byte-identical.
372
+ """
373
+ from codd.parsing.regex_strategies import language_extensions
374
+
375
+ return language_extensions(language)
375
376
 
376
377
 
377
378
  def _discover_modules(facts: ProjectFacts, project_root: Path, src_dir: Path,
@@ -473,92 +474,36 @@ def _schema_has_data(schema_info: Any) -> bool:
473
474
 
474
475
  def _file_to_module(rel_path: str, project_root: Path, src_dir: Path,
475
476
  language: str) -> str:
476
- """Map a file path to its module name."""
477
- rel_to_src = Path(rel_path).relative_to(src_dir.relative_to(project_root))
477
+ """Map a file path to its module name.
478
478
 
479
- if language == "python":
480
- parts = list(rel_to_src.parts)
481
- # Remove .py extension from last part
482
- if parts and parts[-1].endswith(".py"):
483
- parts[-1] = parts[-1][:-3]
484
- # If file is __init__.py, module is the parent directory
485
- if parts and parts[-1] == "__init__":
486
- parts.pop()
487
- # Top-level module name
488
- if parts:
489
- return parts[0]
490
- return rel_to_src.parent.name or "root"
491
-
492
- elif language in ("typescript", "javascript"):
493
- parts = list(rel_to_src.parts)
494
- if parts:
495
- return parts[0]
496
- return "root"
497
-
498
- elif language == "java":
499
- # Use top-level directory under src
500
- parts = list(rel_to_src.parts)
501
- # Skip standard layout dirs (main/java, main/kotlin)
502
- skip = {"main", "java", "kotlin", "scala"}
503
- parts = [p for p in parts if p not in skip]
504
- if parts:
505
- return parts[0]
506
- return "root"
507
-
508
- elif language == "go":
509
- parts = list(rel_to_src.parts)
510
- if parts:
511
- return parts[0]
512
- return "root"
479
+ Contract Kernel Cut Condition A: dispatches through the registry-DATA
480
+ strategy's ``file_to_module`` rule (no ``if language ==`` branch). The
481
+ generic strategy reproduces the former trailing ``return parts[0]``
482
+ default; behaviour is byte-identical.
483
+ """
484
+ from codd.parsing.regex_strategies import strategy_for
513
485
 
486
+ rel_to_src = Path(rel_path).relative_to(src_dir.relative_to(project_root))
487
+ rule = strategy_for(language).file_to_module
488
+ if rule is not None:
489
+ result = rule(rel_to_src)
490
+ if result is not None:
491
+ return result
514
492
  return rel_to_src.parts[0] if rel_to_src.parts else "root"
515
493
 
516
494
 
517
495
  def _extract_symbols(content: str, rel_path: str, language: str) -> list[Symbol]:
518
- """Extract classes and functions from source code (regex-based MVP)."""
519
- symbols = []
520
-
521
- if language == "python":
522
- for i, line in enumerate(content.splitlines(), 1):
523
- m = re.match(r'^\s*class\s+(\w+)', line)
524
- if m:
525
- symbols.append(Symbol(m.group(1), "class", rel_path, i))
526
- m = re.match(r'^\s*(?:async\s+)?def\s+(\w+)\s*\(([^)]*)\)', line)
527
- if m and not m.group(1).startswith("_"):
528
- symbols.append(Symbol(m.group(1), "function", rel_path, i, m.group(2).strip()))
529
-
530
- elif language in ("typescript", "javascript"):
531
- for i, line in enumerate(content.splitlines(), 1):
532
- m = re.match(r'^(?:export\s+)?class\s+(\w+)', line)
533
- if m:
534
- symbols.append(Symbol(m.group(1), "class", rel_path, i))
535
- m = re.match(r'^(?:export\s+)?(?:async\s+)?function\s+(\w+)\s*\(([^)]*)\)', line)
536
- if m:
537
- symbols.append(Symbol(m.group(1), "function", rel_path, i, m.group(2).strip()))
538
- # Arrow function exports
539
- m = re.match(r'^export\s+const\s+(\w+)\s*=\s*(?:async\s+)?\(', line)
540
- if m:
541
- symbols.append(Symbol(m.group(1), "function", rel_path, i))
542
-
543
- elif language == "java":
544
- for i, line in enumerate(content.splitlines(), 1):
545
- m = re.match(r'^\s*(?:public|protected|private)?\s*(?:static\s+)?(?:abstract\s+)?class\s+(\w+)', line)
546
- if m:
547
- symbols.append(Symbol(m.group(1), "class", rel_path, i))
548
- m = re.match(r'^\s*(?:public|protected)\s+(?:static\s+)?[\w<>\[\],\s]+\s+(\w+)\s*\(([^)]*)\)', line)
549
- if m and m.group(1)[0].islower():
550
- symbols.append(Symbol(m.group(1), "function", rel_path, i, m.group(2).strip()))
551
-
552
- elif language == "go":
553
- for i, line in enumerate(content.splitlines(), 1):
554
- m = re.match(r'^type\s+(\w+)\s+struct\s*\{', line)
555
- if m:
556
- symbols.append(Symbol(m.group(1), "class", rel_path, i))
557
- m = re.match(r'^func\s+(?:\(\w+\s+\*?\w+\)\s+)?(\w+)\s*\(([^)]*)\)', line)
558
- if m and m.group(1)[0].isupper():
559
- symbols.append(Symbol(m.group(1), "function", rel_path, i, m.group(2).strip()))
560
-
561
- return symbols
496
+ """Extract classes and functions from source code (regex-based MVP).
497
+
498
+ Contract Kernel Cut Condition A: this core function no longer branches on a
499
+ language name — it dispatches through the registry-DATA strategy for
500
+ ``language`` (see :mod:`codd.parsing.regex_strategies`). The per-language
501
+ regex bodies live in that strategy table (the allowed extractor-impl zone);
502
+ behaviour is byte-identical to the former inline ladder.
503
+ """
504
+ from codd.parsing.regex_strategies import strategy_for
505
+
506
+ return strategy_for(language).symbols(content, rel_path)
562
507
 
563
508
 
564
509
  def _extract_imports(content: str, language: str, project_root: Path,
@@ -566,105 +511,26 @@ def _extract_imports(content: str, language: str, project_root: Path,
566
511
  """Extract imports, classified as internal or external.
567
512
 
568
513
  Returns (internal_imports: {module_name: [import_lines]}, external_imports: set)
569
- """
570
- internal: dict[str, list[str]] = {}
571
- external: set[str] = set()
572
-
573
- if language == "python":
574
- # Determine package name of the source dir itself
575
- src_pkg_name = src_dir.name if (src_dir / "__init__.py").exists() else None
576
-
577
- for line in content.splitlines():
578
- m = re.match(r'^(?:from|import)\s+([\w.]+)', line.strip())
579
- if not m:
580
- continue
581
- module = m.group(1)
582
- parts = module.split(".")
583
- top_level = parts[0]
584
-
585
- # Check if it's an internal module
586
- is_internal = False
587
- internal_key = top_level
588
-
589
- # Case 1: import references the source package itself (e.g., from codd.graph)
590
- if src_pkg_name and top_level == src_pkg_name and len(parts) >= 2:
591
- is_internal = True
592
- internal_key = parts[1] # Use sub-module as the key
593
- else:
594
- # Case 2: import references a sibling directory/file
595
- for sd in [src_dir] + [project_root / d for d in ("src", "lib", "app") if (project_root / d).is_dir()]:
596
- if (sd / top_level).is_dir() or (sd / f"{top_level}.py").is_file():
597
- is_internal = True
598
- break
599
-
600
- if is_internal:
601
- internal.setdefault(internal_key, []).append(line.strip())
602
- else:
603
- external.add(top_level)
604
514
 
605
- elif language in ("typescript", "javascript"):
606
- for line in content.splitlines():
607
- m = re.search(r'''(?:import|from)\s+['"]([^'"]+)['"]''', line)
608
- if not m:
609
- continue
610
- import_path = m.group(1)
611
- if import_path.startswith("."):
612
- # Relative import → internal
613
- resolved = (file_path.parent / import_path).resolve()
614
- try:
615
- rel = resolved.relative_to(src_dir)
616
- top_level = rel.parts[0] if rel.parts else "root"
617
- internal.setdefault(top_level, []).append(line.strip())
618
- except ValueError:
619
- external.add(import_path)
620
- elif import_path.startswith("@"):
621
- # Scoped package
622
- parts = import_path.split("/")
623
- pkg = "/".join(parts[:2]) if len(parts) >= 2 else import_path
624
- external.add(pkg)
625
- else:
626
- external.add(import_path.split("/")[0])
515
+ Contract Kernel Cut Condition A: dispatches through the registry-DATA
516
+ strategy for ``language`` (no ``if language ==`` branch here). The strategy
517
+ also applies the per-language stdlib subtraction, byte-identical to the
518
+ former inline ``external -= _common_stdlib(language)`` tail.
519
+ """
520
+ from codd.parsing.regex_strategies import strategy_for
627
521
 
628
- elif language == "go":
629
- in_import = False
630
- for line in content.splitlines():
631
- if re.match(r'^import\s*\(', line):
632
- in_import = True
633
- continue
634
- if in_import and line.strip() == ")":
635
- in_import = False
636
- continue
637
- if in_import or re.match(r'^import\s+"', line):
638
- m = re.search(r'"([^"]+)"', line)
639
- if m:
640
- pkg = m.group(1)
641
- external.add(pkg.split("/")[-1])
522
+ return strategy_for(language).imports(content, project_root, src_dir, file_path)
642
523
 
643
- # Remove stdlib-like imports from external
644
- external -= _common_stdlib(language)
645
524
 
646
- return internal, external
525
+ def _common_stdlib(language: str) -> set[str]:
526
+ """Return common stdlib modules to exclude from external imports.
647
527
 
528
+ Registry-data lookup (no language-name branch); empty for languages with no
529
+ declared stdlib set, byte-identical to the former python-only ladder.
530
+ """
531
+ from codd.parsing.regex_strategies import common_stdlib
648
532
 
649
- def _common_stdlib(language: str) -> set[str]:
650
- """Return common stdlib modules to exclude from external imports."""
651
- if language == "python":
652
- return {
653
- "os", "sys", "re", "json", "math", "time", "datetime", "pathlib",
654
- "typing", "collections", "itertools", "functools", "copy", "io",
655
- "subprocess", "shutil", "tempfile", "hashlib", "uuid", "logging",
656
- "unittest", "dataclasses", "enum", "abc", "contextlib", "textwrap",
657
- "argparse", "configparser", "csv", "sqlite3", "http", "urllib",
658
- "threading", "multiprocessing", "socket", "email", "html", "xml",
659
- "importlib", "inspect", "ast", "dis", "warnings", "traceback",
660
- "pprint", "string", "struct", "array", "queue", "heapq", "bisect",
661
- "statistics", "random", "secrets", "base64", "binascii", "codecs",
662
- "locale", "gettext", "calendar", "zlib", "gzip", "tarfile", "zipfile",
663
- "__future__", "builtins", "types", "operator", "fnmatch", "glob",
664
- "signal", "mmap", "ctypes", "platform", "sysconfig", "site",
665
- "concurrent", "asyncio", "selectors", "ssl", "ftplib", "smtplib",
666
- }
667
- return set()
533
+ return common_stdlib(language)
668
534
 
669
535
 
670
536
  def _map_tests_to_modules(facts: ProjectFacts, project_root: Path,
@@ -706,19 +572,19 @@ def _map_tests_to_modules(facts: ProjectFacts, project_root: Path,
706
572
 
707
573
 
708
574
  def _guess_test_target(test_filename: str, language: str) -> str | None:
709
- """Guess which module a test file targets from its name."""
710
- name = Path(test_filename).stem
575
+ """Guess which module a test file targets from its name.
711
576
 
712
- if language == "python":
713
- # test_foo.py foo
714
- if name.startswith("test_"):
715
- return name[5:]
716
- elif language in ("typescript", "javascript"):
717
- # foo.test.ts foo, foo.spec.ts → foo
718
- for suffix in (".test", ".spec"):
719
- if name.endswith(suffix):
720
- return name[: -len(suffix)]
577
+ Contract Kernel Cut Condition A: dispatches through the registry-DATA
578
+ strategy's ``guess_test_target`` rule (no ``if language ==`` branch);
579
+ languages without a rule return ``None``, byte-identical to the former
580
+ ladder.
581
+ """
582
+ from codd.parsing.regex_strategies import strategy_for
721
583
 
584
+ name = Path(test_filename).stem
585
+ rule = strategy_for(language).guess_test_target
586
+ if rule is not None:
587
+ return rule(name)
722
588
  return None
723
589
 
724
590
 
@@ -818,54 +684,28 @@ def _detect_go_patterns(facts: ProjectFacts, content: str):
818
684
 
819
685
 
820
686
  def _detect_code_patterns(mod: ModuleInfo, content: str, language: str):
821
- """Detect API routes, DB models, page routes, auth redirects from source code."""
822
- if language == "python":
823
- if re.search(r'@(?:app|router)\.(get|post|put|delete|patch)\s*\(', content):
824
- mod.patterns["api_routes"] = "HTTP route handlers"
825
- if re.search(r'class\s+\w+\(.*(?:Base|Model|db\.Model)\)', content):
826
- mod.patterns["db_models"] = "ORM models"
827
- if re.search(r'@(?:celery_app|app)\.task', content):
828
- mod.patterns["background_tasks"] = "Async task handlers"
829
- if re.search(r'(?:redirect|RedirectResponse|HttpResponseRedirect)\s*\(', content):
830
- mod.patterns["auth_redirects"] = "Server-side redirects"
831
- if re.search(r'@login_required|@permission_required|LoginRequiredMixin', content):
832
- mod.patterns["auth_guards"] = "Authentication guards"
833
-
834
- elif language in ("typescript", "javascript"):
835
- if re.search(r'(?:app|router)\.(get|post|put|delete|patch)\s*\(', content):
836
- mod.patterns["api_routes"] = "HTTP route handlers"
837
- if re.search(r'@(?:Controller|Get|Post|Put|Delete|Patch)\s*\(', content):
838
- mod.patterns["api_routes"] = "NestJS controller"
839
- if re.search(r'(?:schema|model)\s*\(', content, re.IGNORECASE):
840
- mod.patterns["db_models"] = "Database models"
841
- # Page routes: Next.js/Remix/SvelteKit page components with server-side logic
842
- if re.search(r'export\s+default\s+(?:async\s+)?function\s+\w*Page', content):
843
- mod.patterns["page_routes"] = "Page route components"
844
- # Auth redirects: server-side redirect after auth checks
845
- if re.search(r'(?:redirect|NextResponse\.redirect|Response\.redirect)\s*\(', content):
846
- mod.patterns["auth_redirects"] = "Server-side redirects"
847
- # Middleware with auth/redirect logic
848
- if re.search(r'export\s+(?:async\s+)?function\s+middleware', content):
849
- mod.patterns["middleware"] = "Request middleware"
850
- # Client-side navigation: programmatic redirects after form submission
851
- if re.search(r'(?:router\.push|router\.replace|window\.location\.assign|window\.location\.href\s*=)', content):
852
- mod.patterns["client_redirects"] = "Client-side navigation"
853
- # Auth provider configuration (NextAuth, Auth.js, etc.)
854
- if re.search(r'(?:NextAuth|CredentialsProvider|signIn|signOut|useSession|getServerSession)', content):
855
- mod.patterns["auth_provider"] = "Authentication provider"
687
+ """Detect API routes, DB models, page routes, auth redirects from source code.
688
+
689
+ Contract Kernel Cut Condition A: dispatches through the registry-DATA
690
+ strategy for ``language`` (no ``if language ==`` branch here). The
691
+ per-language detection bodies live in the strategy table; behaviour is
692
+ byte-identical to the former inline ladder.
693
+ """
694
+ from codd.parsing.regex_strategies import strategy_for
695
+
696
+ strategy_for(language).code_patterns(mod, content)
856
697
 
857
698
 
858
699
  def _detect_entry_points(facts: ProjectFacts, project_root: Path, language: str):
859
- """Find likely entry points (main files)."""
860
- candidates = {
861
- "python": ["main.py", "app.py", "manage.py", "wsgi.py", "asgi.py", "__main__.py"],
862
- "typescript": ["index.ts", "main.ts", "app.ts", "server.ts"],
863
- "javascript": ["index.js", "main.js", "app.js", "server.js"],
864
- "java": ["Application.java", "Main.java", "App.java"],
865
- "go": ["main.go", "cmd/main.go"],
866
- }
700
+ """Find likely entry points (main files).
701
+
702
+ Contract Kernel Cut Condition A: the per-language candidate list comes from
703
+ the registry-DATA strategy (no language-name keyed dict in core).
704
+ Byte-identical.
705
+ """
706
+ from codd.parsing.regex_strategies import entry_point_candidates
867
707
 
868
- for candidate in candidates.get(language, []):
708
+ for candidate in entry_point_candidates(language):
869
709
  for src_dir in facts.source_dirs:
870
710
  path = project_root / src_dir / candidate
871
711
  if path.exists():
@@ -166,30 +166,18 @@ from codd.parsing.filesystem_routes import (
166
166
 
167
167
 
168
168
  def get_extractor(language: str, category: str = "source") -> LanguageExtractor:
169
- """Select the best available extractor for a language/category pair."""
170
- normalized_language = language.lower()
171
- normalized_category = category.lower()
169
+ """Select the best available extractor for a language/category pair.
172
170
 
173
- if normalized_category == "schema":
174
- if normalized_language == "sql":
175
- if SqlDdlExtractor.is_available():
176
- return SqlDdlExtractor()
177
- return RegexExtractor(normalized_language, normalized_category)
178
- if normalized_language == "prisma":
179
- return PrismaSchemaExtractor()
180
- return RegexExtractor(normalized_language, normalized_category)
171
+ Contract Kernel Cut Condition A: selection is REGISTRY-DATA-driven (see
172
+ :mod:`codd.parsing.extractor_registry`) the language NAMES live in a data
173
+ table, the core dispatches by a table lookup, NOT a ``if language ==``
174
+ ladder. Falls through to :class:`RegexExtractor` (best-effort analysis) for
175
+ any unknown/unsupported language. Behaviour is byte-identical to the former
176
+ inline ladder.
177
+ """
178
+ from codd.parsing.extractor_registry import select_extractor
181
179
 
182
- if normalized_category == "source" and normalized_language == "python":
183
- return PythonAstExtractor(normalized_language, normalized_category)
184
-
185
- if (
186
- normalized_category == "source"
187
- and normalized_language in _TREE_SITTER_LANGUAGE_PACKAGES
188
- and TreeSitterExtractor.is_available(normalized_language)
189
- ):
190
- return TreeSitterExtractor(normalized_language, normalized_category)
191
-
192
- return RegexExtractor(normalized_language, normalized_category)
180
+ return select_extractor(language, category)
193
181
 
194
182
 
195
183
  __all__ = [
@@ -0,0 +1,120 @@
1
+ """Registry-DATA-driven extractor SELECTION for ``get_extractor``.
2
+
3
+ Contract Kernel Cut Condition A (PARSING/EXTRACTION zone). ``get_extractor``
4
+ used to select a backend with a ``if normalized_language == "python"`` /
5
+ ``in _TREE_SITTER_LANGUAGE_PACKAGES`` ladder. This module replaces that with a
6
+ DATA table of :class:`ExtractorSpec` entries: the core ``get_extractor`` iterates
7
+ the table and picks the first spec whose ``(category, language)`` matches AND
8
+ whose capability probe (``available``) is satisfied — NO ``if language ==``
9
+ branch in the selection function.
10
+
11
+ This registry is deliberately BROADER than the greenfield ``default_registry``
12
+ (go/python/typescript): the extraction engine analyses many languages (python,
13
+ ts, js, go, java, sql, prisma, …), so it must NOT be coupled to the 3 greenfield
14
+ profiles. The language NAMES live here in the DATA table, which is the allowed
15
+ "registry data" zone (v2.76: "project detection uses registry data").
16
+
17
+ Capability probes keep graceful degradation intact: a tree-sitter / sql backend
18
+ whose optional dependency is missing simply does not match, and selection falls
19
+ through to the next spec and finally to :class:`RegexExtractor` (legitimate
20
+ best-effort analysis — extraction is NOT a green/red gate).
21
+ """
22
+
23
+ from __future__ import annotations
24
+
25
+ from dataclasses import dataclass
26
+ from typing import Callable
27
+
28
+ from codd.parsing._shared import LanguageExtractor, RegexExtractor
29
+
30
+
31
+ @dataclass(frozen=True)
32
+ class ExtractorSpec:
33
+ """One selectable extractor backend (registry DATA, not name dispatch).
34
+
35
+ * ``categories`` / ``languages`` — the ``(category, language)`` pairs this
36
+ spec serves (the NAMES that legitimately live in registry data).
37
+ * ``available`` — capability probe (e.g. tree-sitter binding importable);
38
+ ``None`` means always available.
39
+ * ``factory`` — builds the extractor for a ``(language, category)`` pair.
40
+ """
41
+
42
+ categories: frozenset[str]
43
+ languages: frozenset[str]
44
+ factory: Callable[[str, str], LanguageExtractor]
45
+ available: Callable[[str], bool] | None = None
46
+
47
+ def matches(self, language: str, category: str) -> bool:
48
+ if category not in self.categories or language not in self.languages:
49
+ return False
50
+ if self.available is not None and not self.available(language):
51
+ return False
52
+ return True
53
+
54
+
55
+ def _build_specs() -> tuple[ExtractorSpec, ...]:
56
+ # Imported lazily inside the builder to avoid import cycles at package load
57
+ # (these backends import from ``_shared`` / each other).
58
+ from codd.parsing.python_ast import PythonAstExtractor
59
+ from codd.parsing.schemas import PrismaSchemaExtractor, SqlDdlExtractor
60
+ from codd.parsing.treesitter import (
61
+ _TREE_SITTER_LANGUAGE_PACKAGES,
62
+ TreeSitterExtractor,
63
+ )
64
+
65
+ return (
66
+ # ── schema category ──────────────────────────────────────────────
67
+ ExtractorSpec(
68
+ categories=frozenset({"schema"}),
69
+ languages=frozenset({"sql"}),
70
+ factory=lambda language, category: SqlDdlExtractor(),
71
+ available=lambda language: SqlDdlExtractor.is_available(),
72
+ ),
73
+ ExtractorSpec(
74
+ categories=frozenset({"schema"}),
75
+ languages=frozenset({"prisma"}),
76
+ factory=lambda language, category: PrismaSchemaExtractor(),
77
+ ),
78
+ # ── source category ──────────────────────────────────────────────
79
+ ExtractorSpec(
80
+ categories=frozenset({"source"}),
81
+ languages=frozenset({"python"}),
82
+ factory=lambda language, category: PythonAstExtractor(language, category),
83
+ ),
84
+ # Tree-sitter source backend: serves exactly the languages with a
85
+ # registered binding, gated by the per-language availability probe.
86
+ # NOTE: this mirrors the pre-refactor ladder EXACTLY, including that
87
+ # ``sql`` is a tree-sitter package (so ``get_extractor("sql","source")``
88
+ # selects tree-sitter when available) — byte-identical selection.
89
+ ExtractorSpec(
90
+ categories=frozenset({"source"}),
91
+ languages=frozenset(_TREE_SITTER_LANGUAGE_PACKAGES),
92
+ factory=lambda language, category: TreeSitterExtractor(language, category),
93
+ available=lambda language: TreeSitterExtractor.is_available(language),
94
+ ),
95
+ )
96
+
97
+
98
+ _SPECS: tuple[ExtractorSpec, ...] | None = None
99
+
100
+
101
+ def _specs() -> tuple[ExtractorSpec, ...]:
102
+ global _SPECS
103
+ if _SPECS is None:
104
+ _SPECS = _build_specs()
105
+ return _SPECS
106
+
107
+
108
+ def select_extractor(language: str, category: str = "source") -> LanguageExtractor:
109
+ """Select the best available extractor via the registry-data table.
110
+
111
+ Iterates the DATA specs in priority order and returns the first match;
112
+ falls through to :class:`RegexExtractor` (best-effort analysis) when no
113
+ spec serves the ``(language, category)`` pair or the capability is missing.
114
+ """
115
+ normalized_language = (language or "").lower()
116
+ normalized_category = (category or "").lower()
117
+ for spec in _specs():
118
+ if spec.matches(normalized_language, normalized_category):
119
+ return spec.factory(normalized_language, normalized_category)
120
+ return RegexExtractor(normalized_language, normalized_category)