codd-dev 3.7.2__tar.gz → 3.7.4__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 (638) hide show
  1. {codd_dev-3.7.2 → codd_dev-3.7.4}/PKG-INFO +1 -1
  2. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/__init__.py +1 -1
  3. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/builder.py +358 -13
  4. codd_dev-3.7.4/codd/dag/defaults/cpp_embedded.yaml +2 -0
  5. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/extractor.py +27 -1
  6. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/parsing/regex_strategies.py +294 -4
  7. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/parsing/treesitter.py +230 -1
  8. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/synth.py +17 -1
  9. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/templates/extracted/api-contract.md.j2 +2 -2
  10. {codd_dev-3.7.2 → codd_dev-3.7.4}/pyproject.toml +1 -1
  11. codd_dev-3.7.2/codd/dag/defaults/cpp_embedded.yaml +0 -2
  12. {codd_dev-3.7.2 → codd_dev-3.7.4}/.gitignore +0 -0
  13. {codd_dev-3.7.2 → codd_dev-3.7.4}/LICENSE +0 -0
  14. {codd_dev-3.7.2 → codd_dev-3.7.4}/README.md +0 -0
  15. {codd_dev-3.7.2 → codd_dev-3.7.4}/bench_fixture/README.md +0 -0
  16. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/__main__.py +0 -0
  17. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/_git_helper.py +0 -0
  18. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/action_outcome.py +0 -0
  19. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/ai_invoke.py +0 -0
  20. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/ai_patch.py +0 -0
  21. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/artifact_contract.py +0 -0
  22. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/artifact_ids.py +0 -0
  23. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/artifacts/catalog.yaml +0 -0
  24. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/ask_user_question_adapter.py +0 -0
  25. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/assembler.py +0 -0
  26. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/bridge.py +0 -0
  27. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/brownfield/__init__.py +0 -0
  28. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/brownfield/pipeline.py +0 -0
  29. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/capability_completeness.py +0 -0
  30. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/claude_cli.py +0 -0
  31. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/cli.py +0 -0
  32. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/clustering.py +0 -0
  33. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/coherence_adapters.py +0 -0
  34. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/coherence_engine.py +0 -0
  35. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/confidence.py +0 -0
  36. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/config.py +0 -0
  37. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/config_schema.py +0 -0
  38. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/contracts.py +0 -0
  39. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/contracts_registry/__init__.py +0 -0
  40. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/contracts_registry/__main__.py +0 -0
  41. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/contracts_registry/certify.py +0 -0
  42. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/contracts_registry/generate_matrix.py +0 -0
  43. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/contracts_registry/registry.py +0 -0
  44. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/coverage_auditor.py +0 -0
  45. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/coverage_execution_coherence.py +0 -0
  46. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/coverage_metrics.py +0 -0
  47. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/__init__.py +0 -0
  48. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/auto_repair.py +0 -0
  49. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/checks/__init__.py +0 -0
  50. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/checks/_one_to_many_detection.py +0 -0
  51. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/checks/artifact_contract_check.py +0 -0
  52. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/checks/cardinality_coverage.py +0 -0
  53. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/checks/ci_health.py +0 -0
  54. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/checks/dependency_freshness.py +0 -0
  55. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/checks/depends_on_consistency.py +0 -0
  56. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/checks/deployment_completeness.py +0 -0
  57. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/checks/edge_validity.py +0 -0
  58. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/checks/environment_coverage.py +0 -0
  59. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/checks/extraction_diagnostics.py +0 -0
  60. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/checks/implementation_coverage.py +0 -0
  61. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/checks/negative_space.py +0 -0
  62. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/checks/node_completeness.py +0 -0
  63. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/checks/opt_out.py +0 -0
  64. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/checks/resource_flow_coherence.py +0 -0
  65. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/checks/semantic_contract_conflict.py +0 -0
  66. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/checks/stale_evidence.py +0 -0
  67. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/checks/task_completion.py +0 -0
  68. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/checks/transitive_closure.py +0 -0
  69. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/checks/ui_coherence.py +0 -0
  70. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/checks/user_journey_coherence.py +0 -0
  71. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/coverage_axes.py +0 -0
  72. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/defaults/cli.yaml +0 -0
  73. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/defaults/csharp.yaml +0 -0
  74. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/defaults/elixir.yaml +0 -0
  75. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/defaults/generic.yaml +0 -0
  76. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/defaults/iot.yaml +0 -0
  77. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/defaults/java.yaml +0 -0
  78. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/defaults/kotlin.yaml +0 -0
  79. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/defaults/mobile.yaml +0 -0
  80. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/defaults/ruby.yaml +0 -0
  81. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/defaults/rust.yaml +0 -0
  82. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/defaults/scala.yaml +0 -0
  83. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/defaults/swift.yaml +0 -0
  84. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/defaults/test_frameworks.yaml +0 -0
  85. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/defaults/web.yaml +0 -0
  86. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/extractor.py +0 -0
  87. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/impact.py +0 -0
  88. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/materiality.py +0 -0
  89. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/metadata_access.py +0 -0
  90. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/result_status.py +0 -0
  91. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dag/runner.py +0 -0
  92. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/defaults.py +0 -0
  93. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/defaults.yaml +0 -0
  94. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/dependency_lock_coherence.py +0 -0
  95. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deploy_targets/__init__.py +0 -0
  96. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deploy_targets/app_service.py +0 -0
  97. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deploy_targets/base.py +0 -0
  98. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deploy_targets/docker_compose.py +0 -0
  99. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deployer.py +0 -0
  100. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deployment/__init__.py +0 -0
  101. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deployment/checks/__init__.py +0 -0
  102. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deployment/defaults/deploy_targets.yaml +0 -0
  103. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
  104. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deployment/defaults/schema_providers.yaml +0 -0
  105. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deployment/defaults/verification_templates.yaml +0 -0
  106. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deployment/extractor.py +0 -0
  107. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deployment/providers/__init__.py +0 -0
  108. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deployment/providers/ai_command.py +0 -0
  109. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deployment/providers/ai_command_factory.py +0 -0
  110. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deployment/providers/codex_app_server.py +0 -0
  111. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deployment/providers/llm_consideration.py +0 -0
  112. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deployment/providers/schema/__init__.py +0 -0
  113. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deployment/providers/schema/prisma.py +0 -0
  114. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deployment/providers/target/__init__.py +0 -0
  115. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deployment/providers/target/docker_compose.py +0 -0
  116. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deployment/providers/verification/__init__.py +0 -0
  117. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
  118. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deployment/providers/verification/cdp_browser.py +0 -0
  119. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deployment/providers/verification/cdp_engines.py +0 -0
  120. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
  121. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deployment/providers/verification/cdp_wire.py +0 -0
  122. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deployment/providers/verification/curl.py +0 -0
  123. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deployment/providers/verification/form_strategies.py +0 -0
  124. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deployment/providers/verification/means_catalog.py +0 -0
  125. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deployment/providers/verification/playwright.py +0 -0
  126. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deployment/providers/verification/pytest_http.py +0 -0
  127. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/deployment/providers/verification/vitest.py +0 -0
  128. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/design_md.py +0 -0
  129. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/diff/__init__.py +0 -0
  130. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/diff/apply.py +0 -0
  131. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/diff/engine.py +0 -0
  132. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/diff/persistence.py +0 -0
  133. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/diff/templates/diff_prompt.md +0 -0
  134. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/discovery.py +0 -0
  135. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/drift.py +0 -0
  136. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/e2e_contract_coherence.py +0 -0
  137. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/e2e_extractor.py +0 -0
  138. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/e2e_generator.py +0 -0
  139. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/e2e_harness.py +0 -0
  140. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/e2e_runner.py +0 -0
  141. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/elicit/__init__.py +0 -0
  142. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/elicit/apply.py +0 -0
  143. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/elicit/engine.py +0 -0
  144. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/elicit/finding.py +0 -0
  145. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/elicit/formatters/__init__.py +0 -0
  146. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/elicit/formatters/base.py +0 -0
  147. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/elicit/formatters/interactive.py +0 -0
  148. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/elicit/formatters/json_fmt.py +0 -0
  149. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/elicit/formatters/md.py +0 -0
  150. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/elicit/gap_to_ask.py +0 -0
  151. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/elicit/lexicon_loader.py +0 -0
  152. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/elicit/persistence.py +0 -0
  153. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/elicit/promote.py +0 -0
  154. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/elicit/routing.py +0 -0
  155. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
  156. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/env_refs.py +0 -0
  157. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/extract_ai.py +0 -0
  158. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/extract_paths.py +0 -0
  159. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/fix/__init__.py +0 -0
  160. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/fix/candidate_selector.py +0 -0
  161. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/fix/design_updater.py +0 -0
  162. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/fix/impact_planner.py +0 -0
  163. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/fix/impl_propagation.py +0 -0
  164. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/fix/interactive_prompt.py +0 -0
  165. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/fix/phenomenon_fixer.py +0 -0
  166. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/fix/phenomenon_parser.py +0 -0
  167. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/fix/risk_classifier.py +0 -0
  168. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/fix/templates/clarification_question.txt +0 -0
  169. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/fix/templates/design_update.txt +0 -0
  170. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/fix/templates/impl_update.txt +0 -0
  171. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/fix/templates/phenomenon_parse.txt +0 -0
  172. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/fix/templates/risk_assessment.txt +0 -0
  173. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/fix/templates_loader.py +0 -0
  174. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/fixer.py +0 -0
  175. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/fixup_drift.py +0 -0
  176. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/fixup_drift_strategies/__init__.py +0 -0
  177. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
  178. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
  179. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/fixup_drift_strategies/url_drift.py +0 -0
  180. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/frontmatter.py +0 -0
  181. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/generator.py +0 -0
  182. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/git_evidence.py +0 -0
  183. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/graph.py +0 -0
  184. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/greenfield/__init__.py +0 -0
  185. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/greenfield/pipeline.py +0 -0
  186. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/hitl_session.py +0 -0
  187. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/hooks/__init__.py +0 -0
  188. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/hooks/pre-commit +0 -0
  189. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
  190. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/hooks/recipes/claude_settings_example.json +0 -0
  191. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/hooks/recipes/codex_hook.sh +0 -0
  192. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/hooks/recipes/git_post_commit.sh +0 -0
  193. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/hooks/recipes/git_pre_commit.sh +0 -0
  194. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/iac_nfr.py +0 -0
  195. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/implement_oracle.py +0 -0
  196. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/implement_oracle_scope.py +0 -0
  197. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/implement_oracle_types.py +0 -0
  198. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/implementer/__init__.py +0 -0
  199. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/implementer/chunked_runner.py +0 -0
  200. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/implementer/typecheck_loop.py +0 -0
  201. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/implementer.py +0 -0
  202. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/import_coherence.py +0 -0
  203. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/inheritance.py +0 -0
  204. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/init/__init__.py +0 -0
  205. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/init/lexicon_suggest.py +0 -0
  206. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/init/llm_lexicon_suggester.py +0 -0
  207. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/init/stack_detector.py +0 -0
  208. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/knowledge_fetcher.py +0 -0
  209. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/languages/__init__.py +0 -0
  210. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/languages/adapters/__init__.py +0 -0
  211. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/languages/adapters/implement_oracle.py +0 -0
  212. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/languages/adapters/oracle_go.py +0 -0
  213. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/languages/adapters/oracle_python.py +0 -0
  214. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/languages/adapters/oracle_typescript.py +0 -0
  215. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/languages/adapters/runner_report.py +0 -0
  216. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/languages/builtin_adapters.py +0 -0
  217. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/languages/compat.py +0 -0
  218. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/languages/contract.py +0 -0
  219. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/languages/loader.py +0 -0
  220. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/languages/oracle_executor.py +0 -0
  221. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/languages/path_planner.py +0 -0
  222. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/languages/profile.py +0 -0
  223. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/languages/profiles/go.yaml +0 -0
  224. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/languages/profiles/python.yaml +0 -0
  225. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/languages/profiles/typescript.yaml +0 -0
  226. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/languages/registry.py +0 -0
  227. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/languages/verify_executor.py +0 -0
  228. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/languages/verify_plan.py +0 -0
  229. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/lexicon.py +0 -0
  230. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/lexicon_cli/__init__.py +0 -0
  231. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/lexicon_cli/formatters/__init__.py +0 -0
  232. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/lexicon_cli/formatters/html.py +0 -0
  233. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
  234. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/lexicon_cli/formatters/md.py +0 -0
  235. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/lexicon_cli/inspector.py +0 -0
  236. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/lexicon_cli/manager.py +0 -0
  237. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/lexicon_cli/reporter.py +0 -0
  238. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/lexicon_cli/threshold.py +0 -0
  239. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/llm/__init__.py +0 -0
  240. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/llm/approval.py +0 -0
  241. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/llm/best_practice_augmenter.py +0 -0
  242. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/llm/criteria_expander.py +0 -0
  243. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/llm/design_doc_extractor.py +0 -0
  244. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/llm/impl_step_deriver.py +0 -0
  245. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/llm/means_catalog_loader.py +0 -0
  246. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/llm/parser.py +0 -0
  247. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/llm/plan_deriver.py +0 -0
  248. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/llm/prompt_builder.py +0 -0
  249. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/llm/strategy_validator.py +0 -0
  250. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/llm/templates/best_practice_augment_meta.md +0 -0
  251. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/llm/templates/criteria_expand_meta.md +0 -0
  252. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/llm/templates/design_doc_extract_meta.md +0 -0
  253. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/llm/templates/impl_step_derive_meta.md +0 -0
  254. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
  255. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/llm/templates/meta_instruction.md +0 -0
  256. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/llm/templates/plan_derive_meta.md +0 -0
  257. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/llm/templates/verification_means_catalog.yaml +0 -0
  258. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/mcp_server.py +0 -0
  259. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/measure.py +0 -0
  260. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/operational_e2e_audit.py +0 -0
  261. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/operations_derive.py +0 -0
  262. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/parsing/__init__.py +0 -0
  263. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/parsing/_shared.py +0 -0
  264. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/parsing/api_specs.py +0 -0
  265. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/parsing/extractor_registry.py +0 -0
  266. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/parsing/filesystem_routes.py +0 -0
  267. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/parsing/iac.py +0 -0
  268. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/parsing/python_ast.py +0 -0
  269. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/parsing/schemas.py +0 -0
  270. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/parsing/tests_builddeps.py +0 -0
  271. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/path_safety.py +0 -0
  272. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/planner.py +0 -0
  273. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/policy.py +0 -0
  274. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/preflight/__init__.py +0 -0
  275. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/preflight/defaults/cli.yaml +0 -0
  276. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/preflight/defaults/generic.yaml +0 -0
  277. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/preflight/defaults/iot.yaml +0 -0
  278. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/preflight/defaults/mobile.yaml +0 -0
  279. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/preflight/defaults/web.yaml +0 -0
  280. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/project_types.py +0 -0
  281. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/propagate.py +0 -0
  282. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/propagation_common.py +0 -0
  283. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/propagator.py +0 -0
  284. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/reconciliation_ledger.py +0 -0
  285. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/reference_resolution.py +0 -0
  286. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/registry.py +0 -0
  287. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/repair/__init__.py +0 -0
  288. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/repair/approval_repair.py +0 -0
  289. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/repair/auto_scope_guard.py +0 -0
  290. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/repair/engine.py +0 -0
  291. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/repair/git_patcher.py +0 -0
  292. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/repair/history.py +0 -0
  293. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/repair/llm_repair_engine.py +0 -0
  294. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/repair/loop.py +0 -0
  295. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/repair/primary_picker.py +0 -0
  296. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/repair/proof_breaks.py +0 -0
  297. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/repair/repair_result.py +0 -0
  298. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/repair/repairability_classifier.py +0 -0
  299. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/repair/schema.py +0 -0
  300. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/repair/templates/analyze_meta.md +0 -0
  301. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/repair/templates/propose_meta.md +0 -0
  302. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/repair/templates/repair_strategy_meta.md +0 -0
  303. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/repair/templates/repairability_meta.md +0 -0
  304. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/repair/test_failure_attribution.py +0 -0
  305. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/repair/verify_runner.py +0 -0
  306. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/repair_slice.py +0 -0
  307. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/require.py +0 -0
  308. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/require_plugins.py +0 -0
  309. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/require_propagate.py +0 -0
  310. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/required_artifacts/defaults/cli.yaml +0 -0
  311. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/required_artifacts/defaults/generic.yaml +0 -0
  312. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/required_artifacts/defaults/iot.yaml +0 -0
  313. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/required_artifacts/defaults/mobile.yaml +0 -0
  314. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/required_artifacts/defaults/web.yaml +0 -0
  315. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/required_artifacts_deriver.py +0 -0
  316. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/requirement_completeness/defaults/cli.yaml +0 -0
  317. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/requirement_completeness/defaults/generic.yaml +0 -0
  318. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/requirement_completeness/defaults/iot.yaml +0 -0
  319. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
  320. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/requirement_completeness/defaults/web.yaml +0 -0
  321. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/requirement_completeness_auditor.py +0 -0
  322. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/requirement_reconciliation.py +0 -0
  323. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/requirements_meta.py +0 -0
  324. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/restoration_report.py +0 -0
  325. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/restore.py +0 -0
  326. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/routes_extractor.py +0 -0
  327. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/runtime_smoke/__init__.py +0 -0
  328. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/runtime_smoke/checks.py +0 -0
  329. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/runtime_smoke/config.py +0 -0
  330. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/runtime_smoke/report.py +0 -0
  331. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/runtime_smoke/runner.py +0 -0
  332. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/scanner.py +0 -0
  333. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/schema_refs.py +0 -0
  334. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/screen_flow_validator.py +0 -0
  335. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/screen_transition_extractor.py +0 -0
  336. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/screen_transitions/defaults.yaml +0 -0
  337. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/skills_cli/__init__.py +0 -0
  338. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/skills_cli/discovery.py +0 -0
  339. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/skills_cli/manager.py +0 -0
  340. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/skills_cli/paths.py +0 -0
  341. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/stack/__init__.py +0 -0
  342. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/stack/adapters/__init__.py +0 -0
  343. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/stack/adapters/_base.py +0 -0
  344. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/stack/adapters/nextjs.py +0 -0
  345. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/stack/adapters/playwright.py +0 -0
  346. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/stack/adapters/prisma.py +0 -0
  347. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/stack/command_authenticity.py +0 -0
  348. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/stack/command_override.py +0 -0
  349. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/stack/command_plan.py +0 -0
  350. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/stack/compose.py +0 -0
  351. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/stack/loader.py +0 -0
  352. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/stack/lock.py +0 -0
  353. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/stack/obligations.py +0 -0
  354. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/stack/profile.py +0 -0
  355. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/stack/profiles/addons/playwright.yaml +0 -0
  356. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/stack/profiles/addons/prisma.yaml +0 -0
  357. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/stack/profiles/frameworks/nextjs.yaml +0 -0
  358. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/stack/project.py +0 -0
  359. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/stack/registry.py +0 -0
  360. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/stack/replacement_proof.py +0 -0
  361. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/stack/resolve.py +0 -0
  362. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/surface_reconciliation.py +0 -0
  363. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/templates/codd.yaml.tmpl +0 -0
  364. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/templates/conventions.yaml.tmpl +0 -0
  365. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/templates/data_dependencies.yaml.tmpl +0 -0
  366. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/templates/doc_links.yaml.tmpl +0 -0
  367. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/templates/extract_ai_prompt_baseline.md +0 -0
  368. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
  369. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/templates/extracted/module-detail.md.j2 +0 -0
  370. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/templates/extracted/schema-design.md.j2 +0 -0
  371. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/templates/extracted/system-context.md.j2 +0 -0
  372. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/templates/gitignore.tmpl +0 -0
  373. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/templates/lexicon_questions.md +0 -0
  374. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/templates/lexicon_schema.yaml +0 -0
  375. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/templates/overrides.yaml.tmpl +0 -0
  376. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/test_detection.py +0 -0
  377. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/test_import_coherence.py +0 -0
  378. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/traceability.py +0 -0
  379. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/validator.py +0 -0
  380. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/vb_marker_authenticity.py +0 -0
  381. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/vb_rerun_scope.py +0 -0
  382. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/verifiable_behavior_audit.py +0 -0
  383. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/watch/__init__.py +0 -0
  384. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/watch/events.py +0 -0
  385. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/watch/propagation_log.py +0 -0
  386. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/watch/propagation_pipeline.py +0 -0
  387. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/watch/test_runner.py +0 -0
  388. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/watch/watcher.py +0 -0
  389. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd/wiring.py +0 -0
  390. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
  391. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
  392. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
  393. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
  394. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
  395. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
  396. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
  397. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
  398. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
  399. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
  400. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
  401. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
  402. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
  403. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
  404. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
  405. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
  406. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
  407. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
  408. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
  409. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
  410. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
  411. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
  412. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
  413. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
  414. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
  415. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
  416. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
  417. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
  418. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
  419. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
  420. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
  421. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
  422. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
  423. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
  424. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
  425. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
  426. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
  427. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
  428. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
  429. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
  430. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
  431. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
  432. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
  433. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
  434. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
  435. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
  436. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
  437. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
  438. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
  439. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
  440. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
  441. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
  442. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
  443. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
  444. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
  445. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
  446. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
  447. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
  448. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
  449. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
  450. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
  451. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
  452. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
  453. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
  454. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
  455. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
  456. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
  457. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
  458. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
  459. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
  460. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
  461. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
  462. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
  463. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
  464. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
  465. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
  466. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
  467. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
  468. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
  469. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
  470. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
  471. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
  472. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
  473. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
  474. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
  475. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
  476. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
  477. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
  478. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
  479. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
  480. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
  481. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
  482. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
  483. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
  484. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
  485. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
  486. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
  487. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
  488. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
  489. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
  490. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
  491. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
  492. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
  493. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
  494. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
  495. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
  496. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
  497. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
  498. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
  499. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
  500. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
  501. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
  502. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
  503. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
  504. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
  505. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
  506. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
  507. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
  508. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
  509. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
  510. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
  511. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
  512. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
  513. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
  514. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
  515. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
  516. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
  517. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
  518. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
  519. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
  520. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
  521. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
  522. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
  523. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
  524. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
  525. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
  526. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
  527. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
  528. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
  529. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
  530. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
  531. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
  532. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
  533. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
  534. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
  535. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
  536. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
  537. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
  538. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
  539. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
  540. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
  541. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
  542. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
  543. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
  544. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
  545. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
  546. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
  547. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
  548. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
  549. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
  550. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
  551. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
  552. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
  553. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
  554. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
  555. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
  556. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
  557. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
  558. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
  559. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
  560. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
  561. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
  562. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
  563. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
  564. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
  565. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
  566. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
  567. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
  568. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
  569. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
  570. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
  571. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
  572. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
  573. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
  574. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
  575. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
  576. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
  577. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
  578. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
  579. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
  580. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
  581. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
  582. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
  583. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
  584. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
  585. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
  586. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
  587. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
  588. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
  589. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
  590. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
  591. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
  592. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
  593. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
  594. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
  595. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
  596. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
  597. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
  598. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
  599. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
  600. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
  601. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
  602. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
  603. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
  604. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
  605. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
  606. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
  607. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
  608. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
  609. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
  610. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
  611. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
  612. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
  613. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
  614. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
  615. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
  616. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
  617. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
  618. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
  619. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
  620. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
  621. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
  622. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
  623. {codd_dev-3.7.2 → codd_dev-3.7.4}/codd_plugins/stack_map.yaml +0 -0
  624. {codd_dev-3.7.2 → codd_dev-3.7.4}/docs/cookbook/cdp_browser/README.md +0 -0
  625. {codd_dev-3.7.2 → codd_dev-3.7.4}/docs/cookbook/presentation_aggregation/README.md +0 -0
  626. {codd_dev-3.7.2 → codd_dev-3.7.4}/docs/requirements/README.md +0 -0
  627. {codd_dev-3.7.2 → codd_dev-3.7.4}/examples/README.md +0 -0
  628. {codd_dev-3.7.2 → codd_dev-3.7.4}/skills/codd-assemble/SKILL.md +0 -0
  629. {codd_dev-3.7.2 → codd_dev-3.7.4}/skills/codd-evolve/SKILL.md +0 -0
  630. {codd_dev-3.7.2 → codd_dev-3.7.4}/skills/codd-generate/SKILL.md +0 -0
  631. {codd_dev-3.7.2 → codd_dev-3.7.4}/skills/codd-greenfield/SKILL.md +0 -0
  632. {codd_dev-3.7.2 → codd_dev-3.7.4}/skills/codd-impact/SKILL.md +0 -0
  633. {codd_dev-3.7.2 → codd_dev-3.7.4}/skills/codd-init/SKILL.md +0 -0
  634. {codd_dev-3.7.2 → codd_dev-3.7.4}/skills/codd-propagate/SKILL.md +0 -0
  635. {codd_dev-3.7.2 → codd_dev-3.7.4}/skills/codd-restore/SKILL.md +0 -0
  636. {codd_dev-3.7.2 → codd_dev-3.7.4}/skills/codd-scan/SKILL.md +0 -0
  637. {codd_dev-3.7.2 → codd_dev-3.7.4}/skills/codd-validate/SKILL.md +0 -0
  638. {codd_dev-3.7.2 → codd_dev-3.7.4}/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.4
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.4"
@@ -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,32 @@ 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
+
927
+ # C++ ``#include`` specifiers are dispatched by the IMPORTING file's C/C++
928
+ # suffix (DATA, not a ``language ==`` core branch). Resolution is PATH-based
929
+ # (the specifier already carries its extension, e.g. ``fmt/core.h``), the key
930
+ # divergence from Java's FQN→path synthesis: a quote-form include resolves
931
+ # relative-to-file first, then via include roots; an angle-form include is
932
+ # system/STL and produces no edge.
933
+ if file_path.suffix in _CPP_SOURCE_SUFFIXES:
934
+ for candidate in _cpp_include_candidates(import_ref, file_path, path_to_node):
935
+ resolved = _resolve_file_candidate(candidate, path_to_node)
936
+ if resolved:
937
+ return resolved
938
+ return None
939
+
914
940
  candidates: list[Path] = []
