codd-dev 2.86.0__tar.gz → 2.88.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.88.0}/PKG-INFO +1 -1
  2. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/__init__.py +1 -1
  3. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/e2e_harness.py +6 -1
  4. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/extractor.py +75 -235
  5. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/implementer.py +38 -4
  6. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/parsing/__init__.py +10 -22
  7. codd_dev-2.88.0/codd/parsing/extractor_registry.py +120 -0
  8. codd_dev-2.88.0/codd/parsing/regex_strategies.py +637 -0
  9. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/repair_slice.py +36 -20
  10. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/scanner.py +15 -40
  11. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/vb_marker_authenticity.py +17 -1
  12. {codd_dev-2.86.0 → codd_dev-2.88.0}/pyproject.toml +1 -1
  13. {codd_dev-2.86.0 → codd_dev-2.88.0}/.gitignore +0 -0
  14. {codd_dev-2.86.0 → codd_dev-2.88.0}/LICENSE +0 -0
  15. {codd_dev-2.86.0 → codd_dev-2.88.0}/README.md +0 -0
  16. {codd_dev-2.86.0 → codd_dev-2.88.0}/bench_fixture/README.md +0 -0
  17. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/__main__.py +0 -0
  18. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/_git_helper.py +0 -0
  19. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/action_outcome.py +0 -0
  20. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/ai_invoke.py +0 -0
  21. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/ai_patch.py +0 -0
  22. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/artifact_contract.py +0 -0
  23. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/artifact_ids.py +0 -0
  24. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/artifacts/catalog.yaml +0 -0
  25. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/ask_user_question_adapter.py +0 -0
  26. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/assembler.py +0 -0
  27. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/bridge.py +0 -0
  28. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/brownfield/__init__.py +0 -0
  29. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/brownfield/pipeline.py +0 -0
  30. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/capability_completeness.py +0 -0
  31. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/claude_cli.py +0 -0
  32. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/cli.py +0 -0
  33. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/clustering.py +0 -0
  34. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/coherence_adapters.py +0 -0
  35. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/coherence_engine.py +0 -0
  36. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/confidence.py +0 -0
  37. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/config.py +0 -0
  38. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/config_schema.py +0 -0
  39. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/contracts.py +0 -0
  40. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/contracts_registry/__init__.py +0 -0
  41. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/contracts_registry/__main__.py +0 -0
  42. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/contracts_registry/certify.py +0 -0
  43. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/contracts_registry/generate_matrix.py +0 -0
  44. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/contracts_registry/registry.py +0 -0
  45. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/coverage_auditor.py +0 -0
  46. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/coverage_execution_coherence.py +0 -0
  47. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/coverage_metrics.py +0 -0
  48. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/__init__.py +0 -0
  49. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/auto_repair.py +0 -0
  50. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/builder.py +0 -0
  51. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/checks/__init__.py +0 -0
  52. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
  53. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/checks/artifact_contract_check.py +0 -0
  54. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/checks/ci_health.py +0 -0
  55. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/checks/dependency_freshness.py +0 -0
  56. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/checks/depends_on_consistency.py +0 -0
  57. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/checks/deployment_completeness.py +0 -0
  58. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/checks/edge_validity.py +0 -0
  59. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/checks/environment_coverage.py +0 -0
  60. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/checks/implementation_coverage.py +0 -0
  61. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/checks/node_completeness.py +0 -0
  62. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/checks/opt_out.py +0 -0
  63. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/checks/task_completion.py +0 -0
  64. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/checks/transitive_closure.py +0 -0
  65. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/checks/ui_coherence.py +0 -0
  66. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/checks/user_journey_coherence.py +0 -0
  67. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/coverage_axes.py +0 -0
  68. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/defaults/cli.yaml +0 -0
  69. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
  70. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/defaults/csharp.yaml +0 -0
  71. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/defaults/elixir.yaml +0 -0
  72. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/defaults/generic.yaml +0 -0
  73. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/defaults/iot.yaml +0 -0
  74. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/defaults/java.yaml +0 -0
  75. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/defaults/kotlin.yaml +0 -0
  76. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/defaults/mobile.yaml +0 -0
  77. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/defaults/ruby.yaml +0 -0
  78. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/defaults/rust.yaml +0 -0
  79. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/defaults/scala.yaml +0 -0
  80. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/defaults/swift.yaml +0 -0
  81. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
  82. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/defaults/web.yaml +0 -0
  83. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/extractor.py +0 -0
  84. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/impact.py +0 -0
  85. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dag/runner.py +0 -0
  86. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/defaults.py +0 -0
  87. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/defaults.yaml +0 -0
  88. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/dependency_lock_coherence.py +0 -0
  89. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deploy_targets/__init__.py +0 -0
  90. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deploy_targets/app_service.py +0 -0
  91. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deploy_targets/base.py +0 -0
  92. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deploy_targets/docker_compose.py +0 -0
  93. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deployer.py +0 -0
  94. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deployment/__init__.py +0 -0
  95. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deployment/checks/__init__.py +0 -0
  96. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
  97. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
  98. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
  99. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
  100. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deployment/extractor.py +0 -0
  101. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deployment/providers/__init__.py +0 -0
  102. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deployment/providers/ai_command.py +0 -0
  103. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deployment/providers/ai_command_factory.py +0 -0
  104. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deployment/providers/codex_app_server.py +0 -0
  105. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deployment/providers/llm_consideration.py +0 -0
  106. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deployment/providers/schema/__init__.py +0 -0
  107. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deployment/providers/schema/prisma.py +0 -0
  108. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deployment/providers/target/__init__.py +0 -0
  109. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deployment/providers/target/docker_compose.py +0 -0
  110. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deployment/providers/verification/__init__.py +0 -0
  111. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
  112. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
  113. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
  114. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
  115. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
  116. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deployment/providers/verification/curl.py +0 -0
  117. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
  118. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
  119. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deployment/providers/verification/playwright.py +0 -0
  120. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deployment/providers/verification/pytest_http.py +0 -0
  121. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/deployment/providers/verification/vitest.py +0 -0
  122. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/design_md.py +0 -0
  123. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/diff/__init__.py +0 -0
  124. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/diff/apply.py +0 -0
  125. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/diff/engine.py +0 -0
  126. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/diff/persistence.py +0 -0
  127. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/diff/templates/diff_prompt.md +0 -0
  128. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/discovery.py +0 -0
  129. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/drift.py +0 -0
  130. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/e2e_contract_coherence.py +0 -0
  131. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/e2e_extractor.py +0 -0
  132. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/e2e_generator.py +0 -0
  133. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/e2e_runner.py +0 -0
  134. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/elicit/__init__.py +0 -0
  135. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/elicit/apply.py +0 -0
  136. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/elicit/engine.py +0 -0
  137. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/elicit/finding.py +0 -0
  138. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/elicit/formatters/__init__.py +0 -0
  139. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/elicit/formatters/base.py +0 -0
  140. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/elicit/formatters/interactive.py +0 -0
  141. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/elicit/formatters/json_fmt.py +0 -0
  142. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/elicit/formatters/md.py +0 -0
  143. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/elicit/lexicon_loader.py +0 -0
  144. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/elicit/persistence.py +0 -0
  145. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
  146. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/env_refs.py +0 -0
  147. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/extract_ai.py +0 -0
  148. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/extract_paths.py +0 -0
  149. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/fix/__init__.py +0 -0
  150. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/fix/candidate_selector.py +0 -0
  151. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/fix/design_updater.py +0 -0
  152. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/fix/impl_propagation.py +0 -0
  153. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/fix/interactive_prompt.py +0 -0
  154. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/fix/phenomenon_fixer.py +0 -0
  155. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/fix/phenomenon_parser.py +0 -0
  156. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/fix/risk_classifier.py +0 -0
  157. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/fix/templates/clarification_question.txt +0 -0
  158. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/fix/templates/design_update.txt +0 -0
  159. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/fix/templates/impl_update.txt +0 -0
  160. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
  161. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/fix/templates/risk_assessment.txt +0 -0
  162. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/fix/templates_loader.py +0 -0
  163. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/fixer.py +0 -0
  164. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/fixup_drift.py +0 -0
  165. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/fixup_drift_strategies/__init__.py +0 -0
  166. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
  167. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
  168. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
  169. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/frontmatter.py +0 -0
  170. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/generator.py +0 -0
  171. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/git_evidence.py +0 -0
  172. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/graph.py +0 -0
  173. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/greenfield/__init__.py +0 -0
  174. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/greenfield/pipeline.py +0 -0
  175. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/hitl_session.py +0 -0
  176. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/hooks/__init__.py +0 -0
  177. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/hooks/pre-commit +0 -0
  178. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
  179. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
  180. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/hooks/recipes/codex_hook.sh +0 -0
  181. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
  182. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
  183. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/iac_nfr.py +0 -0
  184. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/implement_oracle.py +0 -0
  185. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/implement_oracle_scope.py +0 -0
  186. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/implement_oracle_types.py +0 -0
  187. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/implementer/__init__.py +0 -0
  188. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/implementer/chunked_runner.py +0 -0
  189. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/implementer/typecheck_loop.py +0 -0
  190. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/import_coherence.py +0 -0
  191. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/inheritance.py +0 -0
  192. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/init/__init__.py +0 -0
  193. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/init/lexicon_suggest.py +0 -0
  194. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/init/llm_lexicon_suggester.py +0 -0
  195. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/init/stack_detector.py +0 -0
  196. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/knowledge_fetcher.py +0 -0
  197. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/languages/__init__.py +0 -0
  198. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/languages/adapters/__init__.py +0 -0
  199. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/languages/adapters/implement_oracle.py +0 -0
  200. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/languages/adapters/oracle_go.py +0 -0
  201. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/languages/adapters/oracle_python.py +0 -0
  202. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/languages/adapters/oracle_typescript.py +0 -0
  203. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/languages/adapters/runner_report.py +0 -0
  204. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/languages/builtin_adapters.py +0 -0
  205. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/languages/compat.py +0 -0
  206. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/languages/contract.py +0 -0
  207. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/languages/loader.py +0 -0
  208. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/languages/oracle_executor.py +0 -0
  209. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/languages/path_planner.py +0 -0
  210. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/languages/profile.py +0 -0
  211. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/languages/profiles/go.yaml +0 -0
  212. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/languages/profiles/python.yaml +0 -0
  213. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/languages/profiles/typescript.yaml +0 -0
  214. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/languages/registry.py +0 -0
  215. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/languages/verify_executor.py +0 -0
  216. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/languages/verify_plan.py +0 -0
  217. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/lexicon.py +0 -0
  218. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/lexicon_cli/__init__.py +0 -0
  219. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
  220. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/lexicon_cli/formatters/html.py +0 -0
  221. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
  222. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/lexicon_cli/formatters/md.py +0 -0
  223. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/lexicon_cli/inspector.py +0 -0
  224. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/lexicon_cli/manager.py +0 -0
  225. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/lexicon_cli/reporter.py +0 -0
  226. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/lexicon_cli/threshold.py +0 -0
  227. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/llm/__init__.py +0 -0
  228. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/llm/approval.py +0 -0
  229. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/llm/best_practice_augmenter.py +0 -0
  230. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/llm/criteria_expander.py +0 -0
  231. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/llm/design_doc_extractor.py +0 -0
  232. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/llm/impl_step_deriver.py +0 -0
  233. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/llm/means_catalog_loader.py +0 -0
  234. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/llm/parser.py +0 -0
  235. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/llm/plan_deriver.py +0 -0
  236. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/llm/prompt_builder.py +0 -0
  237. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/llm/strategy_validator.py +0 -0
  238. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
  239. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
  240. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
  241. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
  242. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
  243. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/llm/templates/meta_instruction.md +0 -0
  244. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/llm/templates/plan_derive_meta.md +0 -0
  245. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
  246. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/mcp_server.py +0 -0
  247. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/measure.py +0 -0
  248. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/operational_e2e_audit.py +0 -0
  249. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/operations_derive.py +0 -0
  250. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/parsing/_shared.py +0 -0
  251. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/parsing/api_specs.py +0 -0
  252. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/parsing/filesystem_routes.py +0 -0
  253. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/parsing/iac.py +0 -0
  254. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/parsing/python_ast.py +0 -0
  255. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/parsing/schemas.py +0 -0
  256. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/parsing/tests_builddeps.py +0 -0
  257. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/parsing/treesitter.py +0 -0
  258. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/planner.py +0 -0
  259. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/policy.py +0 -0
  260. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/preflight/__init__.py +0 -0
  261. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/preflight/defaults/cli.yaml +0 -0
  262. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/preflight/defaults/generic.yaml +0 -0
  263. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/preflight/defaults/iot.yaml +0 -0
  264. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/preflight/defaults/mobile.yaml +0 -0
  265. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/preflight/defaults/web.yaml +0 -0
  266. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/project_types.py +0 -0
  267. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/propagate.py +0 -0
  268. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/propagation_common.py +0 -0
  269. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/propagator.py +0 -0
  270. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/reconciliation_ledger.py +0 -0
  271. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/reference_resolution.py +0 -0
  272. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/registry.py +0 -0
  273. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/repair/__init__.py +0 -0
  274. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/repair/approval_repair.py +0 -0
  275. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/repair/auto_scope_guard.py +0 -0
  276. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/repair/engine.py +0 -0
  277. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/repair/git_patcher.py +0 -0
  278. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/repair/history.py +0 -0
  279. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/repair/llm_repair_engine.py +0 -0
  280. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/repair/loop.py +0 -0
  281. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/repair/primary_picker.py +0 -0
  282. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/repair/proof_breaks.py +0 -0
  283. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/repair/repair_result.py +0 -0
  284. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/repair/repairability_classifier.py +0 -0
  285. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/repair/schema.py +0 -0
  286. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/repair/templates/analyze_meta.md +0 -0
  287. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/repair/templates/propose_meta.md +0 -0
  288. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
  289. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/repair/templates/repairability_meta.md +0 -0
  290. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/repair/test_failure_attribution.py +0 -0
  291. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/repair/verify_runner.py +0 -0
  292. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/require.py +0 -0
  293. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/require_plugins.py +0 -0
  294. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/require_propagate.py +0 -0
  295. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
  296. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
  297. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
  298. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
  299. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/required_artifacts/defaults/web.yaml +0 -0
  300. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/required_artifacts_deriver.py +0 -0
  301. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
  302. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
  303. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
  304. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
  305. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
  306. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/requirement_completeness_auditor.py +0 -0
  307. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/requirement_reconciliation.py +0 -0
  308. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/requirements_meta.py +0 -0
  309. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/restoration_report.py +0 -0
  310. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/restore.py +0 -0
  311. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/routes_extractor.py +0 -0
  312. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/runtime_smoke/__init__.py +0 -0
  313. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/runtime_smoke/checks.py +0 -0
  314. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/runtime_smoke/config.py +0 -0
  315. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/runtime_smoke/report.py +0 -0
  316. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/runtime_smoke/runner.py +0 -0
  317. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/schema_refs.py +0 -0
  318. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/screen_flow_validator.py +0 -0
  319. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/screen_transition_extractor.py +0 -0
  320. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/screen_transitions/defaults.yaml +0 -0
  321. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/skills_cli/__init__.py +0 -0
  322. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/skills_cli/discovery.py +0 -0
  323. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/skills_cli/manager.py +0 -0
  324. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/skills_cli/paths.py +0 -0
  325. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/stack/__init__.py +0 -0
  326. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/stack/adapters/__init__.py +0 -0
  327. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/stack/adapters/_base.py +0 -0
  328. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/stack/adapters/nextjs.py +0 -0
  329. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/stack/adapters/playwright.py +0 -0
  330. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/stack/compose.py +0 -0
  331. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/stack/loader.py +0 -0
  332. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/stack/lock.py +0 -0
  333. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/stack/obligations.py +0 -0
  334. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/stack/profile.py +0 -0
  335. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/stack/profiles/addons/playwright.yaml +0 -0
  336. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/stack/profiles/addons/prisma.yaml +0 -0
  337. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/stack/profiles/frameworks/nextjs.yaml +0 -0
  338. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/stack/project.py +0 -0
  339. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/stack/registry.py +0 -0
  340. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/stack/resolve.py +0 -0
  341. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/surface_reconciliation.py +0 -0
  342. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/synth.py +0 -0
  343. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/templates/codd.yaml.tmpl +0 -0
  344. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/templates/conventions.yaml.tmpl +0 -0
  345. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
  346. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/templates/doc_links.yaml.tmpl +0 -0
  347. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
  348. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
  349. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
  350. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
  351. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
  352. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/templates/extracted/system-context.md.j2 +0 -0
  353. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/templates/gitignore.tmpl +0 -0
  354. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/templates/lexicon_questions.md +0 -0
  355. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/templates/lexicon_schema.yaml +0 -0
  356. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/templates/overrides.yaml.tmpl +0 -0
  357. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/test_detection.py +0 -0
  358. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/test_import_coherence.py +0 -0
  359. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/traceability.py +0 -0
  360. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/validator.py +0 -0
  361. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/vb_rerun_scope.py +0 -0
  362. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/verifiable_behavior_audit.py +0 -0
  363. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/watch/__init__.py +0 -0
  364. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/watch/events.py +0 -0
  365. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/watch/propagation_log.py +0 -0
  366. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/watch/propagation_pipeline.py +0 -0
  367. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/watch/test_runner.py +0 -0
  368. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/watch/watcher.py +0 -0
  369. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd/wiring.py +0 -0
  370. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
  371. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
  372. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
  373. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
  374. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
  375. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
  376. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
  377. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
  378. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
  379. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
  380. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
  381. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
  382. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
  383. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
  384. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
  385. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
  386. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
  387. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
  388. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
  389. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
  390. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
  391. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
  392. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
  393. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
  394. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
  395. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
  396. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
  397. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
  398. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
  399. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
  400. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
  401. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
  402. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
  403. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
  404. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
  405. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
  406. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
  407. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
  408. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
  409. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
  410. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
  411. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
  412. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
  413. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
  414. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
  415. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
  416. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
  417. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
  418. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
  419. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
  420. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
  421. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
  422. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
  423. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
  424. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
  425. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
  426. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
  427. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
  428. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
  429. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
  430. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
  431. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
  432. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
  433. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
  434. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
  435. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
  436. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
  437. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
  438. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
  439. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
  440. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
  441. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
  442. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
  443. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
  444. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
  445. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
  446. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
  447. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
  448. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
  449. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
  450. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
  451. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
  452. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
  453. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
  454. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
  455. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
  456. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
  457. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
  458. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
  459. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
  460. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
  461. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
  462. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
  463. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
  464. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
  465. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
  466. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
  467. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
  468. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
  469. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
  470. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
  471. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
  472. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
  473. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
  474. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
  475. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
  476. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
  477. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
  478. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
  479. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
  480. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
  481. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
  482. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
  483. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
  484. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
  485. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
  486. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
  487. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
  488. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
  489. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
  490. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
  491. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
  492. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
  493. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
  494. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
  495. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
  496. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
  497. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
  498. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
  499. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
  500. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
  501. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
  502. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
  503. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
  504. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
  505. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
  506. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
  507. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
  508. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
  509. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
  510. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
  511. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
  512. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
  513. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
  514. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
  515. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
  516. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
  517. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
  518. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
  519. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
  520. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
  521. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
  522. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
  523. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
  524. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
  525. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
  526. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
  527. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
  528. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
  529. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
  530. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
  531. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
  532. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
  533. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
  534. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
  535. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
  536. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
  537. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
  538. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
  539. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
  540. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
  541. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
  542. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
  543. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
  544. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
  545. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
  546. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
  547. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
  548. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
  549. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
  550. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
  551. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
  552. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
  553. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
  554. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
  555. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
  556. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
  557. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
  558. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
  559. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
  560. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
  561. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
  562. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
  563. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
  564. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
  565. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
  566. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
  567. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
  568. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
  569. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
  570. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
  571. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
  572. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
  573. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
  574. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
  575. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
  576. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
  577. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
  578. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
  579. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
  580. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
  581. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
  582. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
  583. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
  584. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
  585. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
  586. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
  587. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
  588. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
  589. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
  590. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
  591. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
  592. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
  593. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
  594. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
  595. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
  596. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
  597. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
  598. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
  599. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
  600. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
  601. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
  602. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
  603. {codd_dev-2.86.0 → codd_dev-2.88.0}/codd_plugins/stack_map.yaml +0 -0
  604. {codd_dev-2.86.0 → codd_dev-2.88.0}/docs/cookbook/cdp_browser/README.md +0 -0
  605. {codd_dev-2.86.0 → codd_dev-2.88.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
  606. {codd_dev-2.86.0 → codd_dev-2.88.0}/docs/requirements/README.md +0 -0
  607. {codd_dev-2.86.0 → codd_dev-2.88.0}/dogfood/README.md +0 -0
  608. {codd_dev-2.86.0 → codd_dev-2.88.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
  609. {codd_dev-2.86.0 → codd_dev-2.88.0}/examples/README.md +0 -0
  610. {codd_dev-2.86.0 → codd_dev-2.88.0}/skills/codd-assemble/SKILL.md +0 -0
  611. {codd_dev-2.86.0 → codd_dev-2.88.0}/skills/codd-evolve/SKILL.md +0 -0
  612. {codd_dev-2.86.0 → codd_dev-2.88.0}/skills/codd-generate/SKILL.md +0 -0
  613. {codd_dev-2.86.0 → codd_dev-2.88.0}/skills/codd-greenfield/SKILL.md +0 -0
  614. {codd_dev-2.86.0 → codd_dev-2.88.0}/skills/codd-impact/SKILL.md +0 -0
  615. {codd_dev-2.86.0 → codd_dev-2.88.0}/skills/codd-init/SKILL.md +0 -0
  616. {codd_dev-2.86.0 → codd_dev-2.88.0}/skills/codd-propagate/SKILL.md +0 -0
  617. {codd_dev-2.86.0 → codd_dev-2.88.0}/skills/codd-restore/SKILL.md +0 -0
  618. {codd_dev-2.86.0 → codd_dev-2.88.0}/skills/codd-scan/SKILL.md +0 -0
  619. {codd_dev-2.86.0 → codd_dev-2.88.0}/skills/codd-validate/SKILL.md +0 -0
  620. {codd_dev-2.86.0 → codd_dev-2.88.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.88.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.88.0"
@@ -40,6 +40,7 @@ from collections.abc import Mapping
40
40
  from dataclasses import dataclass
41
41
  from typing import Any, Literal
42
42
 
43
+ from codd.parsing.regex_strategies import language_extensions
43
44
  from codd.project_types import ProjectCapabilities
44
45
 
45
46
 
@@ -234,7 +235,11 @@ def resolve_e2e_harness(
234
235
  """
235
236
 
236
237
  lang = (project_language or "").strip().lower()
237
- is_python = lang == "python"
238
+ # "host language is Python" is driven from the language's declared source
239
+ # extensions (registry DATA: ``regex_strategies.language_extensions`` is
240
+ # canonical-keyed — it does NOT resolve aliases — so this is byte-identical
241
+ # to the former ``lang == "python"``), not a language-name branch in core.
242
+ is_python = ".py" in language_extensions(lang)
238
243
  modality = capabilities.e2e_modality
239
244
 
240
245
  if modality == "cli":
@@ -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():
@@ -747,7 +747,10 @@ def _confusable_code_error(relative_path: str, content: str, *, language: str) -
747
747
  deterministic, no LLM calls.
748
748
  """
749
749
  suffix = PurePosixPath(relative_path).suffix.lower()
750
- is_python = suffix == ".py" or (suffix == "" and language == "python")
750
+ # "is this a Python payload" is driven from the language's declared
751
+ # extensions (DATA), not a ``language == "python"`` branch: a .py suffix, or
752
+ # an extensionless payload whose language declares .py as a source extension.
753
+ is_python = suffix == ".py" or (suffix == "" and ".py" in _implementation_language_extensions(language))
751
754
  if not is_python:
752
755
  return None
753
756
  findings = _confusable_findings(content)
@@ -1754,7 +1757,7 @@ def _candidate_generated_paths(spec: ImplementSpec, language: Any, design_conten
1754
1757
  candidates.append(PurePosixPath(output_path) / f"index{default_extension}")
1755
1758
 
1756
1759
  normalized_language = _normalize_implementation_language(language)
1757
- if normalized_language in {"typescript", "javascript"} and _spec_looks_ui_facing(spec, design_content):
1760
+ if _ui_variant_extension(normalized_language) is not None and _spec_looks_ui_facing(spec, design_content):
1758
1761
  extensions = _implementation_language_extensions(normalized_language)
1759
1762
  if len(extensions) > 1:
1760
1763
  for output_path in spec.output_paths:
@@ -1883,7 +1886,7 @@ def _build_implementation_prompt(
1883
1886
  else:
1884
1887
  framework_guidance = f"- Use idiomatic {language_name} patterns for the target project."
1885
1888
 
1886
- if language in {"typescript", "javascript"} and len(preferred_extensions) > 1:
1889
+ if _ui_variant_extension(language) is not None and len(preferred_extensions) > 1:
1887
1890
  jsx_extension = preferred_extensions[1]
1888
1891
  extension_guidance = (
1889
1892
  f"- If the work needs JSX-style UI components, emit {jsx_extension} files. "
@@ -2581,10 +2584,41 @@ def _implementation_language_extensions(language: Any) -> tuple[str, ...]:
2581
2584
  return LANGUAGE_EXT_MAP.get(normalized, LANGUAGE_EXT_MAP["typescript"])
2582
2585
 
2583
2586
 
2587
+ #: Registry DATA (Contract Kernel Cut Condition A — implementer.py): the SECOND
2588
+ #: extension some language families carry is a JSX/UI-COMPONENT variant
2589
+ #: (TypeScript's ``.tsx``, JavaScript's ``.jsx``) rather than just "another file
2590
+ #: type" (e.g. C++'s ``.cc``/``.h``). Only a family whose alt extension is a UI
2591
+ #: variant should route UI-facing work to ``extensions[1]``. This is a
2592
+ #: language→capability DATA table (the analogue of a profile/registry entry — a
2593
+ #: declared capability, NOT a core ``language in (...)`` branch); core code asks
2594
+ #: ``_ui_variant_extension(language) is not None`` (a capability flag), never a
2595
+ #: language name. Byte-identical to the former ``in {"typescript","javascript"}``
2596
+ #: guards: those two families are exactly the ones whose ``extensions[1]`` is the
2597
+ #: UI/JSX variant.
2598
+ _UI_VARIANT_EXTENSION_BY_LANGUAGE: dict[str, str] = {
2599
+ "typescript": ".tsx",
2600
+ "javascript": ".jsx",
2601
+ }
2602
+
2603
+
2604
+ def _ui_variant_extension(language: Any) -> str | None:
2605
+ """The language's JSX/UI-component variant extension, or ``None`` (data lookup).
2606
+
2607
+ A capability flag in DATA form: a language family declares whether it has a
2608
+ dedicated UI-component extension (``.tsx``/``.jsx``). ``None`` means the
2609
+ family has no UI variant (its ``extensions[1]``, if any, is just another file
2610
+ type), so UI-facing routing must NOT use the alternate extension. Replaces
2611
+ the former ``language in {"typescript","javascript"}`` dispatch.
2612
+ """
2613
+ normalized = _normalize_implementation_language(language)
2614
+ return _UI_VARIANT_EXTENSION_BY_LANGUAGE.get(normalized)
2615
+
2616
+
2584
2617
  def _default_generated_extension(language: Any, content: str | None = None) -> str:
2585
2618
  normalized = _normalize_implementation_language(language)
2586
2619
  extensions = _implementation_language_extensions(normalized)
2587
- if normalized in {"typescript", "javascript"} and len(extensions) > 1 and content and _looks_like_tsx(content):
2620
+ ui_variant = _ui_variant_extension(normalized)
2621
+ if ui_variant is not None and len(extensions) > 1 and content and _looks_like_tsx(content):
2588
2622
  return extensions[1]
2589
2623
  return extensions[0]
2590
2624
 
@@ -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)