codd-dev 3.7.2__tar.gz → 3.7.3__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 (637) hide show
  1. {codd_dev-3.7.2 → codd_dev-3.7.3}/PKG-INFO +1 -1
  2. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/__init__.py +1 -1
  3. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/builder.py +198 -13
  4. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/extractor.py +21 -0
  5. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/parsing/regex_strategies.py +125 -4
  6. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/parsing/treesitter.py +230 -1
  7. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/synth.py +17 -1
  8. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/templates/extracted/api-contract.md.j2 +2 -2
  9. {codd_dev-3.7.2 → codd_dev-3.7.3}/pyproject.toml +1 -1
  10. {codd_dev-3.7.2 → codd_dev-3.7.3}/.gitignore +0 -0
  11. {codd_dev-3.7.2 → codd_dev-3.7.3}/LICENSE +0 -0
  12. {codd_dev-3.7.2 → codd_dev-3.7.3}/README.md +0 -0
  13. {codd_dev-3.7.2 → codd_dev-3.7.3}/bench_fixture/README.md +0 -0
  14. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/__main__.py +0 -0
  15. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/_git_helper.py +0 -0
  16. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/action_outcome.py +0 -0
  17. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/ai_invoke.py +0 -0
  18. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/ai_patch.py +0 -0
  19. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/artifact_contract.py +0 -0
  20. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/artifact_ids.py +0 -0
  21. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/artifacts/catalog.yaml +0 -0
  22. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/ask_user_question_adapter.py +0 -0
  23. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/assembler.py +0 -0
  24. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/bridge.py +0 -0
  25. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/brownfield/__init__.py +0 -0
  26. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/brownfield/pipeline.py +0 -0
  27. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/capability_completeness.py +0 -0
  28. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/claude_cli.py +0 -0
  29. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/cli.py +0 -0
  30. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/clustering.py +0 -0
  31. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/coherence_adapters.py +0 -0
  32. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/coherence_engine.py +0 -0
  33. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/confidence.py +0 -0
  34. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/config.py +0 -0
  35. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/config_schema.py +0 -0
  36. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/contracts.py +0 -0
  37. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/contracts_registry/__init__.py +0 -0
  38. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/contracts_registry/__main__.py +0 -0
  39. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/contracts_registry/certify.py +0 -0
  40. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/contracts_registry/generate_matrix.py +0 -0
  41. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/contracts_registry/registry.py +0 -0
  42. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/coverage_auditor.py +0 -0
  43. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/coverage_execution_coherence.py +0 -0
  44. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/coverage_metrics.py +0 -0
  45. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/__init__.py +0 -0
  46. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/auto_repair.py +0 -0
  47. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/checks/__init__.py +0 -0
  48. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/checks/_one_to_many_detection.py +0 -0
  49. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/checks/artifact_contract_check.py +0 -0
  50. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/checks/cardinality_coverage.py +0 -0
  51. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/checks/ci_health.py +0 -0
  52. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/checks/dependency_freshness.py +0 -0
  53. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/checks/depends_on_consistency.py +0 -0
  54. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/checks/deployment_completeness.py +0 -0
  55. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/checks/edge_validity.py +0 -0
  56. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/checks/environment_coverage.py +0 -0
  57. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/checks/extraction_diagnostics.py +0 -0
  58. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/checks/implementation_coverage.py +0 -0
  59. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/checks/negative_space.py +0 -0
  60. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/checks/node_completeness.py +0 -0
  61. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/checks/opt_out.py +0 -0
  62. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/checks/resource_flow_coherence.py +0 -0
  63. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/checks/semantic_contract_conflict.py +0 -0
  64. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/checks/stale_evidence.py +0 -0
  65. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/checks/task_completion.py +0 -0
  66. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/checks/transitive_closure.py +0 -0
  67. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/checks/ui_coherence.py +0 -0
  68. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/checks/user_journey_coherence.py +0 -0
  69. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/coverage_axes.py +0 -0
  70. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/defaults/cli.yaml +0 -0
  71. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/defaults/cpp_embedded.yaml +0 -0
  72. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/defaults/csharp.yaml +0 -0
  73. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/defaults/elixir.yaml +0 -0
  74. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/defaults/generic.yaml +0 -0
  75. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/defaults/iot.yaml +0 -0
  76. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/defaults/java.yaml +0 -0
  77. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/defaults/kotlin.yaml +0 -0
  78. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/defaults/mobile.yaml +0 -0
  79. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/defaults/ruby.yaml +0 -0
  80. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/defaults/rust.yaml +0 -0
  81. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/defaults/scala.yaml +0 -0
  82. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/defaults/swift.yaml +0 -0
  83. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/defaults/test_frameworks.yaml +0 -0
  84. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/defaults/web.yaml +0 -0
  85. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/extractor.py +0 -0
  86. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/impact.py +0 -0
  87. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/materiality.py +0 -0
  88. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/metadata_access.py +0 -0
  89. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/result_status.py +0 -0
  90. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dag/runner.py +0 -0
  91. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/defaults.py +0 -0
  92. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/defaults.yaml +0 -0
  93. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/dependency_lock_coherence.py +0 -0
  94. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deploy_targets/__init__.py +0 -0
  95. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deploy_targets/app_service.py +0 -0
  96. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deploy_targets/base.py +0 -0
  97. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deploy_targets/docker_compose.py +0 -0
  98. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deployer.py +0 -0
  99. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deployment/__init__.py +0 -0
  100. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deployment/checks/__init__.py +0 -0
  101. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deployment/defaults/deploy_targets.yaml +0 -0
  102. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
  103. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deployment/defaults/schema_providers.yaml +0 -0
  104. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deployment/defaults/verification_templates.yaml +0 -0
  105. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deployment/extractor.py +0 -0
  106. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deployment/providers/__init__.py +0 -0
  107. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deployment/providers/ai_command.py +0 -0
  108. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deployment/providers/ai_command_factory.py +0 -0
  109. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deployment/providers/codex_app_server.py +0 -0
  110. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deployment/providers/llm_consideration.py +0 -0
  111. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deployment/providers/schema/__init__.py +0 -0
  112. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deployment/providers/schema/prisma.py +0 -0
  113. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deployment/providers/target/__init__.py +0 -0
  114. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deployment/providers/target/docker_compose.py +0 -0
  115. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deployment/providers/verification/__init__.py +0 -0
  116. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
  117. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deployment/providers/verification/cdp_browser.py +0 -0
  118. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deployment/providers/verification/cdp_engines.py +0 -0
  119. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
  120. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deployment/providers/verification/cdp_wire.py +0 -0
  121. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deployment/providers/verification/curl.py +0 -0
  122. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deployment/providers/verification/form_strategies.py +0 -0
  123. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deployment/providers/verification/means_catalog.py +0 -0
  124. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deployment/providers/verification/playwright.py +0 -0
  125. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deployment/providers/verification/pytest_http.py +0 -0
  126. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/deployment/providers/verification/vitest.py +0 -0
  127. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/design_md.py +0 -0
  128. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/diff/__init__.py +0 -0
  129. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/diff/apply.py +0 -0
  130. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/diff/engine.py +0 -0
  131. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/diff/persistence.py +0 -0
  132. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/diff/templates/diff_prompt.md +0 -0
  133. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/discovery.py +0 -0
  134. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/drift.py +0 -0
  135. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/e2e_contract_coherence.py +0 -0
  136. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/e2e_extractor.py +0 -0
  137. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/e2e_generator.py +0 -0
  138. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/e2e_harness.py +0 -0
  139. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/e2e_runner.py +0 -0
  140. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/elicit/__init__.py +0 -0
  141. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/elicit/apply.py +0 -0
  142. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/elicit/engine.py +0 -0
  143. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/elicit/finding.py +0 -0
  144. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/elicit/formatters/__init__.py +0 -0
  145. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/elicit/formatters/base.py +0 -0
  146. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/elicit/formatters/interactive.py +0 -0
  147. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/elicit/formatters/json_fmt.py +0 -0
  148. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/elicit/formatters/md.py +0 -0
  149. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/elicit/gap_to_ask.py +0 -0
  150. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/elicit/lexicon_loader.py +0 -0
  151. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/elicit/persistence.py +0 -0
  152. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/elicit/promote.py +0 -0
  153. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/elicit/routing.py +0 -0
  154. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
  155. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/env_refs.py +0 -0
  156. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/extract_ai.py +0 -0
  157. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/extract_paths.py +0 -0
  158. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/fix/__init__.py +0 -0
  159. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/fix/candidate_selector.py +0 -0
  160. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/fix/design_updater.py +0 -0
  161. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/fix/impact_planner.py +0 -0
  162. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/fix/impl_propagation.py +0 -0
  163. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/fix/interactive_prompt.py +0 -0
  164. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/fix/phenomenon_fixer.py +0 -0
  165. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/fix/phenomenon_parser.py +0 -0
  166. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/fix/risk_classifier.py +0 -0
  167. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/fix/templates/clarification_question.txt +0 -0
  168. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/fix/templates/design_update.txt +0 -0
  169. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/fix/templates/impl_update.txt +0 -0
  170. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/fix/templates/phenomenon_parse.txt +0 -0
  171. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/fix/templates/risk_assessment.txt +0 -0
  172. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/fix/templates_loader.py +0 -0
  173. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/fixer.py +0 -0
  174. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/fixup_drift.py +0 -0
  175. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/fixup_drift_strategies/__init__.py +0 -0
  176. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
  177. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
  178. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/fixup_drift_strategies/url_drift.py +0 -0
  179. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/frontmatter.py +0 -0
  180. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/generator.py +0 -0
  181. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/git_evidence.py +0 -0
  182. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/graph.py +0 -0
  183. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/greenfield/__init__.py +0 -0
  184. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/greenfield/pipeline.py +0 -0
  185. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/hitl_session.py +0 -0
  186. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/hooks/__init__.py +0 -0
  187. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/hooks/pre-commit +0 -0
  188. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
  189. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/hooks/recipes/claude_settings_example.json +0 -0
  190. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/hooks/recipes/codex_hook.sh +0 -0
  191. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/hooks/recipes/git_post_commit.sh +0 -0
  192. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/hooks/recipes/git_pre_commit.sh +0 -0
  193. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/iac_nfr.py +0 -0
  194. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/implement_oracle.py +0 -0
  195. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/implement_oracle_scope.py +0 -0
  196. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/implement_oracle_types.py +0 -0
  197. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/implementer/__init__.py +0 -0
  198. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/implementer/chunked_runner.py +0 -0
  199. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/implementer/typecheck_loop.py +0 -0
  200. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/implementer.py +0 -0
  201. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/import_coherence.py +0 -0
  202. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/inheritance.py +0 -0
  203. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/init/__init__.py +0 -0
  204. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/init/lexicon_suggest.py +0 -0
  205. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/init/llm_lexicon_suggester.py +0 -0
  206. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/init/stack_detector.py +0 -0
  207. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/knowledge_fetcher.py +0 -0
  208. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/languages/__init__.py +0 -0
  209. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/languages/adapters/__init__.py +0 -0
  210. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/languages/adapters/implement_oracle.py +0 -0
  211. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/languages/adapters/oracle_go.py +0 -0
  212. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/languages/adapters/oracle_python.py +0 -0
  213. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/languages/adapters/oracle_typescript.py +0 -0
  214. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/languages/adapters/runner_report.py +0 -0
  215. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/languages/builtin_adapters.py +0 -0
  216. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/languages/compat.py +0 -0
  217. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/languages/contract.py +0 -0
  218. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/languages/loader.py +0 -0
  219. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/languages/oracle_executor.py +0 -0
  220. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/languages/path_planner.py +0 -0
  221. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/languages/profile.py +0 -0
  222. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/languages/profiles/go.yaml +0 -0
  223. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/languages/profiles/python.yaml +0 -0
  224. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/languages/profiles/typescript.yaml +0 -0
  225. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/languages/registry.py +0 -0
  226. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/languages/verify_executor.py +0 -0
  227. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/languages/verify_plan.py +0 -0
  228. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/lexicon.py +0 -0
  229. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/lexicon_cli/__init__.py +0 -0
  230. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/lexicon_cli/formatters/__init__.py +0 -0
  231. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/lexicon_cli/formatters/html.py +0 -0
  232. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
  233. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/lexicon_cli/formatters/md.py +0 -0
  234. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/lexicon_cli/inspector.py +0 -0
  235. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/lexicon_cli/manager.py +0 -0
  236. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/lexicon_cli/reporter.py +0 -0
  237. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/lexicon_cli/threshold.py +0 -0
  238. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/llm/__init__.py +0 -0
  239. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/llm/approval.py +0 -0
  240. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/llm/best_practice_augmenter.py +0 -0
  241. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/llm/criteria_expander.py +0 -0
  242. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/llm/design_doc_extractor.py +0 -0
  243. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/llm/impl_step_deriver.py +0 -0
  244. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/llm/means_catalog_loader.py +0 -0
  245. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/llm/parser.py +0 -0
  246. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/llm/plan_deriver.py +0 -0
  247. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/llm/prompt_builder.py +0 -0
  248. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/llm/strategy_validator.py +0 -0
  249. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/llm/templates/best_practice_augment_meta.md +0 -0
  250. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/llm/templates/criteria_expand_meta.md +0 -0
  251. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/llm/templates/design_doc_extract_meta.md +0 -0
  252. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/llm/templates/impl_step_derive_meta.md +0 -0
  253. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
  254. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/llm/templates/meta_instruction.md +0 -0
  255. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/llm/templates/plan_derive_meta.md +0 -0
  256. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/llm/templates/verification_means_catalog.yaml +0 -0
  257. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/mcp_server.py +0 -0
  258. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/measure.py +0 -0
  259. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/operational_e2e_audit.py +0 -0
  260. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/operations_derive.py +0 -0
  261. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/parsing/__init__.py +0 -0
  262. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/parsing/_shared.py +0 -0
  263. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/parsing/api_specs.py +0 -0
  264. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/parsing/extractor_registry.py +0 -0
  265. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/parsing/filesystem_routes.py +0 -0
  266. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/parsing/iac.py +0 -0
  267. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/parsing/python_ast.py +0 -0
  268. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/parsing/schemas.py +0 -0
  269. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/parsing/tests_builddeps.py +0 -0
  270. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/path_safety.py +0 -0
  271. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/planner.py +0 -0
  272. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/policy.py +0 -0
  273. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/preflight/__init__.py +0 -0
  274. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/preflight/defaults/cli.yaml +0 -0
  275. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/preflight/defaults/generic.yaml +0 -0
  276. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/preflight/defaults/iot.yaml +0 -0
  277. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/preflight/defaults/mobile.yaml +0 -0
  278. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/preflight/defaults/web.yaml +0 -0
  279. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/project_types.py +0 -0
  280. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/propagate.py +0 -0
  281. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/propagation_common.py +0 -0
  282. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/propagator.py +0 -0
  283. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/reconciliation_ledger.py +0 -0
  284. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/reference_resolution.py +0 -0
  285. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/registry.py +0 -0
  286. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/repair/__init__.py +0 -0
  287. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/repair/approval_repair.py +0 -0
  288. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/repair/auto_scope_guard.py +0 -0
  289. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/repair/engine.py +0 -0
  290. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/repair/git_patcher.py +0 -0
  291. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/repair/history.py +0 -0
  292. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/repair/llm_repair_engine.py +0 -0
  293. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/repair/loop.py +0 -0
  294. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/repair/primary_picker.py +0 -0
  295. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/repair/proof_breaks.py +0 -0
  296. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/repair/repair_result.py +0 -0
  297. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/repair/repairability_classifier.py +0 -0
  298. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/repair/schema.py +0 -0
  299. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/repair/templates/analyze_meta.md +0 -0
  300. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/repair/templates/propose_meta.md +0 -0
  301. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/repair/templates/repair_strategy_meta.md +0 -0
  302. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/repair/templates/repairability_meta.md +0 -0
  303. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/repair/test_failure_attribution.py +0 -0
  304. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/repair/verify_runner.py +0 -0
  305. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/repair_slice.py +0 -0
  306. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/require.py +0 -0
  307. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/require_plugins.py +0 -0
  308. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/require_propagate.py +0 -0
  309. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/required_artifacts/defaults/cli.yaml +0 -0
  310. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/required_artifacts/defaults/generic.yaml +0 -0
  311. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/required_artifacts/defaults/iot.yaml +0 -0
  312. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/required_artifacts/defaults/mobile.yaml +0 -0
  313. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/required_artifacts/defaults/web.yaml +0 -0
  314. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/required_artifacts_deriver.py +0 -0
  315. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/requirement_completeness/defaults/cli.yaml +0 -0
  316. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/requirement_completeness/defaults/generic.yaml +0 -0
  317. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/requirement_completeness/defaults/iot.yaml +0 -0
  318. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
  319. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/requirement_completeness/defaults/web.yaml +0 -0
  320. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/requirement_completeness_auditor.py +0 -0
  321. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/requirement_reconciliation.py +0 -0
  322. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/requirements_meta.py +0 -0
  323. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/restoration_report.py +0 -0
  324. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/restore.py +0 -0
  325. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/routes_extractor.py +0 -0
  326. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/runtime_smoke/__init__.py +0 -0
  327. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/runtime_smoke/checks.py +0 -0
  328. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/runtime_smoke/config.py +0 -0
  329. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/runtime_smoke/report.py +0 -0
  330. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/runtime_smoke/runner.py +0 -0
  331. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/scanner.py +0 -0
  332. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/schema_refs.py +0 -0
  333. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/screen_flow_validator.py +0 -0
  334. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/screen_transition_extractor.py +0 -0
  335. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/screen_transitions/defaults.yaml +0 -0
  336. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/skills_cli/__init__.py +0 -0
  337. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/skills_cli/discovery.py +0 -0
  338. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/skills_cli/manager.py +0 -0
  339. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/skills_cli/paths.py +0 -0
  340. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/stack/__init__.py +0 -0
  341. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/stack/adapters/__init__.py +0 -0
  342. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/stack/adapters/_base.py +0 -0
  343. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/stack/adapters/nextjs.py +0 -0
  344. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/stack/adapters/playwright.py +0 -0
  345. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/stack/adapters/prisma.py +0 -0
  346. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/stack/command_authenticity.py +0 -0
  347. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/stack/command_override.py +0 -0
  348. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/stack/command_plan.py +0 -0
  349. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/stack/compose.py +0 -0
  350. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/stack/loader.py +0 -0
  351. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/stack/lock.py +0 -0
  352. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/stack/obligations.py +0 -0
  353. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/stack/profile.py +0 -0
  354. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/stack/profiles/addons/playwright.yaml +0 -0
  355. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/stack/profiles/addons/prisma.yaml +0 -0
  356. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/stack/profiles/frameworks/nextjs.yaml +0 -0
  357. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/stack/project.py +0 -0
  358. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/stack/registry.py +0 -0
  359. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/stack/replacement_proof.py +0 -0
  360. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/stack/resolve.py +0 -0
  361. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/surface_reconciliation.py +0 -0
  362. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/templates/codd.yaml.tmpl +0 -0
  363. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/templates/conventions.yaml.tmpl +0 -0
  364. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/templates/data_dependencies.yaml.tmpl +0 -0
  365. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/templates/doc_links.yaml.tmpl +0 -0
  366. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/templates/extract_ai_prompt_baseline.md +0 -0
  367. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
  368. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/templates/extracted/module-detail.md.j2 +0 -0
  369. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/templates/extracted/schema-design.md.j2 +0 -0
  370. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/templates/extracted/system-context.md.j2 +0 -0
  371. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/templates/gitignore.tmpl +0 -0
  372. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/templates/lexicon_questions.md +0 -0
  373. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/templates/lexicon_schema.yaml +0 -0
  374. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/templates/overrides.yaml.tmpl +0 -0
  375. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/test_detection.py +0 -0
  376. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/test_import_coherence.py +0 -0
  377. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/traceability.py +0 -0
  378. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/validator.py +0 -0
  379. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/vb_marker_authenticity.py +0 -0
  380. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/vb_rerun_scope.py +0 -0
  381. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/verifiable_behavior_audit.py +0 -0
  382. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/watch/__init__.py +0 -0
  383. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/watch/events.py +0 -0
  384. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/watch/propagation_log.py +0 -0
  385. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/watch/propagation_pipeline.py +0 -0
  386. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/watch/test_runner.py +0 -0
  387. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/watch/watcher.py +0 -0
  388. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd/wiring.py +0 -0
  389. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
  390. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
  391. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
  392. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
  393. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
  394. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
  395. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
  396. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
  397. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
  398. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
  399. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
  400. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
  401. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
  402. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
  403. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
  404. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
  405. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
  406. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
  407. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
  408. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
  409. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
  410. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
  411. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
  412. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
  413. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
  414. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
  415. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
  416. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
  417. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
  418. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
  419. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
  420. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
  421. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
  422. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
  423. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
  424. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
  425. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
  426. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
  427. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
  428. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
  429. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
  430. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
  431. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
  432. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
  433. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
  434. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
  435. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
  436. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
  437. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
  438. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
  439. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
  440. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
  441. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
  442. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
  443. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
  444. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
  445. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
  446. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
  447. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
  448. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
  449. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
  450. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
  451. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
  452. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
  453. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
  454. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
  455. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
  456. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
  457. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
  458. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
  459. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
  460. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
  461. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
  462. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
  463. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
  464. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
  465. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
  466. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
  467. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
  468. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
  469. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
  470. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
  471. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
  472. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
  473. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
  474. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
  475. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
  476. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
  477. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
  478. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
  479. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
  480. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
  481. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
  482. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
  483. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
  484. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
  485. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
  486. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
  487. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
  488. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
  489. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
  490. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
  491. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
  492. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
  493. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
  494. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
  495. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
  496. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
  497. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
  498. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
  499. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
  500. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
  501. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
  502. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
  503. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
  504. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
  505. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
  506. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
  507. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
  508. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
  509. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
  510. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
  511. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
  512. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
  513. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
  514. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
  515. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
  516. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
  517. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
  518. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
  519. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
  520. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
  521. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
  522. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
  523. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
  524. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
  525. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
  526. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
  527. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
  528. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
  529. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
  530. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
  531. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
  532. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
  533. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
  534. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
  535. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
  536. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
  537. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
  538. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
  539. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
  540. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
  541. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
  542. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
  543. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
  544. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
  545. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
  546. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
  547. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
  548. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
  549. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
  550. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
  551. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
  552. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
  553. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
  554. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
  555. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
  556. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
  557. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
  558. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
  559. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
  560. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
  561. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
  562. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
  563. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
  564. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
  565. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
  566. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
  567. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
  568. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
  569. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
  570. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
  571. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
  572. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
  573. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
  574. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
  575. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
  576. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
  577. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
  578. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
  579. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
  580. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
  581. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
  582. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
  583. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
  584. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
  585. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
  586. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
  587. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
  588. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
  589. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
  590. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
  591. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
  592. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
  593. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
  594. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
  595. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
  596. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
  597. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
  598. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
  599. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
  600. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
  601. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
  602. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
  603. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
  604. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
  605. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
  606. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
  607. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
  608. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
  609. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
  610. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
  611. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
  612. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
  613. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
  614. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
  615. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
  616. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
  617. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
  618. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
  619. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
  620. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
  621. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
  622. {codd_dev-3.7.2 → codd_dev-3.7.3}/codd_plugins/stack_map.yaml +0 -0
  623. {codd_dev-3.7.2 → codd_dev-3.7.3}/docs/cookbook/cdp_browser/README.md +0 -0
  624. {codd_dev-3.7.2 → codd_dev-3.7.3}/docs/cookbook/presentation_aggregation/README.md +0 -0
  625. {codd_dev-3.7.2 → codd_dev-3.7.3}/docs/requirements/README.md +0 -0
  626. {codd_dev-3.7.2 → codd_dev-3.7.3}/examples/README.md +0 -0
  627. {codd_dev-3.7.2 → codd_dev-3.7.3}/skills/codd-assemble/SKILL.md +0 -0
  628. {codd_dev-3.7.2 → codd_dev-3.7.3}/skills/codd-evolve/SKILL.md +0 -0
  629. {codd_dev-3.7.2 → codd_dev-3.7.3}/skills/codd-generate/SKILL.md +0 -0
  630. {codd_dev-3.7.2 → codd_dev-3.7.3}/skills/codd-greenfield/SKILL.md +0 -0
  631. {codd_dev-3.7.2 → codd_dev-3.7.3}/skills/codd-impact/SKILL.md +0 -0
  632. {codd_dev-3.7.2 → codd_dev-3.7.3}/skills/codd-init/SKILL.md +0 -0
  633. {codd_dev-3.7.2 → codd_dev-3.7.3}/skills/codd-propagate/SKILL.md +0 -0
  634. {codd_dev-3.7.2 → codd_dev-3.7.3}/skills/codd-restore/SKILL.md +0 -0
  635. {codd_dev-3.7.2 → codd_dev-3.7.3}/skills/codd-scan/SKILL.md +0 -0
  636. {codd_dev-3.7.2 → codd_dev-3.7.3}/skills/codd-validate/SKILL.md +0 -0
  637. {codd_dev-3.7.2 → codd_dev-3.7.3}/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: 3.7.2
3
+ Version: 3.7.3
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__ = "3.7.2"
3
+ __version__ = "3.7.3"
@@ -10,7 +10,7 @@ import warnings
10
10
  from copy import deepcopy
11
11
  from datetime import datetime, timezone
12
12
  from pathlib import Path
13
- from typing import Any
13
+ from typing import Any, Callable
14
14
 
15
15
  import yaml
16
16
 
@@ -911,6 +911,19 @@ def _resolve_import_target(
911
911
  path_to_node: dict[Path, str],
912
912
  aliases: dict[str, list[str]],
913
913
  ) -> str | None:
914
+ # Java FQN specifiers (``com.x.Y`` / ``static com.x.Y.m`` / ``com.x.*`` /
915
+ # ``package com.x``) are dispatched by the IMPORTING file's ``.java`` suffix
916
+ # (DATA, not a ``language ==`` core branch) because their dotted shape
917
+ # otherwise collides with Python's project-rooted dotted resolution. Java
918
+ # types live under a source root (``src/main/java``), not the project root.
919
+ if file_path.suffix == ".java":
920
+ candidates = _java_import_candidates(import_ref, file_path, project_root, path_to_node)
921
+ for candidate in candidates:
922
+ resolved = _resolve_file_candidate(candidate, path_to_node)
923
+ if resolved:
924
+ return resolved
925
+ return None
926
+
914
927
  candidates: list[Path] = []
915
928
  if _is_js_relative_specifier(import_ref):
916
929
  # JS/TS relative: ``./foo`` / ``../foo`` — resolve against the file dir
@@ -981,6 +994,119 @@ def _python_relative_candidates(import_ref: str, file_path: Path) -> list[Path]:
981
994
  return [(base / Path(*remainder.split("."))).resolve()]
982
995
 
983
996
 
997
+ #: Conventional Java/JVM source-root segment chains (Maven/Gradle). A type whose
998
+ #: FQN is ``com.x.Y`` lives at ``<root>/com/x/Y.java`` under one of these roots.
999
+ _JAVA_SOURCE_ROOT_SEGMENTS = (
1000
+ ("src", "main", "java"),
1001
+ ("src", "test", "java"),
1002
+ ("src", "main", "kotlin"),
1003
+ ("src", "test", "kotlin"),
1004
+ )
1005
+
1006
+
1007
+ def _java_source_roots(project_root: Path, path_to_node: dict[Path, str]) -> list[Path]:
1008
+ """Return candidate Java source roots (deepest-first), derived from DATA.
1009
+
1010
+ Built from the actual node file-set rather than hard-coded paths: every
1011
+ ``…/src/main/java`` (etc.) prefix that some node file sits under becomes a
1012
+ root, plus the project root itself as a last resort (flat layouts / default
1013
+ package). Deeper roots are tried first so ``src/main/java`` wins over the
1014
+ project root when both could match.
1015
+ """
1016
+ roots: dict[str, Path] = {}
1017
+ for file_path in path_to_node:
1018
+ parts = file_path.parts
1019
+ for segments in _JAVA_SOURCE_ROOT_SEGMENTS:
1020
+ idx = _find_segment_chain(parts, segments)
1021
+ if idx is not None:
1022
+ root = Path(*parts[: idx + len(segments)])
1023
+ roots[str(root)] = root
1024
+ ordered = sorted(roots.values(), key=lambda path: len(path.parts), reverse=True)
1025
+ ordered.append(project_root.resolve())
1026
+ return ordered
1027
+
1028
+
1029
+ def _find_segment_chain(parts: tuple[str, ...], chain: tuple[str, ...]) -> int | None:
1030
+ """Return the start index where ``chain`` appears contiguously in ``parts``."""
1031
+ if not chain:
1032
+ return None
1033
+ for start in range(len(parts) - len(chain) + 1):
1034
+ if parts[start : start + len(chain)] == chain:
1035
+ return start
1036
+ return None
1037
+
1038
+
1039
+ def _java_import_candidates(
1040
+ import_ref: str,
1041
+ file_path: Path,
1042
+ project_root: Path,
1043
+ path_to_node: dict[Path, str],
1044
+ ) -> list[Path]:
1045
+ """Map a Java specifier to filesystem candidates under the source roots.
1046
+
1047
+ Handles the four shapes emitted by the Java specifier extractor:
1048
+
1049
+ * ``package com.x`` → the file's OWN package dir, so same-package implicit
1050
+ references (Java needs no import for siblings) yield edges to the package's
1051
+ other files (the caller skips the self-edge).
1052
+ * ``com.x.*`` (wildcard) → the package directory; the caller links to the
1053
+ in-package files found there (or skips cleanly when none are nodes).
1054
+ * ``static com.x.Y.m`` → the owning class file ``com/x/Y.java`` (member
1055
+ ``m`` stripped).
1056
+ * ``com.x.Y`` (normal) → ``com/x/Y.java``.
1057
+
1058
+ ``_resolve_file_candidate`` appends the real ``.java`` suffix once a directory
1059
+ candidate is produced, so package/wildcard dirs resolve to a sibling file.
1060
+ """
1061
+ roots = _java_source_roots(project_root, path_to_node)
1062
+
1063
+ if import_ref.startswith("package "):
1064
+ package = import_ref[len("package "):].strip()
1065
+ return _java_package_dir_candidates(package, roots)
1066
+
1067
+ if import_ref.endswith(".*"):
1068
+ package = import_ref[:-2].strip()
1069
+ return _java_package_dir_candidates(package, roots)
1070
+
1071
+ fqn = import_ref
1072
+ if fqn.startswith("static "):
1073
+ # ``static com.x.Y.member`` → owning class ``com.x.Y`` (drop the member).
1074
+ fqn = fqn[len("static "):].strip()
1075
+ parts = fqn.split(".")
1076
+ if len(parts) >= 2:
1077
+ fqn = ".".join(parts[:-1])
1078
+
1079
+ parts = [part for part in fqn.split(".") if part]
1080
+ if not parts:
1081
+ return []
1082
+ return [(root / Path(*parts)).resolve() for root in roots]
1083
+
1084
+
1085
+ def _java_package_dir_candidates(package: str, roots: list[Path]) -> list[Path]:
1086
+ parts = [part for part in package.split(".") if part]
1087
+ if not parts:
1088
+ return []
1089
+ candidates: list[Path] = []
1090
+ for root in roots:
1091
+ package_dir = (root / Path(*parts)).resolve()
1092
+ # List the package dir's in-tree files as candidates (same-package /
1093
+ # wildcard linkage). ``_resolve_file_candidate`` matches exact node paths,
1094
+ # so we hand it each existing ``.java`` file directly.
1095
+ for node_path in _sorted_java_dir_files(package_dir):
1096
+ candidates.append(node_path)
1097
+ return candidates
1098
+
1099
+
1100
+ def _sorted_java_dir_files(package_dir: Path) -> list[Path]:
1101
+ if not package_dir.is_dir():
1102
+ return []
1103
+ return sorted(
1104
+ child.resolve()
1105
+ for child in package_dir.iterdir()
1106
+ if child.is_file() and child.suffix == ".java"
1107
+ )
1108
+
1109
+
984
1110
  def _infer_test_targets(
985
1111
  test_path: Path,
986
1112
  project_root: Path,
@@ -1025,30 +1151,89 @@ def _extract_python_import_specifiers(file_path: Path) -> list[str]:
1025
1151
  return get_extractor("python", "source").extract_import_specifiers(content)
1026
1152
 
1027
1153
 
1154
+ # Regex fallback for Java ``import`` / ``package`` specifiers, used only when the
1155
+ # tree-sitter-java binding is unavailable (otherwise the registry backend's AST
1156
+ # extractor is preferred). Mirrors the SHAPES emitted by
1157
+ # ``treesitter._extract_java_import_specifiers`` (``static`` keyword + ``.*``
1158
+ # wildcard + ``package`` line preserved) so the Java resolver branch is agnostic
1159
+ # to which extractor produced the specifier.
1160
+ _JAVA_IMPORT_SPECIFIER_RE = re.compile(
1161
+ r"^\s*import\s+(static\s+)?([\w.]+(?:\.\*)?)\s*;",
1162
+ re.MULTILINE,
1163
+ )
1164
+ _JAVA_PACKAGE_SPECIFIER_RE = re.compile(r"^\s*package\s+([\w.]+)\s*;", re.MULTILINE)
1165
+
1166
+
1167
+ def _extract_java_import_specifiers(file_path: Path) -> list[str]:
1168
+ """Return raw Java ``import``/``package`` specifiers for DAG edge building.
1169
+
1170
+ Prefers the registry's Java ``source`` backend (tree-sitter-java) so the SAME
1171
+ extraction the scanner uses produces the DAG specifiers; degrades to a regex
1172
+ when the binding is absent. Either way the SHAPES (``static …`` / ``….*`` /
1173
+ ``package …``) match, so ``_resolve_import_target``'s Java branch — dispatched
1174
+ by the ``.java`` suffix (DATA), not a ``language ==`` core branch — resolves
1175
+ them identically. Mirrors ``_extract_python_import_specifiers``.
1176
+ """
1177
+
1178
+ from codd.parsing import get_extractor
1179
+
1180
+ content = file_path.read_text(encoding="utf-8", errors="ignore")
1181
+ specifiers = get_extractor("java", "source").extract_import_specifiers(content)
1182
+ if specifiers:
1183
+ return specifiers
1184
+ # Fallback: tree-sitter-java unavailable → RegexExtractor returned []. Recover
1185
+ # the same specifier shapes from a line regex so Java edges still form.
1186
+ fallback: list[str] = []
1187
+ package_match = _JAVA_PACKAGE_SPECIFIER_RE.search(content)
1188
+ if package_match:
1189
+ fallback.append(f"package {package_match.group(1)}")
1190
+ for static_kw, name in _JAVA_IMPORT_SPECIFIER_RE.findall(content):
1191
+ if name.endswith(".*"):
1192
+ fallback.append(name)
1193
+ elif static_kw:
1194
+ fallback.append(f"static {name}")
1195
+ else:
1196
+ fallback.append(name)
1197
+ return fallback
1198
+
1199
+
1200
+ #: Suffix → raw-specifier extractor (DATA dispatch). A source file whose language
1201
+ #: carries its intra-tree dependency graph in DOTTED specifiers (Python modules,
1202
+ #: Java FQNs) resolves edges from these, instead of the builder's quoted-string
1203
+ #: ``extract_imports`` seam (JS/TS ``from '…'`` / ``require('…')``). Adding a
1204
+ #: language here is pure data — no core ``if language ==`` branch.
1205
+ _SUFFIX_SPECIFIER_EXTRACTORS: dict[str, "Callable[[Path], list[str]]"] = {
1206
+ ".py": _extract_python_import_specifiers,
1207
+ ".java": _extract_java_import_specifiers,
1208
+ }
1209
+
1210
+
1028
1211
  def _extract_impl_imports(file_path: Path) -> list[str]:
1029
1212
  """Return raw import specifiers for an implementation file.
1030
1213
 
1031
- Python impl files go through AST-based specifier extraction (the same path
1032
- test files use) so impl→impl import edges form for Python — the core of the
1033
- fix. Every other language keeps the existing quoted-specifier extractor
1034
- (``extract_imports``: JS/TS ``from '…'`` / ``require('…')``), unchanged.
1035
- Dispatch is by file suffix (DATA), mirroring ``_extract_test_imports``.
1214
+ Python and Java impl files go through their registry-backed specifier
1215
+ extractors (the same path test files use) so impl→impl import edges form for
1216
+ them — the core of the fix. Every other language keeps the existing
1217
+ quoted-specifier extractor (``extract_imports``: JS/TS ``from '…'`` /
1218
+ ``require('…')``), unchanged. Dispatch is by file suffix (DATA).
1036
1219
  """
1037
1220
 
1038
- if file_path.suffix == ".py":
1039
- return _extract_python_import_specifiers(file_path)
1221
+ extractor = _SUFFIX_SPECIFIER_EXTRACTORS.get(file_path.suffix)
1222
+ if extractor is not None:
1223
+ return extractor(file_path)
1040
1224
  return extract_imports(file_path)
1041
1225
 
1042
1226
 
1043
1227
  def _extract_test_imports(file_path: Path) -> list[str]:
1044
1228
  imports = extract_imports(file_path)
1045
- if file_path.suffix != ".py":
1229
+ extractor = _SUFFIX_SPECIFIER_EXTRACTORS.get(file_path.suffix)
1230
+ if extractor is None:
1046
1231
  return imports
1047
1232
 
1048
- # AST-based Python specifiers (relative imports included). Combined with the
1049
- # quoted-specifier pass above so a polyglot test file (e.g. a ``.py`` test
1050
- # that also embeds a JS ``require('…')`` literal in a string) keeps both.
1051
- return [*imports, *_extract_python_import_specifiers(file_path)]
1233
+ # Registry-backed dotted specifiers (Python relative imports / Java FQNs)
1234
+ # combined with the quoted-specifier pass above so a polyglot test file keeps
1235
+ # both seams' results.
1236
+ return [*imports, *extractor(file_path)]
1052
1237
 
1053
1238
 
1054
1239
  def _resolve_python_import_target(import_ref: str, project_root: Path, path_to_node: dict[Path, str]) -> str | None:
@@ -323,8 +323,23 @@ def _detect_language(project_root: Path, exclude_patterns: list[str]) -> str:
323
323
  return max(counts, key=counts.get)
324
324
 
325
325
 
326
+ # Conventional JVM (Maven/Gradle) source / test layout. Detected by directory
327
+ # PRESENCE (DATA), not a language gate, so a polyglot repo that happens to carry
328
+ # this layout is handled the same way. ``src`` is deliberately NOT used as a
329
+ # source dir when ``src/main/*`` exists, because the bare ``src`` glob would also
330
+ # sweep in ``src/test/*`` (mixing tests into impl).
331
+ _JVM_SOURCE_LAYOUT_DIRS = ("src/main/java", "src/main/kotlin", "src/main/scala")
332
+ _JVM_TEST_LAYOUT_DIRS = ("src/test/java", "src/test/kotlin", "src/test/scala")
333
+
334
+
326
335
  def _detect_source_dirs(project_root: Path, language: str) -> list[str]:
327
336
  """Auto-detect source directories."""
337
+ jvm_source = [d for d in _JVM_SOURCE_LAYOUT_DIRS if (project_root / d).is_dir()]
338
+ if jvm_source:
339
+ # Maven/Gradle layout: point at ``src/main/<lang>`` so the impl glob does
340
+ # not also pick up ``src/test/<lang>`` (which _detect_test_dirs claims).
341
+ return jvm_source
342
+
328
343
  candidates = ["src", "lib", "app", "pkg", "cmd", "internal"]
329
344
  found = []
330
345
 
@@ -361,6 +376,12 @@ def _detect_test_dirs(project_root: Path) -> list[str]:
361
376
  for c in candidates:
362
377
  if (project_root / c).is_dir():
363
378
  found.append(c)
379
+ # JVM (Maven/Gradle) layout keeps tests under ``src/test/<lang>`` rather than
380
+ # a top-level ``tests/``. Detected by directory presence (DATA), additive so
381
+ # non-JVM projects are unaffected.
382
+ for d in _JVM_TEST_LAYOUT_DIRS:
383
+ if (project_root / d).is_dir():
384
+ found.append(d)
364
385
  return found
365
386
 
366
387
 
@@ -126,18 +126,99 @@ def _symbols_ts_js(content: str, rel_path: str) -> "list[Symbol]":
126
126
  return symbols
127
127
 
128
128
 
129
+ #: Java type-declaration keyword → emitted symbol kind. ``record`` and the
130
+ #: annotation type collapse to the nearest existing kind so downstream symbol
131
+ #: consumers (which only know class/interface/enum/function) stay unchanged.
132
+ _JAVA_TYPE_KEYWORD_KINDS = (
133
+ (re.compile(r'^\s*(?:public|protected|private)?\s*(?:static\s+)?(?:abstract\s+|final\s+)?class\s+(\w+)'), "class"),
134
+ (re.compile(r'^\s*(?:public|protected|private)?\s*(?:static\s+)?(?:abstract\s+)?interface\s+(\w+)'), "interface"),
135
+ (re.compile(r'^\s*(?:public|protected|private)?\s*(?:static\s+)?enum\s+(\w+)'), "enum"),
136
+ (re.compile(r'^\s*(?:public|protected|private)?\s*(?:static\s+)?(?:final\s+)?record\s+(\w+)'), "class"),
137
+ )
138
+
139
+
129
140
  def _symbols_java(content: str, rel_path: str) -> "list[Symbol]":
130
141
  symbols: list = []
131
142
  for i, line in enumerate(content.splitlines(), 1):
132
- m = re.match(r'^\s*(?:public|protected|private)?\s*(?:static\s+)?(?:abstract\s+)?class\s+(\w+)', line)
133
- if m:
134
- symbols.append(_symbol(m.group(1), "class", rel_path, i))
143
+ for pattern, kind in _JAVA_TYPE_KEYWORD_KINDS:
144
+ m = pattern.match(line)
145
+ if m:
146
+ symbols.append(_symbol(m.group(1), kind, rel_path, i))
147
+ break
135
148
  m = re.match(r'^\s*(?:public|protected)\s+(?:static\s+)?[\w<>\[\],\s]+\s+(\w+)\s*\(([^)]*)\)', line)
136
149
  if m and m.group(1)[0].islower():
137
150
  symbols.append(_symbol(m.group(1), "function", rel_path, i, m.group(2).strip()))
138
151
  return symbols
139
152
 
140
153
 
154
+ #: Java stdlib / platform package roots (mirrors treesitter._JAVA_STDLIB_ROOTS).
155
+ _JAVA_STDLIB = frozenset({"java", "javax", "jdk", "sun"})
156
+
157
+ _JAVA_IMPORT_RE = re.compile(r'^\s*import\s+(static\s+)?([\w.]+(?:\.\*)?)\s*;')
158
+ _JAVA_PACKAGE_RE = re.compile(r'^\s*package\s+([\w.]+)\s*;')
159
+
160
+
161
+ def _imports_java(content, project_root, src_dir, file_path):
162
+ """Classify Java imports: first-party ``internal`` vs ``java.*``/third-party.
163
+
164
+ The regex sibling of ``treesitter._extract_java_imports_ast`` (used when
165
+ tree-sitter-java is unavailable). First-party = an import sharing the file's
166
+ own package org+domain prefix (first 2 segments, e.g. ``com.google``);
167
+ ``java.*``/``javax.*``/``jdk.*``/``sun.*`` and unrelated third parties are
168
+ external. ``stdlib`` subtraction is applied by ``RegexLanguageStrategy``.
169
+ """
170
+ internal: dict[str, list[str]] = {}
171
+ external: set[str] = set()
172
+
173
+ package_root = ""
174
+ for line in content.splitlines():
175
+ pm = _JAVA_PACKAGE_RE.match(line)
176
+ if pm:
177
+ package_root = pm.group(1)
178
+ break
179
+
180
+ root_parts = package_root.split(".") if package_root else []
181
+ depth = min(2, len(root_parts))
182
+
183
+ for line in content.splitlines():
184
+ m = _JAVA_IMPORT_RE.match(line)
185
+ if not m:
186
+ continue
187
+ fqn = m.group(2)
188
+ if fqn.endswith(".*"):
189
+ fqn = fqn[:-2]
190
+ parts = fqn.split(".")
191
+ top = parts[0]
192
+ if top in _JAVA_STDLIB:
193
+ external.add(fqn)
194
+ continue
195
+ if root_parts and parts[:depth] == root_parts[:depth]:
196
+ key = _java_internal_key(parts, root_parts)
197
+ internal.setdefault(key, []).append(line.strip())
198
+ else:
199
+ external.add(fqn)
200
+
201
+ return internal, external
202
+
203
+
204
+ def _java_internal_key(fqn_parts: list[str], root_parts: list[str]) -> str:
205
+ """The first sub-package segment after the file's package root.
206
+
207
+ For a ``com.acme.app`` file importing ``com.acme.app.util.Helper`` the key is
208
+ ``util`` (the meaningful first-party sub-module), not the shared org segment.
209
+ Falls back to the last package segment when the import IS the package root.
210
+ """
211
+ common = 0
212
+ for left, right in zip(fqn_parts, root_parts):
213
+ if left != right:
214
+ break
215
+ common += 1
216
+ remainder = fqn_parts[common:]
217
+ if remainder:
218
+ return remainder[0]
219
+ return fqn_parts[-2] if len(fqn_parts) >= 2 else fqn_parts[0]
220
+
221
+
141
222
  def _symbols_go(content: str, rel_path: str) -> "list[Symbol]":
142
223
  symbols: list = []
143
224
  for i, line in enumerate(content.splitlines(), 1):
@@ -395,9 +476,13 @@ _JAVASCRIPT = RegexLanguageStrategy(
395
476
  _JAVA = RegexLanguageStrategy(
396
477
  name="java",
397
478
  extensions=frozenset({".java"}),
479
+ # stdlib stays EMPTY: the old ladder had no java stdlib set and
480
+ # ``common_stdlib("java")`` is pinned to ``set()``. ``_imports_java`` classifies
481
+ # ``java.*`` into ``external`` itself (per the Piece-2 contract) rather than
482
+ # relying on strategy-level stdlib subtraction.
398
483
  entry_points=("Application.java", "Main.java", "App.java"),
399
484
  extract_symbols=_symbols_java,
400
- extract_imports=None, # the old ladder had NO java import branch (no-op)
485
+ extract_imports=_imports_java,
401
486
  detect_code_patterns=None, # the old ladder had NO java code-pattern branch
402
487
  file_to_module=_file_to_module_java,
403
488
  guess_test_target=None,
@@ -503,6 +588,41 @@ def _ceg_targets_python(
503
588
  return targets
504
589
 
505
590
 
591
+ def _ceg_targets_java(
592
+ internal: dict, project_root: Path, file_path: Path
593
+ ) -> "list[CegImportTarget]":
594
+ """Java internal imports → ``module`` CEG nodes keyed by first-party FQN.
595
+
596
+ Mirrors the python resolver's module-node modelling (a stable identifier per
597
+ imported first-party unit) rather than probing the filesystem; the DAG
598
+ builder owns the precise FQN→file resolution for import EDGES. The ``internal``
599
+ map values are the raw import lines (``com.google.gson.internal.Streams`` /
600
+ ``static com.google.gson.Foo.bar``); we recover the owning FQN for the node.
601
+ """
602
+ targets: list[CegImportTarget] = []
603
+ seen: set[str] = set()
604
+ for import_lines in internal.values():
605
+ for line in import_lines:
606
+ fqn = line.strip()
607
+ if fqn.startswith("static "):
608
+ fqn = fqn[len("static "):]
609
+ if fqn.endswith(".*"):
610
+ fqn = fqn[:-2]
611
+ if not fqn or fqn in seen:
612
+ continue
613
+ seen.add(fqn)
614
+ targets.append(
615
+ CegImportTarget(
616
+ target_id=f"module:{fqn}",
617
+ node_type="module",
618
+ node_kwargs={"name": fqn},
619
+ evidence_method="static_import",
620
+ confidence=0.90,
621
+ )
622
+ )
623
+ return targets
624
+
625
+
506
626
  #: Per-language scanner CEG-import resolvers (registry DATA). Languages without
507
627
  #: an entry contribute NO import edges, byte-identical to the former scanner
508
628
  #: block that only handled python and typescript/javascript.
@@ -512,6 +632,7 @@ _CEG_IMPORT_RESOLVERS: dict[
512
632
  "typescript": _ceg_targets_ts_js,
513
633
  "javascript": _ceg_targets_ts_js,
514
634
  "python": _ceg_targets_python,
635
+ "java": _ceg_targets_java,
515
636
  }
516
637
 
517
638