915
941
  if _is_js_relative_specifier(import_ref):
916
942
  # JS/TS relative: ``./foo`` / ``../foo`` — resolve against the file dir
@@ -981,6 +1007,218 @@ def _python_relative_candidates(import_ref: str, file_path: Path) -> list[Path]:
981
1007
  return [(base / Path(*remainder.split("."))).resolve()]
982
1008
 
983
1009
 
1010
+ #: Conventional Java/JVM source-root segment chains (Maven/Gradle). A type whose
1011
+ #: FQN is ``com.x.Y`` lives at ``<root>/com/x/Y.java`` under one of these roots.
1012
+ _JAVA_SOURCE_ROOT_SEGMENTS = (
1013
+ ("src", "main", "java"),
1014
+ ("src", "test", "java"),
1015
+ ("src", "main", "kotlin"),
1016
+ ("src", "test", "kotlin"),
1017
+ )
1018
+
1019
+
1020
+ def _java_source_roots(project_root: Path, path_to_node: dict[Path, str]) -> list[Path]:
1021
+ """Return candidate Java source roots (deepest-first), derived from DATA.
1022
+
1023
+ Built from the actual node file-set rather than hard-coded paths: every
1024
+ ``…/src/main/java`` (etc.) prefix that some node file sits under becomes a
1025
+ root, plus the project root itself as a last resort (flat layouts / default
1026
+ package). Deeper roots are tried first so ``src/main/java`` wins over the
1027
+ project root when both could match.
1028
+ """
1029
+ roots: dict[str, Path] = {}
1030
+ for file_path in path_to_node:
1031
+ parts = file_path.parts
1032
+ for segments in _JAVA_SOURCE_ROOT_SEGMENTS:
1033
+ idx = _find_segment_chain(parts, segments)
1034
+ if idx is not None:
1035
+ root = Path(*parts[: idx + len(segments)])
1036
+ roots[str(root)] = root
1037
+ ordered = sorted(roots.values(), key=lambda path: len(path.parts), reverse=True)
1038
+ ordered.append(project_root.resolve())
1039
+ return ordered
1040
+
1041
+
1042
+ def _find_segment_chain(parts: tuple[str, ...], chain: tuple[str, ...]) -> int | None:
1043
+ """Return the start index where ``chain`` appears contiguously in ``parts``."""
1044
+ if not chain:
1045
+ return None
1046
+ for start in range(len(parts) - len(chain) + 1):
1047
+ if parts[start : start + len(chain)] == chain:
1048
+ return start
1049
+ return None
1050
+
1051
+
1052
+ def _java_import_candidates(
1053
+ import_ref: str,
1054
+ file_path: Path,
1055
+ project_root: Path,
1056
+ path_to_node: dict[Path, str],
1057
+ ) -> list[Path]:
1058
+ """Map a Java specifier to filesystem candidates under the source roots.
1059
+
1060
+ Handles the four shapes emitted by the Java specifier extractor:
1061
+
1062
+ * ``package com.x`` → the file's OWN package dir, so same-package implicit
1063
+ references (Java needs no import for siblings) yield edges to the package's
1064
+ other files (the caller skips the self-edge).
1065
+ * ``com.x.*`` (wildcard) → the package directory; the caller links to the
1066
+ in-package files found there (or skips cleanly when none are nodes).
1067
+ * ``static com.x.Y.m`` → the owning class file ``com/x/Y.java`` (member
1068
+ ``m`` stripped).
1069
+ * ``com.x.Y`` (normal) → ``com/x/Y.java``.
1070
+
1071
+ ``_resolve_file_candidate`` appends the real ``.java`` suffix once a directory
1072
+ candidate is produced, so package/wildcard dirs resolve to a sibling file.
1073
+ """
1074
+ roots = _java_source_roots(project_root, path_to_node)
1075
+
1076
+ if import_ref.startswith("package "):
1077
+ package = import_ref[len("package "):].strip()
1078
+ return _java_package_dir_candidates(package, roots)
1079
+
1080
+ if import_ref.endswith(".*"):
1081
+ package = import_ref[:-2].strip()
1082
+ return _java_package_dir_candidates(package, roots)
1083
+
1084
+ fqn = import_ref
1085
+ if fqn.startswith("static "):
1086
+ # ``static com.x.Y.member`` → owning class ``com.x.Y`` (drop the member).
1087
+ fqn = fqn[len("static "):].strip()
1088
+ parts = fqn.split(".")
1089
+ if len(parts) >= 2:
1090
+ fqn = ".".join(parts[:-1])
1091
+
1092
+ parts = [part for part in fqn.split(".") if part]
1093
+ if not parts:
1094
+ return []
1095
+ return [(root / Path(*parts)).resolve() for root in roots]
1096
+
1097
+
1098
+ def _java_package_dir_candidates(package: str, roots: list[Path]) -> list[Path]:
1099
+ parts = [part for part in package.split(".") if part]
1100
+ if not parts:
1101
+ return []
1102
+ candidates: list[Path] = []
1103
+ for root in roots:
1104
+ package_dir = (root / Path(*parts)).resolve()
1105
+ # List the package dir's in-tree files as candidates (same-package /
1106
+ # wildcard linkage). ``_resolve_file_candidate`` matches exact node paths,
1107
+ # so we hand it each existing ``.java`` file directly.
1108
+ for node_path in _sorted_java_dir_files(package_dir):
1109
+ candidates.append(node_path)
1110
+ return candidates
1111
+
1112
+
1113
+ def _sorted_java_dir_files(package_dir: Path) -> list[Path]:
1114
+ if not package_dir.is_dir():
1115
+ return []
1116
+ return sorted(
1117
+ child.resolve()
1118
+ for child in package_dir.iterdir()
1119
+ if child.is_file() and child.suffix == ".java"
1120
+ )
1121
+
1122
+
1123
+ #: C/C++ source/header suffixes whose ``#include`` directives carry the intra-tree
1124
+ #: dependency graph. Used to suffix-dispatch the PATH-based resolver branch (DATA,
1125
+ #: not a ``language ==`` core gate). Kept in sync with the ``.h``/``.cc``/… keys of
1126
+ #: ``_SUFFIX_SPECIFIER_EXTRACTORS``.
1127
+ _CPP_SOURCE_SUFFIXES = frozenset({".h", ".hpp", ".hh", ".cc", ".cpp", ".cxx"})
1128
+
1129
+ #: Conventional C/C++ include-root directory names. A quote-form include such as
1130
+ #: ``"fmt/core.h"`` that is not relative to the including file is probed under
1131
+ #: these roots (``include`` covers fmt's ``include/fmt/*.h`` layout). Harvested
1132
+ #: header-node parent dirs are added at resolution time so unconventional roots
1133
+ #: still resolve from DATA.
1134
+ _CPP_INCLUDE_ROOTS = ("include", "src", "inc")
1135
+
1136
+
1137
+ def _cpp_include_candidates(
1138
+ import_ref: str,
1139
+ file_path: Path,
1140
+ path_to_node: dict[Path, str],
1141
+ ) -> list[Path]:
1142
+ """Map a C++ ``#include`` specifier to filesystem candidates (PATH-based).
1143
+
1144
+ The specifier is marker-prefixed by ``_extract_cpp_include_specifiers``:
1145
+
1146
+ * ``angle:vector`` (``#include <vector>``) → system/STL: NO candidates, so no
1147
+ edge forms (mirrors Java ``java.*`` producing no edge).
1148
+ * ``quote:fmt/core.h`` (``#include "fmt/core.h"``) → local header. The path
1149
+ ALREADY has its extension, so there is NO suffix synthesis (the divergence
1150
+ from Java's FQN→path mapping). Resolution order:
1151
+ 1. relative to the including file's directory (``file.parent / spec``);
1152
+ 2. each conventional include root (``include``/``src``/``inc``) under the
1153
+ project tree, located by walking up from the including file;
1154
+ 3. the parent directory of every header node already in the file-set
1155
+ (harvested from DATA), so unconventional include roots still resolve.
1156
+
1157
+ ``_resolve_file_candidate`` matches exact node paths first, so a fully-pathed
1158
+ candidate (``…/include/fmt/core.h``) resolves directly to its node.
1159
+ """
1160
+ if import_ref.startswith(_CPP_ANGLE_SPECIFIER):
1161
+ return []
1162
+ if import_ref.startswith(_CPP_QUOTE_SPECIFIER):
1163
+ spec = import_ref[len(_CPP_QUOTE_SPECIFIER):]
1164
+ else:
1165
+ # Defensive: an unmarked specifier (e.g. a future extractor) is treated
1166
+ # as a quote-form local include.
1167
+ spec = import_ref
1168
+ spec = spec.strip()
1169
+ if not spec:
1170
+ return []
1171
+
1172
+ rel = Path(spec)
1173
+ candidates: list[Path] = []
1174
+ # 1. Relative to the including file's own directory (quote-form's primary
1175
+ # rule — ``#include "lib/b.h"`` next to ``a.cc``).
1176
+ candidates.append((file_path.parent / rel).resolve())
1177
+
1178
+ # 2. Conventional include roots discovered by walking up the including file's
1179
+ # ancestors (so ``include/fmt/core.h`` resolves from ``src/format.cc``).
1180
+ seen: set[Path] = set()
1181
+ for ancestor in [file_path.parent, *file_path.parents]:
1182
+ for root_name in _CPP_INCLUDE_ROOTS:
1183
+ root = ancestor / root_name
1184
+ key = root.resolve()
1185
+ if key in seen:
1186
+ continue
1187
+ seen.add(key)
1188
+ candidates.append((root / rel).resolve())
1189
+
1190
+ # 3. Harvest header-node parent directories from the file-set (DATA), so an
1191
+ # unconventional include root still resolves the trailing path segment(s).
1192
+ for header_dir in _cpp_header_root_dirs(path_to_node):
1193
+ candidates.append((header_dir / rel).resolve())
1194
+
1195
+ return candidates
1196
+
1197
+
1198
+ def _cpp_header_root_dirs(path_to_node: dict[Path, str]) -> list[Path]:
1199
+ """Candidate include roots harvested from header nodes in the file-set.
1200
+
1201
+ For a header node ``…/include/fmt/core.h`` whose include path is ``fmt/core.h``
1202
+ the include ROOT is ``…/include``. We cannot know the split a priori, so we
1203
+ offer each header's parent AND grandparent dirs as roots; the joined
1204
+ candidate only resolves when it matches a real node path, so over-offering is
1205
+ harmless (no false edges).
1206
+ """
1207
+ roots: dict[str, Path] = {}
1208
+ for node_path in path_to_node:
1209
+ if node_path.suffix not in _CPP_HEADER_SUFFIXES:
1210
+ continue
1211
+ for ancestor in (node_path.parent, node_path.parent.parent):
1212
+ resolved = ancestor.resolve()
1213
+ roots[str(resolved)] = resolved
1214
+ return sorted(roots.values(), key=lambda path: len(path.parts), reverse=True)
1215
+
1216
+
1217
+ #: C/C++ header suffixes (subset of ``_CPP_SOURCE_SUFFIXES``) used to harvest
1218
+ #: include-root directories from the node file-set.
1219
+ _CPP_HEADER_SUFFIXES = frozenset({".h", ".hpp", ".hh"})
1220
+
1221
+
984
1222
  def _infer_test_targets(
985
1223
  test_path: Path,
986
1224
  project_root: Path,
@@ -1025,30 +1263,134 @@ def _extract_python_import_specifiers(file_path: Path) -> list[str]:
1025
1263
  return get_extractor("python", "source").extract_import_specifiers(content)
1026
1264
 
1027
1265
 
1266
+ # Regex fallback for Java ``import`` / ``package`` specifiers, used only when the
1267
+ # tree-sitter-java binding is unavailable (otherwise the registry backend's AST
1268
+ # extractor is preferred). Mirrors the SHAPES emitted by
1269
+ # ``treesitter._extract_java_import_specifiers`` (``static`` keyword + ``.*``
1270
+ # wildcard + ``package`` line preserved) so the Java resolver branch is agnostic
1271
+ # to which extractor produced the specifier.
1272
+ _JAVA_IMPORT_SPECIFIER_RE = re.compile(
1273
+ r"^\s*import\s+(static\s+)?([\w.]+(?:\.\*)?)\s*;",
1274
+ re.MULTILINE,
1275
+ )
1276
+ _JAVA_PACKAGE_SPECIFIER_RE = re.compile(r"^\s*package\s+([\w.]+)\s*;", re.MULTILINE)
1277
+
1278
+
1279
+ def _extract_java_import_specifiers(file_path: Path) -> list[str]:
1280
+ """Return raw Java ``import``/``package`` specifiers for DAG edge building.
1281
+
1282
+ Prefers the registry's Java ``source`` backend (tree-sitter-java) so the SAME
1283
+ extraction the scanner uses produces the DAG specifiers; degrades to a regex
1284
+ when the binding is absent. Either way the SHAPES (``static …`` / ``….*`` /
1285
+ ``package …``) match, so ``_resolve_import_target``'s Java branch — dispatched
1286
+ by the ``.java`` suffix (DATA), not a ``language ==`` core branch — resolves
1287
+ them identically. Mirrors ``_extract_python_import_specifiers``.
1288
+ """
1289
+
1290
+ from codd.parsing import get_extractor
1291
+
1292
+ content = file_path.read_text(encoding="utf-8", errors="ignore")
1293
+ specifiers = get_extractor("java", "source").extract_import_specifiers(content)
1294
+ if specifiers:
1295
+ return specifiers
1296
+ # Fallback: tree-sitter-java unavailable → RegexExtractor returned []. Recover
1297
+ # the same specifier shapes from a line regex so Java edges still form.
1298
+ fallback: list[str] = []
1299
+ package_match = _JAVA_PACKAGE_SPECIFIER_RE.search(content)
1300
+ if package_match:
1301
+ fallback.append(f"package {package_match.group(1)}")
1302
+ for static_kw, name in _JAVA_IMPORT_SPECIFIER_RE.findall(content):
1303
+ if name.endswith(".*"):
1304
+ fallback.append(name)
1305
+ elif static_kw:
1306
+ fallback.append(f"static {name}")
1307
+ else:
1308
+ fallback.append(name)
1309
+ return fallback
1310
+
1311
+
1312
+ # C++ ``#include`` directives. The DAG resolver needs to know quote-form
1313
+ # (``"…"`` — local, relative-first) vs angle-form (``<…>`` — system/STL, no
1314
+ # edge), so the extractor preserves that distinction by prefixing a marker:
1315
+ # ``"fmt/core.h"`` → ``quote:fmt/core.h``
1316
+ # ``<vector>`` → ``angle:vector``
1317
+ # Built-in regex (NOT routed through the registry): tree-sitter-cpp is not
1318
+ # installed, and ``RegexExtractor.extract_import_specifiers`` returns ``[]`` for
1319
+ # C++, so a self-contained regex is the source of these specifiers. The marker
1320
+ # is stripped by the resolver's ``.suffix``-dispatched C++ branch.
1321
+ _CPP_QUOTE_SPECIFIER = "quote:"
1322
+ _CPP_ANGLE_SPECIFIER = "angle:"
1323
+ _CPP_INCLUDE_RE = re.compile(
1324
+ r'^\s*#\s*include\s*(?:"([^"]+)"|<([^>]+)>)',
1325
+ re.MULTILINE,
1326
+ )
1327
+
1328
+
1329
+ def _extract_cpp_include_specifiers(file_path: Path) -> list[str]:
1330
+ """Return raw C++ ``#include`` specifiers (quote/angle-marked) for the DAG.
1331
+
1332
+ Mirrors ``_extract_java_import_specifiers`` in role (suffix-dispatched raw
1333
+ specifier extraction) but uses a built-in regex because tree-sitter-cpp is
1334
+ absent. The quote/angle form is carried as a marker prefix so the
1335
+ PATH-based resolver can apply the right rule: quote-form resolves
1336
+ relative-to-file then via include roots; angle-form is system/STL and forms
1337
+ no edge (analogous to Java ``java.*`` producing no edge).
1338
+ """
1339
+
1340
+ content = file_path.read_text(encoding="utf-8", errors="ignore")
1341
+ specifiers: list[str] = []
1342
+ for quote_target, angle_target in _CPP_INCLUDE_RE.findall(content):
1343
+ if quote_target:
1344
+ specifiers.append(f"{_CPP_QUOTE_SPECIFIER}{quote_target}")
1345
+ elif angle_target:
1346
+ specifiers.append(f"{_CPP_ANGLE_SPECIFIER}{angle_target}")
1347
+ return specifiers
1348
+
1349
+
1350
+ #: Suffix → raw-specifier extractor (DATA dispatch). A source file whose language
1351
+ #: carries its intra-tree dependency graph in DOTTED specifiers (Python modules,
1352
+ #: Java FQNs) or ``#include`` directives (C/C++) resolves edges from these,
1353
+ #: instead of the builder's quoted-string ``extract_imports`` seam (JS/TS
1354
+ #: ``from '…'`` / ``require('…')``). Adding a language here is pure data — no
1355
+ #: core ``if language ==`` branch.
1356
+ _SUFFIX_SPECIFIER_EXTRACTORS: dict[str, "Callable[[Path], list[str]]"] = {
1357
+ ".py": _extract_python_import_specifiers,
1358
+ ".java": _extract_java_import_specifiers,
1359
+ ".h": _extract_cpp_include_specifiers,
1360
+ ".hpp": _extract_cpp_include_specifiers,
1361
+ ".hh": _extract_cpp_include_specifiers,
1362
+ ".cc": _extract_cpp_include_specifiers,
1363
+ ".cpp": _extract_cpp_include_specifiers,
1364
+ ".cxx": _extract_cpp_include_specifiers,
1365
+ }
1366
+
1367
+
1028
1368
  def _extract_impl_imports(file_path: Path) -> list[str]:
1029
1369
  """Return raw import specifiers for an implementation file.
1030
1370
 
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``.
1371
+ Python and Java impl files go through their registry-backed specifier
1372
+ extractors (the same path test files use) so impl→impl import edges form for
1373
+ them — the core of the fix. Every other language keeps the existing
1374
+ quoted-specifier extractor (``extract_imports``: JS/TS ``from '…'`` /
1375
+ ``require('…')``), unchanged. Dispatch is by file suffix (DATA).
1036
1376
  """
1037
1377
 
1038
- if file_path.suffix == ".py":
1039
- return _extract_python_import_specifiers(file_path)
1378
+ extractor = _SUFFIX_SPECIFIER_EXTRACTORS.get(file_path.suffix)
1379
+ if extractor is not None:
1380
+ return extractor(file_path)
1040
1381
  return extract_imports(file_path)
1041
1382
 
1042
1383
 
1043
1384
  def _extract_test_imports(file_path: Path) -> list[str]:
1044
1385
  imports = extract_imports(file_path)
1045
- if file_path.suffix != ".py":
1386
+ extractor = _SUFFIX_SPECIFIER_EXTRACTORS.get(file_path.suffix)
1387
+ if extractor is None:
1046
1388
  return imports
1047
1389
 
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)]
1390
+ # Registry-backed dotted specifiers (Python relative imports / Java FQNs)
1391
+ # combined with the quoted-specifier pass above so a polyglot test file keeps
1392
+ # both seams' results.
1393
+ return [*imports, *extractor(file_path)]
1052
1394
 
1053
1395
 
1054
1396
  def _resolve_python_import_target(import_ref: str, project_root: Path, path_to_node: dict[Path, str]) -> str | None:
@@ -1764,8 +2106,11 @@ def _language_for_path(path: Path) -> str:
1764
2106
  ".cs": "csharp",
1765
2107
  ".c": "c",
1766
2108
  ".cpp": "cpp",
2109
+ ".cc": "cpp",
2110
+ ".cxx": "cpp",
1767
2111
  ".h": "cpp",
1768
2112
  ".hpp": "cpp",
2113
+ ".hh": "cpp",
1769
2114
  ".kt": "kotlin",
1770
2115
  ".kts": "kotlin",
1771
2116
  ".swift": "swift",
@@ -0,0 +1,2 @@
1
+ implementation_suffixes: [".c", ".cc", ".cpp", ".cxx", ".h", ".hpp", ".hh"]
2
+ test_suffixes: [".cpp", ".cc", ".cxx", ".test.cpp"]
@@ -305,6 +305,11 @@ def _detect_language(project_root: Path, exclude_patterns: list[str]) -> str:
305
305
  ".py": "python", ".ts": "typescript", ".tsx": "typescript",
306
306
  ".js": "javascript", ".jsx": "javascript",
307
307
  ".java": "java", ".go": "go",
308
+ # C++ (incl. the common .cc/.cxx/.hh/.hpp variants). Listed as DATA so a
309
+ # header-heavy project like fmt (15 headers + .cc sources) is detected as
310
+ # ``cpp`` instead of vacuously falling back to ``python``.
311
+ ".cc": "cpp", ".cpp": "cpp", ".cxx": "cpp",
312
+ ".h": "cpp", ".hpp": "cpp", ".hh": "cpp",
308
313
  }
309
314
 
310
315
  for root, dirs, files in os.walk(project_root):
@@ -323,9 +328,24 @@ def _detect_language(project_root: Path, exclude_patterns: list[str]) -> str:
323
328
  return max(counts, key=counts.get)
324
329
 
325
330
 
331
+ # Conventional JVM (Maven/Gradle) source / test layout. Detected by directory
332
+ # PRESENCE (DATA), not a language gate, so a polyglot repo that happens to carry
333
+ # this layout is handled the same way. ``src`` is deliberately NOT used as a
334
+ # source dir when ``src/main/*`` exists, because the bare ``src`` glob would also
335
+ # sweep in ``src/test/*`` (mixing tests into impl).
336
+ _JVM_SOURCE_LAYOUT_DIRS = ("src/main/java", "src/main/kotlin", "src/main/scala")
337
+ _JVM_TEST_LAYOUT_DIRS = ("src/test/java", "src/test/kotlin", "src/test/scala")
338
+
339
+
326
340
  def _detect_source_dirs(project_root: Path, language: str) -> list[str]:
