codd-dev 3.7.3__tar.gz → 3.7.5__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.3 → codd_dev-3.7.5}/PKG-INFO +1 -1
  2. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/__init__.py +1 -1
  3. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/builder.py +402 -11
  4. codd_dev-3.7.5/codd/dag/defaults/cpp_embedded.yaml +2 -0
  5. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/extractor.py +11 -1
  6. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/parsing/regex_strategies.py +305 -0
  7. {codd_dev-3.7.3 → codd_dev-3.7.5}/pyproject.toml +1 -1
  8. codd_dev-3.7.3/codd/dag/defaults/cpp_embedded.yaml +0 -2
  9. {codd_dev-3.7.3 → codd_dev-3.7.5}/.gitignore +0 -0
  10. {codd_dev-3.7.3 → codd_dev-3.7.5}/LICENSE +0 -0
  11. {codd_dev-3.7.3 → codd_dev-3.7.5}/README.md +0 -0
  12. {codd_dev-3.7.3 → codd_dev-3.7.5}/bench_fixture/README.md +0 -0
  13. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/__main__.py +0 -0
  14. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/_git_helper.py +0 -0
  15. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/action_outcome.py +0 -0
  16. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/ai_invoke.py +0 -0
  17. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/ai_patch.py +0 -0
  18. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/artifact_contract.py +0 -0
  19. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/artifact_ids.py +0 -0
  20. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/artifacts/catalog.yaml +0 -0
  21. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/ask_user_question_adapter.py +0 -0
  22. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/assembler.py +0 -0
  23. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/bridge.py +0 -0
  24. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/brownfield/__init__.py +0 -0
  25. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/brownfield/pipeline.py +0 -0
  26. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/capability_completeness.py +0 -0
  27. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/claude_cli.py +0 -0
  28. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/cli.py +0 -0
  29. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/clustering.py +0 -0
  30. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/coherence_adapters.py +0 -0
  31. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/coherence_engine.py +0 -0
  32. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/confidence.py +0 -0
  33. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/config.py +0 -0
  34. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/config_schema.py +0 -0
  35. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/contracts.py +0 -0
  36. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/contracts_registry/__init__.py +0 -0
  37. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/contracts_registry/__main__.py +0 -0
  38. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/contracts_registry/certify.py +0 -0
  39. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/contracts_registry/generate_matrix.py +0 -0
  40. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/contracts_registry/registry.py +0 -0
  41. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/coverage_auditor.py +0 -0
  42. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/coverage_execution_coherence.py +0 -0
  43. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/coverage_metrics.py +0 -0
  44. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/__init__.py +0 -0
  45. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/auto_repair.py +0 -0
  46. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/checks/__init__.py +0 -0
  47. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/checks/_one_to_many_detection.py +0 -0
  48. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/checks/artifact_contract_check.py +0 -0
  49. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/checks/cardinality_coverage.py +0 -0
  50. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/checks/ci_health.py +0 -0
  51. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/checks/dependency_freshness.py +0 -0
  52. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/checks/depends_on_consistency.py +0 -0
  53. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/checks/deployment_completeness.py +0 -0
  54. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/checks/edge_validity.py +0 -0
  55. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/checks/environment_coverage.py +0 -0
  56. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/checks/extraction_diagnostics.py +0 -0
  57. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/checks/implementation_coverage.py +0 -0
  58. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/checks/negative_space.py +0 -0
  59. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/checks/node_completeness.py +0 -0
  60. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/checks/opt_out.py +0 -0
  61. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/checks/resource_flow_coherence.py +0 -0
  62. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/checks/semantic_contract_conflict.py +0 -0
  63. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/checks/stale_evidence.py +0 -0
  64. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/checks/task_completion.py +0 -0
  65. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/checks/transitive_closure.py +0 -0
  66. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/checks/ui_coherence.py +0 -0
  67. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/checks/user_journey_coherence.py +0 -0
  68. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/coverage_axes.py +0 -0
  69. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/defaults/cli.yaml +0 -0
  70. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/defaults/csharp.yaml +0 -0
  71. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/defaults/elixir.yaml +0 -0
  72. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/defaults/generic.yaml +0 -0
  73. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/defaults/iot.yaml +0 -0
  74. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/defaults/java.yaml +0 -0
  75. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/defaults/kotlin.yaml +0 -0
  76. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/defaults/mobile.yaml +0 -0
  77. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/defaults/ruby.yaml +0 -0
  78. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/defaults/rust.yaml +0 -0
  79. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/defaults/scala.yaml +0 -0
  80. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/defaults/swift.yaml +0 -0
  81. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/defaults/test_frameworks.yaml +0 -0
  82. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/defaults/web.yaml +0 -0
  83. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/extractor.py +0 -0
  84. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/impact.py +0 -0
  85. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/materiality.py +0 -0
  86. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/metadata_access.py +0 -0
  87. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/result_status.py +0 -0
  88. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dag/runner.py +0 -0
  89. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/defaults.py +0 -0
  90. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/defaults.yaml +0 -0
  91. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/dependency_lock_coherence.py +0 -0
  92. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deploy_targets/__init__.py +0 -0
  93. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deploy_targets/app_service.py +0 -0
  94. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deploy_targets/base.py +0 -0
  95. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deploy_targets/docker_compose.py +0 -0
  96. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deployer.py +0 -0
  97. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deployment/__init__.py +0 -0
  98. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deployment/checks/__init__.py +0 -0
  99. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deployment/defaults/deploy_targets.yaml +0 -0
  100. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
  101. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deployment/defaults/schema_providers.yaml +0 -0
  102. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deployment/defaults/verification_templates.yaml +0 -0
  103. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deployment/extractor.py +0 -0
  104. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deployment/providers/__init__.py +0 -0
  105. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deployment/providers/ai_command.py +0 -0
  106. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deployment/providers/ai_command_factory.py +0 -0
  107. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deployment/providers/codex_app_server.py +0 -0
  108. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deployment/providers/llm_consideration.py +0 -0
  109. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deployment/providers/schema/__init__.py +0 -0
  110. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deployment/providers/schema/prisma.py +0 -0
  111. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deployment/providers/target/__init__.py +0 -0
  112. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deployment/providers/target/docker_compose.py +0 -0
  113. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deployment/providers/verification/__init__.py +0 -0
  114. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
  115. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deployment/providers/verification/cdp_browser.py +0 -0
  116. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deployment/providers/verification/cdp_engines.py +0 -0
  117. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
  118. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deployment/providers/verification/cdp_wire.py +0 -0
  119. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deployment/providers/verification/curl.py +0 -0
  120. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deployment/providers/verification/form_strategies.py +0 -0
  121. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deployment/providers/verification/means_catalog.py +0 -0
  122. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deployment/providers/verification/playwright.py +0 -0
  123. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deployment/providers/verification/pytest_http.py +0 -0
  124. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/deployment/providers/verification/vitest.py +0 -0
  125. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/design_md.py +0 -0
  126. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/diff/__init__.py +0 -0
  127. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/diff/apply.py +0 -0
  128. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/diff/engine.py +0 -0
  129. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/diff/persistence.py +0 -0
  130. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/diff/templates/diff_prompt.md +0 -0
  131. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/discovery.py +0 -0
  132. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/drift.py +0 -0
  133. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/e2e_contract_coherence.py +0 -0
  134. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/e2e_extractor.py +0 -0
  135. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/e2e_generator.py +0 -0
  136. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/e2e_harness.py +0 -0
  137. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/e2e_runner.py +0 -0
  138. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/elicit/__init__.py +0 -0
  139. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/elicit/apply.py +0 -0
  140. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/elicit/engine.py +0 -0
  141. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/elicit/finding.py +0 -0
  142. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/elicit/formatters/__init__.py +0 -0
  143. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/elicit/formatters/base.py +0 -0
  144. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/elicit/formatters/interactive.py +0 -0
  145. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/elicit/formatters/json_fmt.py +0 -0
  146. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/elicit/formatters/md.py +0 -0
  147. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/elicit/gap_to_ask.py +0 -0
  148. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/elicit/lexicon_loader.py +0 -0
  149. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/elicit/persistence.py +0 -0
  150. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/elicit/promote.py +0 -0
  151. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/elicit/routing.py +0 -0
  152. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
  153. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/env_refs.py +0 -0
  154. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/extract_ai.py +0 -0
  155. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/extract_paths.py +0 -0
  156. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/fix/__init__.py +0 -0
  157. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/fix/candidate_selector.py +0 -0
  158. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/fix/design_updater.py +0 -0
  159. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/fix/impact_planner.py +0 -0
  160. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/fix/impl_propagation.py +0 -0
  161. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/fix/interactive_prompt.py +0 -0
  162. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/fix/phenomenon_fixer.py +0 -0
  163. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/fix/phenomenon_parser.py +0 -0
  164. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/fix/risk_classifier.py +0 -0
  165. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/fix/templates/clarification_question.txt +0 -0
  166. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/fix/templates/design_update.txt +0 -0
  167. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/fix/templates/impl_update.txt +0 -0
  168. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/fix/templates/phenomenon_parse.txt +0 -0
  169. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/fix/templates/risk_assessment.txt +0 -0
  170. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/fix/templates_loader.py +0 -0
  171. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/fixer.py +0 -0
  172. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/fixup_drift.py +0 -0
  173. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/fixup_drift_strategies/__init__.py +0 -0
  174. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
  175. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
  176. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/fixup_drift_strategies/url_drift.py +0 -0
  177. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/frontmatter.py +0 -0
  178. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/generator.py +0 -0
  179. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/git_evidence.py +0 -0
  180. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/graph.py +0 -0
  181. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/greenfield/__init__.py +0 -0
  182. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/greenfield/pipeline.py +0 -0
  183. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/hitl_session.py +0 -0
  184. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/hooks/__init__.py +0 -0
  185. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/hooks/pre-commit +0 -0
  186. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
  187. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/hooks/recipes/claude_settings_example.json +0 -0
  188. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/hooks/recipes/codex_hook.sh +0 -0
  189. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/hooks/recipes/git_post_commit.sh +0 -0
  190. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/hooks/recipes/git_pre_commit.sh +0 -0
  191. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/iac_nfr.py +0 -0
  192. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/implement_oracle.py +0 -0
  193. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/implement_oracle_scope.py +0 -0
  194. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/implement_oracle_types.py +0 -0
  195. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/implementer/__init__.py +0 -0
  196. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/implementer/chunked_runner.py +0 -0
  197. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/implementer/typecheck_loop.py +0 -0
  198. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/implementer.py +0 -0
  199. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/import_coherence.py +0 -0
  200. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/inheritance.py +0 -0
  201. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/init/__init__.py +0 -0
  202. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/init/lexicon_suggest.py +0 -0
  203. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/init/llm_lexicon_suggester.py +0 -0
  204. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/init/stack_detector.py +0 -0
  205. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/knowledge_fetcher.py +0 -0
  206. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/languages/__init__.py +0 -0
  207. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/languages/adapters/__init__.py +0 -0
  208. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/languages/adapters/implement_oracle.py +0 -0
  209. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/languages/adapters/oracle_go.py +0 -0
  210. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/languages/adapters/oracle_python.py +0 -0
  211. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/languages/adapters/oracle_typescript.py +0 -0
  212. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/languages/adapters/runner_report.py +0 -0
  213. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/languages/builtin_adapters.py +0 -0
  214. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/languages/compat.py +0 -0
  215. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/languages/contract.py +0 -0
  216. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/languages/loader.py +0 -0
  217. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/languages/oracle_executor.py +0 -0
  218. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/languages/path_planner.py +0 -0
  219. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/languages/profile.py +0 -0
  220. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/languages/profiles/go.yaml +0 -0
  221. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/languages/profiles/python.yaml +0 -0
  222. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/languages/profiles/typescript.yaml +0 -0
  223. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/languages/registry.py +0 -0
  224. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/languages/verify_executor.py +0 -0
  225. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/languages/verify_plan.py +0 -0
  226. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/lexicon.py +0 -0
  227. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/lexicon_cli/__init__.py +0 -0
  228. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/lexicon_cli/formatters/__init__.py +0 -0
  229. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/lexicon_cli/formatters/html.py +0 -0
  230. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
  231. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/lexicon_cli/formatters/md.py +0 -0
  232. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/lexicon_cli/inspector.py +0 -0
  233. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/lexicon_cli/manager.py +0 -0
  234. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/lexicon_cli/reporter.py +0 -0
  235. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/lexicon_cli/threshold.py +0 -0
  236. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/llm/__init__.py +0 -0
  237. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/llm/approval.py +0 -0
  238. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/llm/best_practice_augmenter.py +0 -0
  239. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/llm/criteria_expander.py +0 -0
  240. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/llm/design_doc_extractor.py +0 -0
  241. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/llm/impl_step_deriver.py +0 -0
  242. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/llm/means_catalog_loader.py +0 -0
  243. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/llm/parser.py +0 -0
  244. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/llm/plan_deriver.py +0 -0
  245. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/llm/prompt_builder.py +0 -0
  246. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/llm/strategy_validator.py +0 -0
  247. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/llm/templates/best_practice_augment_meta.md +0 -0
  248. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/llm/templates/criteria_expand_meta.md +0 -0
  249. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/llm/templates/design_doc_extract_meta.md +0 -0
  250. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/llm/templates/impl_step_derive_meta.md +0 -0
  251. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
  252. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/llm/templates/meta_instruction.md +0 -0
  253. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/llm/templates/plan_derive_meta.md +0 -0
  254. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/llm/templates/verification_means_catalog.yaml +0 -0
  255. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/mcp_server.py +0 -0
  256. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/measure.py +0 -0
  257. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/operational_e2e_audit.py +0 -0
  258. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/operations_derive.py +0 -0
  259. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/parsing/__init__.py +0 -0
  260. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/parsing/_shared.py +0 -0
  261. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/parsing/api_specs.py +0 -0
  262. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/parsing/extractor_registry.py +0 -0
  263. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/parsing/filesystem_routes.py +0 -0
  264. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/parsing/iac.py +0 -0
  265. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/parsing/python_ast.py +0 -0
  266. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/parsing/schemas.py +0 -0
  267. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/parsing/tests_builddeps.py +0 -0
  268. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/parsing/treesitter.py +0 -0
  269. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/path_safety.py +0 -0
  270. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/planner.py +0 -0
  271. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/policy.py +0 -0
  272. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/preflight/__init__.py +0 -0
  273. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/preflight/defaults/cli.yaml +0 -0
  274. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/preflight/defaults/generic.yaml +0 -0
  275. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/preflight/defaults/iot.yaml +0 -0
  276. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/preflight/defaults/mobile.yaml +0 -0
  277. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/preflight/defaults/web.yaml +0 -0
  278. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/project_types.py +0 -0
  279. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/propagate.py +0 -0
  280. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/propagation_common.py +0 -0
  281. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/propagator.py +0 -0
  282. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/reconciliation_ledger.py +0 -0
  283. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/reference_resolution.py +0 -0
  284. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/registry.py +0 -0
  285. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/repair/__init__.py +0 -0
  286. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/repair/approval_repair.py +0 -0
  287. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/repair/auto_scope_guard.py +0 -0
  288. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/repair/engine.py +0 -0
  289. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/repair/git_patcher.py +0 -0
  290. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/repair/history.py +0 -0
  291. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/repair/llm_repair_engine.py +0 -0
  292. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/repair/loop.py +0 -0
  293. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/repair/primary_picker.py +0 -0
  294. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/repair/proof_breaks.py +0 -0
  295. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/repair/repair_result.py +0 -0
  296. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/repair/repairability_classifier.py +0 -0
  297. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/repair/schema.py +0 -0
  298. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/repair/templates/analyze_meta.md +0 -0
  299. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/repair/templates/propose_meta.md +0 -0
  300. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/repair/templates/repair_strategy_meta.md +0 -0
  301. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/repair/templates/repairability_meta.md +0 -0
  302. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/repair/test_failure_attribution.py +0 -0
  303. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/repair/verify_runner.py +0 -0
  304. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/repair_slice.py +0 -0
  305. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/require.py +0 -0
  306. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/require_plugins.py +0 -0
  307. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/require_propagate.py +0 -0
  308. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/required_artifacts/defaults/cli.yaml +0 -0
  309. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/required_artifacts/defaults/generic.yaml +0 -0
  310. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/required_artifacts/defaults/iot.yaml +0 -0
  311. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/required_artifacts/defaults/mobile.yaml +0 -0
  312. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/required_artifacts/defaults/web.yaml +0 -0
  313. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/required_artifacts_deriver.py +0 -0
  314. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/requirement_completeness/defaults/cli.yaml +0 -0
  315. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/requirement_completeness/defaults/generic.yaml +0 -0
  316. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/requirement_completeness/defaults/iot.yaml +0 -0
  317. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
  318. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/requirement_completeness/defaults/web.yaml +0 -0
  319. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/requirement_completeness_auditor.py +0 -0
  320. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/requirement_reconciliation.py +0 -0
  321. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/requirements_meta.py +0 -0
  322. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/restoration_report.py +0 -0
  323. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/restore.py +0 -0
  324. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/routes_extractor.py +0 -0
  325. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/runtime_smoke/__init__.py +0 -0
  326. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/runtime_smoke/checks.py +0 -0
  327. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/runtime_smoke/config.py +0 -0
  328. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/runtime_smoke/report.py +0 -0
  329. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/runtime_smoke/runner.py +0 -0
  330. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/scanner.py +0 -0
  331. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/schema_refs.py +0 -0
  332. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/screen_flow_validator.py +0 -0
  333. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/screen_transition_extractor.py +0 -0
  334. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/screen_transitions/defaults.yaml +0 -0
  335. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/skills_cli/__init__.py +0 -0
  336. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/skills_cli/discovery.py +0 -0
  337. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/skills_cli/manager.py +0 -0
  338. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/skills_cli/paths.py +0 -0
  339. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/stack/__init__.py +0 -0
  340. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/stack/adapters/__init__.py +0 -0
  341. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/stack/adapters/_base.py +0 -0
  342. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/stack/adapters/nextjs.py +0 -0
  343. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/stack/adapters/playwright.py +0 -0
  344. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/stack/adapters/prisma.py +0 -0
  345. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/stack/command_authenticity.py +0 -0
  346. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/stack/command_override.py +0 -0
  347. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/stack/command_plan.py +0 -0
  348. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/stack/compose.py +0 -0
  349. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/stack/loader.py +0 -0
  350. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/stack/lock.py +0 -0
  351. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/stack/obligations.py +0 -0
  352. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/stack/profile.py +0 -0
  353. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/stack/profiles/addons/playwright.yaml +0 -0
  354. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/stack/profiles/addons/prisma.yaml +0 -0
  355. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/stack/profiles/frameworks/nextjs.yaml +0 -0
  356. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/stack/project.py +0 -0
  357. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/stack/registry.py +0 -0
  358. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/stack/replacement_proof.py +0 -0
  359. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/stack/resolve.py +0 -0
  360. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/surface_reconciliation.py +0 -0
  361. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/synth.py +0 -0
  362. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/templates/codd.yaml.tmpl +0 -0
  363. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/templates/conventions.yaml.tmpl +0 -0
  364. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/templates/data_dependencies.yaml.tmpl +0 -0
  365. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/templates/doc_links.yaml.tmpl +0 -0
  366. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/templates/extract_ai_prompt_baseline.md +0 -0
  367. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/templates/extracted/api-contract.md.j2 +0 -0
  368. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
  369. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/templates/extracted/module-detail.md.j2 +0 -0
  370. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/templates/extracted/schema-design.md.j2 +0 -0
  371. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/templates/extracted/system-context.md.j2 +0 -0
  372. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/templates/gitignore.tmpl +0 -0
  373. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/templates/lexicon_questions.md +0 -0
  374. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/templates/lexicon_schema.yaml +0 -0
  375. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/templates/overrides.yaml.tmpl +0 -0
  376. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/test_detection.py +0 -0
  377. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/test_import_coherence.py +0 -0
  378. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/traceability.py +0 -0
  379. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/validator.py +0 -0
  380. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/vb_marker_authenticity.py +0 -0
  381. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/vb_rerun_scope.py +0 -0
  382. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/verifiable_behavior_audit.py +0 -0
  383. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/watch/__init__.py +0 -0
  384. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/watch/events.py +0 -0
  385. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/watch/propagation_log.py +0 -0
  386. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/watch/propagation_pipeline.py +0 -0
  387. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/watch/test_runner.py +0 -0
  388. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/watch/watcher.py +0 -0
  389. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd/wiring.py +0 -0
  390. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
  391. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
  392. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
  393. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
  394. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
  395. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
  396. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
  397. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
  398. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
  399. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
  400. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
  401. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
  402. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
  403. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
  404. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
  405. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
  406. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
  407. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
  408. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
  409. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
  410. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
  411. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
  412. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
  413. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
  414. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
  415. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
  416. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
  417. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
  418. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
  419. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
  420. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
  421. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
  422. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
  423. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
  424. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
  425. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
  426. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
  427. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
  428. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
  429. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
  430. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
  431. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
  432. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
  433. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
  434. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
  435. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
  436. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
  437. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
  438. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
  439. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
  440. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
  441. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
  442. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
  443. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
  444. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
  445. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
  446. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
  447. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
  448. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
  449. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
  450. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
  451. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
  452. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
  453. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
  454. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
  455. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
  456. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
  457. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
  458. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
  459. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
  460. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
  461. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
  462. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
  463. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
  464. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
  465. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
  466. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
  467. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
  468. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
  469. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
  470. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
  471. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
  472. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
  473. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
  474. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
  475. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
  476. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
  477. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
  478. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
  479. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
  480. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
  481. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
  482. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
  483. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
  484. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
  485. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
  486. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
  487. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
  488. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
  489. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
  490. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
  491. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
  492. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
  493. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
  494. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
  495. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
  496. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
  497. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
  498. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
  499. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
  500. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
  501. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
  502. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
  503. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
  504. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
  505. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
  506. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
  507. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
  508. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
  509. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
  510. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
  511. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
  512. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
  513. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
  514. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
  515. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
  516. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
  517. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
  518. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
  519. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
  520. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
  521. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
  522. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
  523. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
  524. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
  525. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
  526. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
  527. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
  528. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
  529. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
  530. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
  531. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
  532. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
  533. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
  534. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
  535. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
  536. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
  537. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
  538. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
  539. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
  540. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
  541. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
  542. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
  543. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
  544. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
  545. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
  546. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
  547. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
  548. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
  549. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
  550. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
  551. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
  552. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
  553. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
  554. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
  555. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
  556. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
  557. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
  558. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
  559. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
  560. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
  561. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
  562. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
  563. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
  564. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
  565. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
  566. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
  567. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
  568. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
  569. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
  570. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
  571. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
  572. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
  573. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
  574. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
  575. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
  576. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
  577. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
  578. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
  579. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
  580. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
  581. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
  582. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
  583. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
  584. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
  585. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
  586. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
  587. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
  588. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
  589. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
  590. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
  591. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
  592. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
  593. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
  594. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
  595. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
  596. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
  597. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
  598. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
  599. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
  600. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
  601. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
  602. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
  603. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
  604. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
  605. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
  606. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
  607. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
  608. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
  609. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
  610. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
  611. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
  612. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
  613. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
  614. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
  615. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
  616. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
  617. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
  618. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
  619. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
  620. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
  621. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
  622. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
  623. {codd_dev-3.7.3 → codd_dev-3.7.5}/codd_plugins/stack_map.yaml +0 -0
  624. {codd_dev-3.7.3 → codd_dev-3.7.5}/docs/cookbook/cdp_browser/README.md +0 -0
  625. {codd_dev-3.7.3 → codd_dev-3.7.5}/docs/cookbook/presentation_aggregation/README.md +0 -0
  626. {codd_dev-3.7.3 → codd_dev-3.7.5}/docs/requirements/README.md +0 -0
  627. {codd_dev-3.7.3 → codd_dev-3.7.5}/examples/README.md +0 -0
  628. {codd_dev-3.7.3 → codd_dev-3.7.5}/skills/codd-assemble/SKILL.md +0 -0
  629. {codd_dev-3.7.3 → codd_dev-3.7.5}/skills/codd-evolve/SKILL.md +0 -0
  630. {codd_dev-3.7.3 → codd_dev-3.7.5}/skills/codd-generate/SKILL.md +0 -0
  631. {codd_dev-3.7.3 → codd_dev-3.7.5}/skills/codd-greenfield/SKILL.md +0 -0
  632. {codd_dev-3.7.3 → codd_dev-3.7.5}/skills/codd-impact/SKILL.md +0 -0
  633. {codd_dev-3.7.3 → codd_dev-3.7.5}/skills/codd-init/SKILL.md +0 -0
  634. {codd_dev-3.7.3 → codd_dev-3.7.5}/skills/codd-propagate/SKILL.md +0 -0
  635. {codd_dev-3.7.3 → codd_dev-3.7.5}/skills/codd-restore/SKILL.md +0 -0
  636. {codd_dev-3.7.3 → codd_dev-3.7.5}/skills/codd-scan/SKILL.md +0 -0
  637. {codd_dev-3.7.3 → codd_dev-3.7.5}/skills/codd-validate/SKILL.md +0 -0
  638. {codd_dev-3.7.3 → codd_dev-3.7.5}/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.3