327
341
  """Auto-detect source directories."""
328
- candidates = ["src", "lib", "app", "pkg", "cmd", "internal"]
342
+ jvm_source = [d for d in _JVM_SOURCE_LAYOUT_DIRS if (project_root / d).is_dir()]
343
+ if jvm_source:
344
+ # Maven/Gradle layout: point at ``src/main/<lang>`` so the impl glob does
345
+ # not also pick up ``src/test/<lang>`` (which _detect_test_dirs claims).
346
+ return jvm_source
347
+
348
+ candidates = ["src", "lib", "app", "pkg", "cmd", "internal", "include"]
329
349
  found = []
330
350
 
331
351
  for c in candidates:
@@ -361,6 +381,12 @@ def _detect_test_dirs(project_root: Path) -> list[str]:
361
381
  for c in candidates:
362
382
  if (project_root / c).is_dir():
363
383
  found.append(c)
384
+ # JVM (Maven/Gradle) layout keeps tests under ``src/test/<lang>`` rather than
385
+ # a top-level ``tests/``. Detected by directory presence (DATA), additive so
386
+ # non-JVM projects are unaffected.
387
+ for d in _JVM_TEST_LAYOUT_DIRS:
388
+ if (project_root / d).is_dir():
389
+ found.append(d)
364
390
  return found
365
391
 
366
392