3
+ Version: 3.7.5
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.3"
3
+ __version__ = "3.7.5"
@@ -372,9 +372,11 @@ def _add_import_edges(
372
372
  for node_id, file_path in impl_nodes.items():
373
373
  imports = dag.nodes[node_id].attributes.get("imports", [])
374
374
  for import_ref in imports:
375
- target_id = _resolve_import_target(import_ref, file_path, project_root, path_to_node, aliases)
376
- if target_id and target_id != node_id:
377
- dag.add_edge(Edge(from_id=node_id, to_id=target_id, kind="imports"))
375
+ for target_id in _resolve_import_targets(
376
+ import_ref, file_path, project_root, path_to_node, aliases
377
+ ):
378
+ if target_id and target_id != node_id:
379
+ dag.add_edge(Edge(from_id=node_id, to_id=target_id, kind="imports"))
378
380
 
379
381
 
380
382
  def _add_tested_by_edges(
@@ -904,6 +906,29 @@ def _resolve_design_dependency(
904
906
  return None
905
907
 
906
908
 
909
+ def _resolve_import_targets(
910
+ import_ref: str,
911
+ file_path: Path,
912
+ project_root: Path,
913
+ path_to_node: dict[Path, str],
914
+ aliases: dict[str, list[str]],
915
+ ) -> list[str]:
916
+ """Resolve one import specifier to ALL its in-tree target node ids.
917
+
918
+ Most languages have a single resolved target per specifier (Python module,
919
+ Java FQN, C++ ``#include`` path), so this delegates to the singular
920
+ ``_resolve_import_target`` and wraps its result. C# is the one intrinsically
921
+ MULTI-target language: a ``using`` names a namespace that many files declare,
922
+ so its ``.cs``-suffix branch resolves via the namespace reverse-index and may
923
+ return several node ids. Dispatch is by the importing file's suffix (DATA),
924
+ not a ``language ==`` core gate — adding a multi-target language is data.
925
+ """
926
+ if file_path.suffix == ".cs":
927
+ return _resolve_csharp_import_targets(import_ref, file_path, path_to_node)
928
+ single = _resolve_import_target(import_ref, file_path, project_root, path_to_node, aliases)
929
+ return [single] if single else []
930
+
931
+
907
932
  def _resolve_import_target(
908
933
  import_ref: str,
909
934
  file_path: Path,
@@ -924,6 +949,19 @@ def _resolve_import_target(
924
949
  return resolved
925
950
  return None
926
951
 
952
+ # C++ ``#include`` specifiers are dispatched by the IMPORTING file's C/C++
953
+ # suffix (DATA, not a ``language ==`` core branch). Resolution is PATH-based
954
+ # (the specifier already carries its extension, e.g. ``fmt/core.h``), the key
955
+ # divergence from Java's FQN→path synthesis: a quote-form include resolves
956
+ # relative-to-file first, then via include roots; an angle-form include is
957
+ # system/STL and produces no edge.
958
+ if file_path.suffix in _CPP_SOURCE_SUFFIXES:
959
+ for candidate in _cpp_include_candidates(import_ref, file_path, path_to_node):
960
+ resolved = _resolve_file_candidate(candidate, path_to_node)
961
+ if resolved:
962
+ return resolved
963
+ return None
964
+
927
965
  candidates: list[Path] = []
928
966
  if _is_js_relative_specifier(import_ref):
929
967
  # JS/TS relative: ``./foo`` / ``../foo`` — resolve against the file dir
@@ -1107,6 +1145,228 @@ def _sorted_java_dir_files(package_dir: Path) -> list[Path]:
1107
1145
  )
1108
1146
 
1109
1147
 
1148
+ #: C/C++ source/header suffixes whose ``#include`` directives carry the intra-tree
1149
+ #: dependency graph. Used to suffix-dispatch the PATH-based resolver branch (DATA,
1150
+ #: not a ``language ==`` core gate). Kept in sync with the ``.h``/``.cc``/… keys of
1151
+ #: ``_SUFFIX_SPECIFIER_EXTRACTORS``.
1152
+ _CPP_SOURCE_SUFFIXES = frozenset({".h", ".hpp", ".hh", ".cc", ".cpp", ".cxx"})
1153
+
1154
+ #: Conventional C/C++ include-root directory names. A quote-form include such as
1155
+ #: ``"fmt/core.h"`` that is not relative to the including file is probed under
1156
+ #: these roots (``include`` covers fmt's ``include/fmt/*.h`` layout). Harvested
1157
+ #: header-node parent dirs are added at resolution time so unconventional roots
1158
+ #: still resolve from DATA.
1159
+ _CPP_INCLUDE_ROOTS = ("include", "src", "inc")
1160
+
1161
+
1162
+ def _cpp_include_candidates(
1163
+ import_ref: str,
1164
+ file_path: Path,
1165
+ path_to_node: dict[Path, str],
1166
+ ) -> list[Path]:
1167
+ """Map a C++ ``#include`` specifier to filesystem candidates (PATH-based).
1168
+
1169
+ The specifier is marker-prefixed by ``_extract_cpp_include_specifiers``:
1170
+
1171
+ * ``angle:vector`` (``#include <vector>``) → system/STL: NO candidates, so no
1172
+ edge forms (mirrors Java ``java.*`` producing no edge).
1173
+ * ``quote:fmt/core.h`` (``#include "fmt/core.h"``) → local header. The path
1174
+ ALREADY has its extension, so there is NO suffix synthesis (the divergence
1175
+ from Java's FQN→path mapping). Resolution order:
1176
+ 1. relative to the including file's directory (``file.parent / spec``);
1177
+ 2. each conventional include root (``include``/``src``/``inc``) under the
1178
+ project tree, located by walking up from the including file;
1179
+ 3. the parent directory of every header node already in the file-set
1180
+ (harvested from DATA), so unconventional include roots still resolve.
1181
+
1182
+ ``_resolve_file_candidate`` matches exact node paths first, so a fully-pathed
1183
+ candidate (``…/include/fmt/core.h``) resolves directly to its node.
1184
+ """
1185
+ if import_ref.startswith(_CPP_ANGLE_SPECIFIER):
1186
+ return []
1187
+ if import_ref.startswith(_CPP_QUOTE_SPECIFIER):
1188
+ spec = import_ref[len(_CPP_QUOTE_SPECIFIER):]
1189
+ else:
1190
+ # Defensive: an unmarked specifier (e.g. a future extractor) is treated
1191
+ # as a quote-form local include.
1192
+ spec = import_ref
1193
+ spec = spec.strip()
1194
+ if not spec:
1195
+ return []
1196
+
1197
+ rel = Path(spec)
1198
+ candidates: list[Path] = []
1199
+ # 1. Relative to the including file's own directory (quote-form's primary
1200
+ # rule — ``#include "lib/b.h"`` next to ``a.cc``).
1201
+ candidates.append((file_path.parent / rel).resolve())
1202
+
1203
+ # 2. Conventional include roots discovered by walking up the including file's
1204
+ # ancestors (so ``include/fmt/core.h`` resolves from ``src/format.cc``).
1205
+ seen: set[Path] = set()
1206
+ for ancestor in [file_path.parent, *file_path.parents]:
1207
+ for root_name in _CPP_INCLUDE_ROOTS:
1208
+ root = ancestor / root_name
1209
+ key = root.resolve()
1210
+ if key in seen:
1211
+ continue
1212
+ seen.add(key)
1213
+ candidates.append((root / rel).resolve())
1214
+
1215
+ # 3. Harvest header-node parent directories from the file-set (DATA), so an
1216
+ # unconventional include root still resolves the trailing path segment(s).
1217
+ for header_dir in _cpp_header_root_dirs(path_to_node):
1218
+ candidates.append((header_dir / rel).resolve())
1219
+
1220
+ return candidates
1221
+
1222
+
1223
+ def _cpp_header_root_dirs(path_to_node: dict[Path, str]) -> list[Path]:
1224
+ """Candidate include roots harvested from header nodes in the file-set.
1225
+
1226
+ For a header node ``…/include/fmt/core.h`` whose include path is ``fmt/core.h``
1227
+ the include ROOT is ``…/include``. We cannot know the split a priori, so we
1228
+ offer each header's parent AND grandparent dirs as roots; the joined
1229
+ candidate only resolves when it matches a real node path, so over-offering is
1230
+ harmless (no false edges).
1231
+ """
1232
+ roots: dict[str, Path] = {}
1233
+ for node_path in path_to_node:
1234
+ if node_path.suffix not in _CPP_HEADER_SUFFIXES:
1235
+ continue
1236
+ for ancestor in (node_path.parent, node_path.parent.parent):
1237
+ resolved = ancestor.resolve()
1238
+ roots[str(resolved)] = resolved
1239
+ return sorted(roots.values(), key=lambda path: len(path.parts), reverse=True)
1240
+
1241
+
1242
+ #: C/C++ header suffixes (subset of ``_CPP_SOURCE_SUFFIXES``) used to harvest
1243
+ #: include-root directories from the node file-set.
1244
+ _CPP_HEADER_SUFFIXES = frozenset({".h", ".hpp", ".hh"})
1245
+
1246
+
1247
+ # ─────────────────────────────────────────────────────────────────────────────
1248
+ # C# NAMESPACE reverse-index resolution (the novel mechanism for this language).
1249
+ #
1250
+ # C# is the third structural model after Java (FQN→path synthesis) and C++
1251
+ # (PATH-based include). The divergence: a C# ``using`` names a NAMESPACE, and a
1252
+ # namespace is NOT directory-tied — ``namespace Dapper;`` is declared by many
1253
+ # files spread across different directories (Dapper/, Dapper.SqlBuilder/, …).
1254
+ # There is no path to synthesize. So resolution is two-phase:
1255
+ # (1) a first pass over the file-set builds a namespace→declaring-files reverse
1256
+ # index (each .cs file's declared ``namespace`` lines → that file);
1257
+ # (2) a ``using Dapper.X`` resolves to the files declaring ``namespace
1258
+ # Dapper.X`` (EXACT namespace match), which is a SET of files, not one.
1259
+ # Because one ``using`` legitimately depends on every file of the target
1260
+ # namespace, this is the one language whose resolution is intrinsically
1261
+ # multi-target (handled by ``_resolve_import_targets`` plural).
1262
+ # ─────────────────────────────────────────────────────────────────────────────
1263
+
1264
+ #: C# namespace declaration — both file-scoped (``namespace X.Y;``) and block
1265
+ #: (``namespace X.Y {`` / ``namespace X.Y`` then ``{`` on the next line) forms.
1266
+ #: Mirrors ``regex_strategies._CSHARP_NAMESPACE_RE``.
1267
+ _CSHARP_NAMESPACE_DECL_RE = re.compile(
1268
+ r'^\s*namespace\s+([\w.]+)\s*[;{]?\s*$',
1269
+ re.MULTILINE,
1270
+ )
1271
+
1272
+ #: Cap on how many files a SINGLE ``using`` may resolve to, so a using of a very
1273
+ #: large namespace cannot explode the edge count pathologically. When a namespace
1274
+ #: is declared by more files than this, we keep the edges deterministic (sorted)
1275
+ #: and truncate; the WARN-level reachability layer still sees a connected node.
1276
+ #: Generous enough that real same-namespace fan-out (Dapper declares its core
1277
+ #: namespace across ~dozens of files) is preserved.
1278
+ _CSHARP_NAMESPACE_FANOUT_CAP = 64
1279
+
1280
+ #: Process-lifetime cache of the namespace reverse-index, keyed by the IDENTITY +
1281
+ #: size of the ``path_to_node`` map. ``_add_import_edges`` / ``_add_tested_by_edges``
1282
+ #: each build a fresh ``path_to_node`` and reuse it across every import in their
1283
+ #: loop, so caching by ``id()`` (guarded by ``len()`` against id-reuse after GC)
1284
+ #: builds the index ONCE per DAG-build phase instead of per-using.
1285
+ _CSHARP_NS_INDEX_CACHE: dict[tuple[int, int], dict[str, list[str]]] = {}
1286
+
1287
+
1288
+ def _csharp_namespace_index(path_to_node: dict[Path, str]) -> dict[str, list[str]]:
1289
+ """Return the namespace→declaring-node-ids reverse-index (built once, cached).
1290
+
1291
+ First pass over the .cs file-set: every ``namespace X.Y`` declared in a file
1292
+ (file-scoped OR block form) maps that namespace to the file's node id. A file
1293
+ may declare multiple namespaces; a namespace may be declared by many files
1294
+ (the whole point — namespaces are not directory-tied). Node-id lists are kept
1295
+ sorted for deterministic edge output.
1296
+ """
1297
+ key = (id(path_to_node), len(path_to_node))
1298
+ cached = _CSHARP_NS_INDEX_CACHE.get(key)
1299
+ if cached is not None:
1300
+ return cached
1301
+
1302
+ index: dict[str, set[str]] = {}
1303
+ for file_path, node_id in path_to_node.items():
1304
+ if file_path.suffix != ".cs":
1305
+ continue
1306
+ try:
1307
+ content = file_path.read_text(encoding="utf-8", errors="ignore")
1308
+ except OSError:
1309
+ continue
1310
+ for namespace in _CSHARP_NAMESPACE_DECL_RE.findall(content):
1311
+ index.setdefault(namespace, set()).add(node_id)
1312
+
1313
+ materialized = {ns: sorted(ids) for ns, ids in index.items()}
1314
+ _CSHARP_NS_INDEX_CACHE[key] = materialized
1315
+ return materialized
1316
+
1317
+
1318
+ def _csharp_using_namespaces(import_ref: str) -> list[str]:
1319
+ """Candidate namespaces to look up for one ``using`` specifier (most-specific first).
1320
+
1321
+ * plain / global / alias ``using Dapper.X`` → ``["Dapper.X"]`` (exact).
1322
+ * ``static Dapper.SqlMapper`` → ``["Dapper.SqlMapper", "Dapper"]``: a
1323
+ ``using static`` targets a TYPE (``Dapper.SqlMapper``), whose declaring file
1324
+ lives in the type's OWNING namespace (``Dapper``). We try the full path as a
1325
+ namespace first (harmless if it is not one — just no match), then the parent
1326
+ namespace (drop the type segment), which is the real resolution.
1327
+ """
1328
+ spec = import_ref
1329
+ is_static = spec.startswith(_CSHARP_STATIC_SPECIFIER)
1330
+ if is_static:
1331
+ spec = spec[len(_CSHARP_STATIC_SPECIFIER):].strip()
1332
+ if not spec:
1333
+ return []
1334
+ candidates = [spec]
1335
+ if is_static:
1336
+ parent = spec.rsplit(".", 1)[0] if "." in spec else ""
1337
+ if parent and parent != spec:
1338
+ candidates.append(parent)
1339
+ return candidates
1340
+
1341
+
1342
+ def _resolve_csharp_import_targets(
1343
+ import_ref: str,
1344
+ file_path: Path,
1345
+ path_to_node: dict[Path, str],
1346
+ ) -> list[str]:
1347
+ """Resolve one C# ``using`` to the node ids declaring its namespace (EXACT).
1348
+
1349
+ Sub-namespace handling: resolution is by EXACT namespace match only. A
1350
+ ``using Dapper`` resolves to files declaring exactly ``namespace Dapper`` — it
1351
+ does NOT transitively pull in ``Dapper.Tests`` / ``Dapper.SqlBuilder`` files.
1352
+ This is both correct (a parent-namespace using does not import child
1353
+ namespaces in C#; each child needs its own ``using``) and the primary
1354
+ explosion guard (no namespace-prefix fan-out). For a ``using static`` the
1355
+ type's owning namespace is the fallback candidate (see
1356
+ ``_csharp_using_namespaces``); the first candidate that matches the index
1357
+ wins, so a static import does not double-count.
1358
+
1359
+ Secondary explosion guard: a single using that matches a very large namespace
1360
+ is truncated at ``_CSHARP_NAMESPACE_FANOUT_CAP`` (deterministic, sorted).
1361
+ """
1362
+ index = _csharp_namespace_index(path_to_node)
1363
+ for namespace in _csharp_using_namespaces(import_ref):
1364
+ node_ids = index.get(namespace)
1365
+ if node_ids:
1366
+ return node_ids[:_CSHARP_NAMESPACE_FANOUT_CAP]
1367
+ return []
1368
+
1369
+
1110
1370
  def _infer_test_targets(
1111
1371
  test_path: Path,
1112
1372
  project_root: Path,
@@ -1116,11 +1376,15 @@ def _infer_test_targets(
1116
1376
  targets: set[str] = set()
1117
1377
 
1118
1378
  for import_ref in _extract_test_imports(test_path):
1119
- target_id = _resolve_import_target(import_ref, test_path, project_root, path_to_node, aliases)
1120
- if not target_id and "." in import_ref and not import_ref.startswith("."):
1121
- target_id = _resolve_python_import_target(import_ref, project_root, path_to_node)
1122
- if target_id:
1123
- targets.add(target_id)
1379
+ resolved = _resolve_import_targets(import_ref, test_path, project_root, path_to_node, aliases)
1380
+ if not resolved and "." in import_ref and not import_ref.startswith("."):
1381
+ # Python absolute-dotted fallback (non-C#: the plural resolver returns
1382
+ # at most one for those). C# usings already resolve via the namespace
1383
+ # index inside ``_resolve_import_targets``, so this never double-fires.
1384
+ python_target = _resolve_python_import_target(import_ref, project_root, path_to_node)
1385
+ if python_target:
1386
+ resolved = [python_target]
1387
+ targets.update(resolved)
1124
1388
 
1125
1389
  convention_key = _test_convention_key(test_path, project_root)
1126
1390
  if convention_key:
@@ -1197,14 +1461,102 @@ def _extract_java_import_specifiers(file_path: Path) -> list[str]:
1197
1461
  return fallback
1198
1462
 
1199
1463
 
1464
+ # C++ ``#include`` directives. The DAG resolver needs to know quote-form
1465
+ # (``"…"`` — local, relative-first) vs angle-form (``<…>`` — system/STL, no
1466
+ # edge), so the extractor preserves that distinction by prefixing a marker:
1467
+ # ``"fmt/core.h"`` → ``quote:fmt/core.h``
1468
+ # ``<vector>`` → ``angle:vector``
1469
+ # Built-in regex (NOT routed through the registry): tree-sitter-cpp is not
1470
+ # installed, and ``RegexExtractor.extract_import_specifiers`` returns ``[]`` for
1471
+ # C++, so a self-contained regex is the source of these specifiers. The marker
1472
+ # is stripped by the resolver's ``.suffix``-dispatched C++ branch.
1473
+ _CPP_QUOTE_SPECIFIER = "quote:"
1474
+ _CPP_ANGLE_SPECIFIER = "angle:"
1475
+ _CPP_INCLUDE_RE = re.compile(
1476
+ r'^\s*#\s*include\s*(?:"([^"]+)"|<([^>]+)>)',
1477
+ re.MULTILINE,
1478
+ )
1479
+
1480
+
1481
+ def _extract_cpp_include_specifiers(file_path: Path) -> list[str]:
1482
+ """Return raw C++ ``#include`` specifiers (quote/angle-marked) for the DAG.
1483
+
1484
+ Mirrors ``_extract_java_import_specifiers`` in role (suffix-dispatched raw
1485
+ specifier extraction) but uses a built-in regex because tree-sitter-cpp is
1486
+ absent. The quote/angle form is carried as a marker prefix so the
1487
+ PATH-based resolver can apply the right rule: quote-form resolves
1488
+ relative-to-file then via include roots; angle-form is system/STL and forms
1489
+ no edge (analogous to Java ``java.*`` producing no edge).
1490
+ """
1491
+
1492
+ content = file_path.read_text(encoding="utf-8", errors="ignore")
1493
+ specifiers: list[str] = []
1494
+ for quote_target, angle_target in _CPP_INCLUDE_RE.findall(content):
1495
+ if quote_target:
1496
+ specifiers.append(f"{_CPP_QUOTE_SPECIFIER}{quote_target}")
1497
+ elif angle_target:
1498
+ specifiers.append(f"{_CPP_ANGLE_SPECIFIER}{angle_target}")
1499
+ return specifiers
1500
+
1501
+
1502
+ # C# ``using`` directives. Unlike C++ ``#include`` (path) or Java FQN→path, a C#
1503
+ # ``using`` names a NAMESPACE, which is NOT directory-tied — ``namespace Dapper;``
1504
+ # is declared across files in different dirs. So the resolver needs a
1505
+ # namespace→declaring-files reverse-index (built once over the file-set), not a
1506
+ # path probe. The extractor's job is just to surface the raw using forms:
1507
+ # ``using X.Y;`` → ``X.Y``
1508
+ # ``using static X.Y.Member;``→ ``static X.Y.Member`` (resolver drops Member)
1509
+ # ``using Alias = X.Y;`` → ``X.Y`` (alias name is irrelevant to edges)
1510
+ # ``global using X.Y;`` → ``X.Y``
1511
+ # Built-in regex (NOT routed through the registry): tree-sitter-c-sharp is NOT
1512
+ # installed, and ``RegexExtractor.extract_import_specifiers`` returns ``[]`` for
1513
+ # C#, so a self-contained regex is the source of these specifiers (mirrors the
1514
+ # C++ precedent of deferring tree-sitter wiring). The ``static`` marker is the
1515
+ # only shape distinction the resolver needs.
1516
+ _CSHARP_STATIC_SPECIFIER = "static "
1517
+ _CSHARP_USING_RE = re.compile(
1518
+ r'^\s*(?:global\s+)?using\s+(static\s+)?(?:[\w.]+\s*=\s*)?([\w.]+)\s*;',
1519
+ re.MULTILINE,
1520
+ )
1521
+
1522
+
1523
+ def _extract_csharp_import_specifiers(file_path: Path) -> list[str]:
1524
+ """Return raw C# ``using`` specifiers (static-marked) for the DAG.
1525
+
1526
+ Mirrors ``_extract_cpp_include_specifiers`` / ``_extract_java_import_specifiers``
1527
+ in role (suffix-dispatched raw specifier extraction) but uses a built-in
1528
+ regex because tree-sitter-c-sharp is absent. ``using static X.Y.Member`` is
1529
+ surfaced with a ``static `` prefix so the NAMESPACE-index resolver knows to
1530
+ also try the parent namespace (the member's owning type's namespace); plain /
1531
+ global / alias usings are surfaced as the bare imported namespace.
1532
+ """
1533
+
1534
+ content = file_path.read_text(encoding="utf-8", errors="ignore")
1535
+ specifiers: list[str] = []
1536
+ for static_kw, namespace in _CSHARP_USING_RE.findall(content):
1537
+ if static_kw:
1538
+ specifiers.append(f"{_CSHARP_STATIC_SPECIFIER}{namespace}")
1539
+ else:
1540
+ specifiers.append(namespace)
1541
+ return specifiers
1542
+
1543
+
1200
1544
  #: Suffix → raw-specifier extractor (DATA dispatch). A source file whose language
1201
1545
  #: 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.
1546
+ #: Java FQNs, C# namespaces) or ``#include`` directives (C/C++) resolves edges
1547
+ #: from these, instead of the builder's quoted-string ``extract_imports`` seam
1548
+ #: (JS/TS ``from '…'`` / ``require('…')``). Adding a language here is pure data —
1549
+ #: no core ``if language ==`` branch.
1205
1550
  _SUFFIX_SPECIFIER_EXTRACTORS: dict[str, "Callable[[Path], list[str]]"] = {
1206
1551
  ".py": _extract_python_import_specifiers,
1207
1552
  ".java": _extract_java_import_specifiers,
1553
+ ".h": _extract_cpp_include_specifiers,
1554
+ ".hpp": _extract_cpp_include_specifiers,
1555
+ ".hh": _extract_cpp_include_specifiers,
1556
+ ".cc": _extract_cpp_include_specifiers,
1557
+ ".cpp": _extract_cpp_include_specifiers,
1558
+ ".cxx": _extract_cpp_include_specifiers,
1559
+ ".cs": _extract_csharp_import_specifiers,
1208
1560
  }
1209
1561
 
1210
1562
 
@@ -1246,6 +1598,22 @@ def _resolve_python_import_target(import_ref: str, project_root: Path, path_to_n
1246
1598
  return path_to_node.get(init_path)
1247
1599
 
1248
1600
 
1601
+ #: ESM/TS extension-swap map (DATA, not a ``language ==`` branch). Under
1602
+ #: ``moduleResolution: NodeNext``/``Bundler`` a TypeScript import specifier MUST
1603
+ #: carry the EMITTED ``.js`` extension that resolves to the ``.ts`` SOURCE file
1604
+ #: (``import { x } from "./types.js"`` → ``types.ts``). Each emitted suffix maps
1605
+ #: to the source suffixes it can stand in for. Resolution tries these ONLY as a
1606
+ #: last-resort fallback (after exact-match and bare suffix-append both fail), so
1607
+ #: a real ``./foo.js`` target still wins by exact match — JS projects with real
1608
+ #: ``.js`` files are unaffected.
1609
+ _ESM_EXTENSION_SWAP: dict[str, tuple[str, ...]] = {
1610
+ ".js": (".ts", ".tsx"),
1611
+ ".jsx": (".tsx", ".ts"),
1612
+ ".mjs": (".mts", ".ts"),
1613
+ ".cjs": (".cts", ".ts"),
1614
+ }
1615
+
1616
+
1249
1617
  def _resolve_file_candidate(candidate: Path, path_to_node: dict[Path, str]) -> str | None:
1250
1618
  if candidate in path_to_node:
1251
1619
  return path_to_node[candidate]
@@ -1263,6 +1631,26 @@ def _resolve_file_candidate(candidate: Path, path_to_node: dict[Path, str]) -> s
1263
1631
  init_file = candidate / "__init__.py"
1264
1632
  if init_file in path_to_node:
1265
1633
  return path_to_node[init_file]
1634
+
1635
+ # FALLBACK (only after exact-match + suffix-append + index/__init__ all
1636
+ # failed): the specifier carries an emitted ESM extension (``.js``/…) that
1637
+ # should resolve to a ``.ts`` SOURCE file. Swap the emitted suffix for each
1638
+ # candidate source suffix and retry both the file form (``./types.js`` →
1639
+ # ``types.ts``) and the directory-index form (``./foo.js`` → ``foo/index.ts``).
1640
+ source_suffixes = _ESM_EXTENSION_SWAP.get(candidate.suffix)
1641
+ if source_suffixes:
1642
+ # Strip ONLY the trailing emitted suffix as a string so inner dots are
1643
+ # preserved (``types.test.js`` → base ``types.test``, not ``types``).
1644
+ stem = candidate.name[: -len(candidate.suffix)]
1645
+ swapped_base = candidate.parent / stem
1646
+ for source_suffix in source_suffixes:
1647
+ swapped = candidate.parent / f"{stem}{source_suffix}"
1648
+ if swapped in path_to_node:
1649
+ return path_to_node[swapped]
1650
+ for source_suffix in source_suffixes:
1651
+ indexed = swapped_base / f"index{source_suffix}"
1652
+ if indexed in path_to_node:
1653
+ return path_to_node[indexed]
1266
1654
  return None
1267
1655
 
1268
1656
 
@@ -1949,8 +2337,11 @@ def _language_for_path(path: Path) -> str:
1949
2337
  ".cs": "csharp",
1950
2338
  ".c": "c",
1951
2339
  ".cpp": "cpp",
2340
+ ".cc": "cpp",
2341
+ ".cxx": "cpp",
1952
2342
  ".h": "cpp",
1953
2343
  ".hpp": "cpp",
2344
+ ".hh": "cpp",
1954
2345
  ".kt": "kotlin",
1955
2346
  ".kts": "kotlin",
1956
2347
  ".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,16 @@ 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",
313
+ # C# (.cs). Listed as DATA so a C# project like Dapper (157 .cs files,
314
+ # no .py at all) is detected as ``csharp`` instead of vacuously falling
315
+ # back to ``python`` — the single change that fixes the false-green where
316
+ # ``codd check`` PASSes on a 0-edge graph because the .cs files were inert.
317
+ ".cs": "csharp",
308
318
  }
309
319
 
310
320
  for root, dirs, files in os.walk(project_root):
@@ -340,7 +350,7 @@ def _detect_source_dirs(project_root: Path, language: str) -> list[str]:
340
350
  # not also pick up ``src/test/<lang>`` (which _detect_test_dirs claims).
341
351
  return jvm_source
342
352
 
343
- candidates = ["src", "lib", "app", "pkg", "cmd", "internal"]
353
+ candidates = ["src", "lib", "app", "pkg", "cmd", "internal", "include"]
344
354
  found = []
345
355
 
346
356
  for c in candidates: