codd-dev 3.7.4__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 (637) hide show
  1. {codd_dev-3.7.4 → codd_dev-3.7.5}/PKG-INFO +1 -1
  2. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/__init__.py +1 -1
  3. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/builder.py +243 -12
  4. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/extractor.py +5 -0
  5. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/parsing/regex_strategies.py +136 -0
  6. {codd_dev-3.7.4 → codd_dev-3.7.5}/pyproject.toml +1 -1
  7. {codd_dev-3.7.4 → codd_dev-3.7.5}/.gitignore +0 -0
  8. {codd_dev-3.7.4 → codd_dev-3.7.5}/LICENSE +0 -0
  9. {codd_dev-3.7.4 → codd_dev-3.7.5}/README.md +0 -0
  10. {codd_dev-3.7.4 → codd_dev-3.7.5}/bench_fixture/README.md +0 -0
  11. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/__main__.py +0 -0
  12. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/_git_helper.py +0 -0
  13. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/action_outcome.py +0 -0
  14. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/ai_invoke.py +0 -0
  15. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/ai_patch.py +0 -0
  16. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/artifact_contract.py +0 -0
  17. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/artifact_ids.py +0 -0
  18. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/artifacts/catalog.yaml +0 -0
  19. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/ask_user_question_adapter.py +0 -0
  20. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/assembler.py +0 -0
  21. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/bridge.py +0 -0
  22. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/brownfield/__init__.py +0 -0
  23. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/brownfield/pipeline.py +0 -0
  24. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/capability_completeness.py +0 -0
  25. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/claude_cli.py +0 -0
  26. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/cli.py +0 -0
  27. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/clustering.py +0 -0
  28. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/coherence_adapters.py +0 -0
  29. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/coherence_engine.py +0 -0
  30. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/confidence.py +0 -0
  31. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/config.py +0 -0
  32. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/config_schema.py +0 -0
  33. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/contracts.py +0 -0
  34. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/contracts_registry/__init__.py +0 -0
  35. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/contracts_registry/__main__.py +0 -0
  36. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/contracts_registry/certify.py +0 -0
  37. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/contracts_registry/generate_matrix.py +0 -0
  38. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/contracts_registry/registry.py +0 -0
  39. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/coverage_auditor.py +0 -0
  40. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/coverage_execution_coherence.py +0 -0
  41. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/coverage_metrics.py +0 -0
  42. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/__init__.py +0 -0
  43. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/auto_repair.py +0 -0
  44. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/checks/__init__.py +0 -0
  45. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/checks/_one_to_many_detection.py +0 -0
  46. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/checks/artifact_contract_check.py +0 -0
  47. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/checks/cardinality_coverage.py +0 -0
  48. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/checks/ci_health.py +0 -0
  49. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/checks/dependency_freshness.py +0 -0
  50. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/checks/depends_on_consistency.py +0 -0
  51. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/checks/deployment_completeness.py +0 -0
  52. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/checks/edge_validity.py +0 -0
  53. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/checks/environment_coverage.py +0 -0
  54. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/checks/extraction_diagnostics.py +0 -0
  55. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/checks/implementation_coverage.py +0 -0
  56. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/checks/negative_space.py +0 -0
  57. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/checks/node_completeness.py +0 -0
  58. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/checks/opt_out.py +0 -0
  59. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/checks/resource_flow_coherence.py +0 -0
  60. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/checks/semantic_contract_conflict.py +0 -0
  61. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/checks/stale_evidence.py +0 -0
  62. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/checks/task_completion.py +0 -0
  63. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/checks/transitive_closure.py +0 -0
  64. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/checks/ui_coherence.py +0 -0
  65. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/checks/user_journey_coherence.py +0 -0
  66. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/coverage_axes.py +0 -0
  67. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/defaults/cli.yaml +0 -0
  68. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/defaults/cpp_embedded.yaml +0 -0
  69. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/defaults/csharp.yaml +0 -0
  70. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/defaults/elixir.yaml +0 -0
  71. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/defaults/generic.yaml +0 -0
  72. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/defaults/iot.yaml +0 -0
  73. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/defaults/java.yaml +0 -0
  74. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/defaults/kotlin.yaml +0 -0
  75. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/defaults/mobile.yaml +0 -0
  76. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/defaults/ruby.yaml +0 -0
  77. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/defaults/rust.yaml +0 -0
  78. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/defaults/scala.yaml +0 -0
  79. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/defaults/swift.yaml +0 -0
  80. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/defaults/test_frameworks.yaml +0 -0
  81. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/defaults/web.yaml +0 -0
  82. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/extractor.py +0 -0
  83. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/impact.py +0 -0
  84. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/materiality.py +0 -0
  85. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/metadata_access.py +0 -0
  86. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/result_status.py +0 -0
  87. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dag/runner.py +0 -0
  88. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/defaults.py +0 -0
  89. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/defaults.yaml +0 -0
  90. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/dependency_lock_coherence.py +0 -0
  91. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deploy_targets/__init__.py +0 -0
  92. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deploy_targets/app_service.py +0 -0
  93. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deploy_targets/base.py +0 -0
  94. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deploy_targets/docker_compose.py +0 -0
  95. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deployer.py +0 -0
  96. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deployment/__init__.py +0 -0
  97. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deployment/checks/__init__.py +0 -0
  98. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deployment/defaults/deploy_targets.yaml +0 -0
  99. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
  100. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deployment/defaults/schema_providers.yaml +0 -0
  101. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deployment/defaults/verification_templates.yaml +0 -0
  102. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deployment/extractor.py +0 -0
  103. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deployment/providers/__init__.py +0 -0
  104. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deployment/providers/ai_command.py +0 -0
  105. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deployment/providers/ai_command_factory.py +0 -0
  106. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deployment/providers/codex_app_server.py +0 -0
  107. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deployment/providers/llm_consideration.py +0 -0
  108. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deployment/providers/schema/__init__.py +0 -0
  109. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deployment/providers/schema/prisma.py +0 -0
  110. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deployment/providers/target/__init__.py +0 -0
  111. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deployment/providers/target/docker_compose.py +0 -0
  112. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deployment/providers/verification/__init__.py +0 -0
  113. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
  114. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deployment/providers/verification/cdp_browser.py +0 -0
  115. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deployment/providers/verification/cdp_engines.py +0 -0
  116. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
  117. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deployment/providers/verification/cdp_wire.py +0 -0
  118. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deployment/providers/verification/curl.py +0 -0
  119. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deployment/providers/verification/form_strategies.py +0 -0
  120. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deployment/providers/verification/means_catalog.py +0 -0
  121. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deployment/providers/verification/playwright.py +0 -0
  122. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deployment/providers/verification/pytest_http.py +0 -0
  123. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/deployment/providers/verification/vitest.py +0 -0
  124. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/design_md.py +0 -0
  125. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/diff/__init__.py +0 -0
  126. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/diff/apply.py +0 -0
  127. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/diff/engine.py +0 -0
  128. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/diff/persistence.py +0 -0
  129. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/diff/templates/diff_prompt.md +0 -0
  130. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/discovery.py +0 -0
  131. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/drift.py +0 -0
  132. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/e2e_contract_coherence.py +0 -0
  133. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/e2e_extractor.py +0 -0
  134. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/e2e_generator.py +0 -0
  135. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/e2e_harness.py +0 -0
  136. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/e2e_runner.py +0 -0
  137. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/elicit/__init__.py +0 -0
  138. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/elicit/apply.py +0 -0
  139. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/elicit/engine.py +0 -0
  140. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/elicit/finding.py +0 -0
  141. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/elicit/formatters/__init__.py +0 -0
  142. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/elicit/formatters/base.py +0 -0
  143. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/elicit/formatters/interactive.py +0 -0
  144. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/elicit/formatters/json_fmt.py +0 -0
  145. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/elicit/formatters/md.py +0 -0
  146. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/elicit/gap_to_ask.py +0 -0
  147. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/elicit/lexicon_loader.py +0 -0
  148. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/elicit/persistence.py +0 -0
  149. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/elicit/promote.py +0 -0
  150. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/elicit/routing.py +0 -0
  151. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
  152. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/env_refs.py +0 -0
  153. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/extract_ai.py +0 -0
  154. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/extract_paths.py +0 -0
  155. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/fix/__init__.py +0 -0
  156. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/fix/candidate_selector.py +0 -0
  157. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/fix/design_updater.py +0 -0
  158. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/fix/impact_planner.py +0 -0
  159. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/fix/impl_propagation.py +0 -0
  160. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/fix/interactive_prompt.py +0 -0
  161. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/fix/phenomenon_fixer.py +0 -0
  162. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/fix/phenomenon_parser.py +0 -0
  163. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/fix/risk_classifier.py +0 -0
  164. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/fix/templates/clarification_question.txt +0 -0
  165. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/fix/templates/design_update.txt +0 -0
  166. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/fix/templates/impl_update.txt +0 -0
  167. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/fix/templates/phenomenon_parse.txt +0 -0
  168. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/fix/templates/risk_assessment.txt +0 -0
  169. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/fix/templates_loader.py +0 -0
  170. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/fixer.py +0 -0
  171. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/fixup_drift.py +0 -0
  172. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/fixup_drift_strategies/__init__.py +0 -0
  173. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
  174. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
  175. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/fixup_drift_strategies/url_drift.py +0 -0
  176. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/frontmatter.py +0 -0
  177. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/generator.py +0 -0
  178. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/git_evidence.py +0 -0
  179. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/graph.py +0 -0
  180. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/greenfield/__init__.py +0 -0
  181. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/greenfield/pipeline.py +0 -0
  182. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/hitl_session.py +0 -0
  183. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/hooks/__init__.py +0 -0
  184. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/hooks/pre-commit +0 -0
  185. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
  186. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/hooks/recipes/claude_settings_example.json +0 -0
  187. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/hooks/recipes/codex_hook.sh +0 -0
  188. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/hooks/recipes/git_post_commit.sh +0 -0
  189. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/hooks/recipes/git_pre_commit.sh +0 -0
  190. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/iac_nfr.py +0 -0
  191. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/implement_oracle.py +0 -0
  192. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/implement_oracle_scope.py +0 -0
  193. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/implement_oracle_types.py +0 -0
  194. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/implementer/__init__.py +0 -0
  195. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/implementer/chunked_runner.py +0 -0
  196. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/implementer/typecheck_loop.py +0 -0
  197. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/implementer.py +0 -0
  198. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/import_coherence.py +0 -0
  199. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/inheritance.py +0 -0
  200. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/init/__init__.py +0 -0
  201. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/init/lexicon_suggest.py +0 -0
  202. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/init/llm_lexicon_suggester.py +0 -0
  203. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/init/stack_detector.py +0 -0
  204. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/knowledge_fetcher.py +0 -0
  205. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/languages/__init__.py +0 -0
  206. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/languages/adapters/__init__.py +0 -0
  207. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/languages/adapters/implement_oracle.py +0 -0
  208. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/languages/adapters/oracle_go.py +0 -0
  209. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/languages/adapters/oracle_python.py +0 -0
  210. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/languages/adapters/oracle_typescript.py +0 -0
  211. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/languages/adapters/runner_report.py +0 -0
  212. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/languages/builtin_adapters.py +0 -0
  213. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/languages/compat.py +0 -0
  214. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/languages/contract.py +0 -0
  215. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/languages/loader.py +0 -0
  216. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/languages/oracle_executor.py +0 -0
  217. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/languages/path_planner.py +0 -0
  218. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/languages/profile.py +0 -0
  219. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/languages/profiles/go.yaml +0 -0
  220. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/languages/profiles/python.yaml +0 -0
  221. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/languages/profiles/typescript.yaml +0 -0
  222. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/languages/registry.py +0 -0
  223. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/languages/verify_executor.py +0 -0
  224. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/languages/verify_plan.py +0 -0
  225. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/lexicon.py +0 -0
  226. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/lexicon_cli/__init__.py +0 -0
  227. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/lexicon_cli/formatters/__init__.py +0 -0
  228. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/lexicon_cli/formatters/html.py +0 -0
  229. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
  230. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/lexicon_cli/formatters/md.py +0 -0
  231. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/lexicon_cli/inspector.py +0 -0
  232. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/lexicon_cli/manager.py +0 -0
  233. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/lexicon_cli/reporter.py +0 -0
  234. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/lexicon_cli/threshold.py +0 -0
  235. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/llm/__init__.py +0 -0
  236. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/llm/approval.py +0 -0
  237. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/llm/best_practice_augmenter.py +0 -0
  238. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/llm/criteria_expander.py +0 -0
  239. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/llm/design_doc_extractor.py +0 -0
  240. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/llm/impl_step_deriver.py +0 -0
  241. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/llm/means_catalog_loader.py +0 -0
  242. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/llm/parser.py +0 -0
  243. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/llm/plan_deriver.py +0 -0
  244. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/llm/prompt_builder.py +0 -0
  245. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/llm/strategy_validator.py +0 -0
  246. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/llm/templates/best_practice_augment_meta.md +0 -0
  247. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/llm/templates/criteria_expand_meta.md +0 -0
  248. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/llm/templates/design_doc_extract_meta.md +0 -0
  249. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/llm/templates/impl_step_derive_meta.md +0 -0
  250. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
  251. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/llm/templates/meta_instruction.md +0 -0
  252. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/llm/templates/plan_derive_meta.md +0 -0
  253. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/llm/templates/verification_means_catalog.yaml +0 -0
  254. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/mcp_server.py +0 -0
  255. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/measure.py +0 -0
  256. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/operational_e2e_audit.py +0 -0
  257. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/operations_derive.py +0 -0
  258. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/parsing/__init__.py +0 -0
  259. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/parsing/_shared.py +0 -0
  260. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/parsing/api_specs.py +0 -0
  261. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/parsing/extractor_registry.py +0 -0
  262. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/parsing/filesystem_routes.py +0 -0
  263. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/parsing/iac.py +0 -0
  264. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/parsing/python_ast.py +0 -0
  265. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/parsing/schemas.py +0 -0
  266. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/parsing/tests_builddeps.py +0 -0
  267. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/parsing/treesitter.py +0 -0
  268. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/path_safety.py +0 -0
  269. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/planner.py +0 -0
  270. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/policy.py +0 -0
  271. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/preflight/__init__.py +0 -0
  272. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/preflight/defaults/cli.yaml +0 -0
  273. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/preflight/defaults/generic.yaml +0 -0
  274. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/preflight/defaults/iot.yaml +0 -0
  275. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/preflight/defaults/mobile.yaml +0 -0
  276. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/preflight/defaults/web.yaml +0 -0
  277. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/project_types.py +0 -0
  278. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/propagate.py +0 -0
  279. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/propagation_common.py +0 -0
  280. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/propagator.py +0 -0
  281. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/reconciliation_ledger.py +0 -0
  282. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/reference_resolution.py +0 -0
  283. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/registry.py +0 -0
  284. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/repair/__init__.py +0 -0
  285. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/repair/approval_repair.py +0 -0
  286. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/repair/auto_scope_guard.py +0 -0
  287. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/repair/engine.py +0 -0
  288. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/repair/git_patcher.py +0 -0
  289. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/repair/history.py +0 -0
  290. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/repair/llm_repair_engine.py +0 -0
  291. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/repair/loop.py +0 -0
  292. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/repair/primary_picker.py +0 -0
  293. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/repair/proof_breaks.py +0 -0
  294. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/repair/repair_result.py +0 -0
  295. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/repair/repairability_classifier.py +0 -0
  296. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/repair/schema.py +0 -0
  297. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/repair/templates/analyze_meta.md +0 -0
  298. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/repair/templates/propose_meta.md +0 -0
  299. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/repair/templates/repair_strategy_meta.md +0 -0
  300. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/repair/templates/repairability_meta.md +0 -0
  301. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/repair/test_failure_attribution.py +0 -0
  302. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/repair/verify_runner.py +0 -0
  303. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/repair_slice.py +0 -0
  304. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/require.py +0 -0
  305. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/require_plugins.py +0 -0
  306. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/require_propagate.py +0 -0
  307. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/required_artifacts/defaults/cli.yaml +0 -0
  308. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/required_artifacts/defaults/generic.yaml +0 -0
  309. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/required_artifacts/defaults/iot.yaml +0 -0
  310. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/required_artifacts/defaults/mobile.yaml +0 -0
  311. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/required_artifacts/defaults/web.yaml +0 -0
  312. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/required_artifacts_deriver.py +0 -0
  313. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/requirement_completeness/defaults/cli.yaml +0 -0
  314. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/requirement_completeness/defaults/generic.yaml +0 -0
  315. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/requirement_completeness/defaults/iot.yaml +0 -0
  316. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
  317. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/requirement_completeness/defaults/web.yaml +0 -0
  318. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/requirement_completeness_auditor.py +0 -0
  319. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/requirement_reconciliation.py +0 -0
  320. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/requirements_meta.py +0 -0
  321. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/restoration_report.py +0 -0
  322. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/restore.py +0 -0
  323. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/routes_extractor.py +0 -0
  324. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/runtime_smoke/__init__.py +0 -0
  325. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/runtime_smoke/checks.py +0 -0
  326. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/runtime_smoke/config.py +0 -0
  327. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/runtime_smoke/report.py +0 -0
  328. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/runtime_smoke/runner.py +0 -0
  329. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/scanner.py +0 -0
  330. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/schema_refs.py +0 -0
  331. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/screen_flow_validator.py +0 -0
  332. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/screen_transition_extractor.py +0 -0
  333. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/screen_transitions/defaults.yaml +0 -0
  334. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/skills_cli/__init__.py +0 -0
  335. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/skills_cli/discovery.py +0 -0
  336. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/skills_cli/manager.py +0 -0
  337. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/skills_cli/paths.py +0 -0
  338. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/stack/__init__.py +0 -0
  339. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/stack/adapters/__init__.py +0 -0
  340. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/stack/adapters/_base.py +0 -0
  341. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/stack/adapters/nextjs.py +0 -0
  342. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/stack/adapters/playwright.py +0 -0
  343. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/stack/adapters/prisma.py +0 -0
  344. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/stack/command_authenticity.py +0 -0
  345. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/stack/command_override.py +0 -0
  346. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/stack/command_plan.py +0 -0
  347. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/stack/compose.py +0 -0
  348. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/stack/loader.py +0 -0
  349. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/stack/lock.py +0 -0
  350. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/stack/obligations.py +0 -0
  351. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/stack/profile.py +0 -0
  352. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/stack/profiles/addons/playwright.yaml +0 -0
  353. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/stack/profiles/addons/prisma.yaml +0 -0
  354. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/stack/profiles/frameworks/nextjs.yaml +0 -0
  355. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/stack/project.py +0 -0
  356. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/stack/registry.py +0 -0
  357. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/stack/replacement_proof.py +0 -0
  358. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/stack/resolve.py +0 -0
  359. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/surface_reconciliation.py +0 -0
  360. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/synth.py +0 -0
  361. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/templates/codd.yaml.tmpl +0 -0
  362. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/templates/conventions.yaml.tmpl +0 -0
  363. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/templates/data_dependencies.yaml.tmpl +0 -0
  364. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/templates/doc_links.yaml.tmpl +0 -0
  365. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/templates/extract_ai_prompt_baseline.md +0 -0
  366. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/templates/extracted/api-contract.md.j2 +0 -0
  367. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
  368. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/templates/extracted/module-detail.md.j2 +0 -0
  369. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/templates/extracted/schema-design.md.j2 +0 -0
  370. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/templates/extracted/system-context.md.j2 +0 -0
  371. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/templates/gitignore.tmpl +0 -0
  372. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/templates/lexicon_questions.md +0 -0
  373. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/templates/lexicon_schema.yaml +0 -0
  374. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/templates/overrides.yaml.tmpl +0 -0
  375. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/test_detection.py +0 -0
  376. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/test_import_coherence.py +0 -0
  377. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/traceability.py +0 -0
  378. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/validator.py +0 -0
  379. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/vb_marker_authenticity.py +0 -0
  380. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/vb_rerun_scope.py +0 -0
  381. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/verifiable_behavior_audit.py +0 -0
  382. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/watch/__init__.py +0 -0
  383. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/watch/events.py +0 -0
  384. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/watch/propagation_log.py +0 -0
  385. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/watch/propagation_pipeline.py +0 -0
  386. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/watch/test_runner.py +0 -0
  387. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/watch/watcher.py +0 -0
  388. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd/wiring.py +0 -0
  389. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
  390. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
  391. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
  392. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
  393. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
  394. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
  395. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
  396. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
  397. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
  398. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
  399. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
  400. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
  401. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
  402. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
  403. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
  404. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
  405. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
  406. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
  407. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
  408. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
  409. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
  410. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
  411. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
  412. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
  413. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
  414. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
  415. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
  416. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
  417. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
  418. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
  419. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
  420. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
  421. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
  422. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
  423. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
  424. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
  425. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
  426. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
  427. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
  428. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
  429. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
  430. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
  431. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
  432. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
  433. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
  434. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
  435. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
  436. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
  437. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
  438. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
  439. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
  440. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
  441. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
  442. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
  443. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
  444. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
  445. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
  446. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
  447. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
  448. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
  449. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
  450. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
  451. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
  452. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
  453. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
  454. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
  455. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
  456. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
  457. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
  458. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
  459. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
  460. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
  461. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
  462. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
  463. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
  464. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
  465. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
  466. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
  467. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
  468. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
  469. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
  470. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
  471. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
  472. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
  473. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
  474. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
  475. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
  476. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
  477. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
  478. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
  479. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
  480. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
  481. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
  482. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
  483. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
  484. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
  485. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
  486. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
  487. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
  488. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
  489. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
  490. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
  491. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
  492. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
  493. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
  494. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
  495. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
  496. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
  497. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
  498. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
  499. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
  500. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
  501. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
  502. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
  503. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
  504. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
  505. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
  506. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
  507. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
  508. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
  509. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
  510. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
  511. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
  512. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
  513. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
  514. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
  515. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
  516. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
  517. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
  518. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
  519. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
  520. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
  521. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
  522. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
  523. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
  524. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
  525. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
  526. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
  527. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
  528. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
  529. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
  530. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
  531. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
  532. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
  533. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
  534. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
  535. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
  536. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
  537. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
  538. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
  539. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
  540. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
  541. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
  542. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
  543. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
  544. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
  545. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
  546. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
  547. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
  548. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
  549. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
  550. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
  551. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
  552. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
  553. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
  554. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
  555. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
  556. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
  557. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
  558. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
  559. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
  560. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
  561. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
  562. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
  563. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
  564. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
  565. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
  566. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
  567. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
  568. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
  569. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
  570. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
  571. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
  572. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
  573. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
  574. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
  575. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
  576. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
  577. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
  578. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
  579. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
  580. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
  581. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
  582. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
  583. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
  584. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
  585. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
  586. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
  587. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
  588. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
  589. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
  590. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
  591. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
  592. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
  593. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
  594. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
  595. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
  596. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
  597. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
  598. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
  599. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
  600. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
  601. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
  602. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
  603. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
  604. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
  605. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
  606. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
  607. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
  608. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
  609. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
  610. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
  611. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
  612. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
  613. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
  614. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
  615. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
  616. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
  617. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
  618. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
  619. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
  620. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
  621. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
  622. {codd_dev-3.7.4 → codd_dev-3.7.5}/codd_plugins/stack_map.yaml +0 -0
  623. {codd_dev-3.7.4 → codd_dev-3.7.5}/docs/cookbook/cdp_browser/README.md +0 -0
  624. {codd_dev-3.7.4 → codd_dev-3.7.5}/docs/cookbook/presentation_aggregation/README.md +0 -0
  625. {codd_dev-3.7.4 → codd_dev-3.7.5}/docs/requirements/README.md +0 -0
  626. {codd_dev-3.7.4 → codd_dev-3.7.5}/examples/README.md +0 -0
  627. {codd_dev-3.7.4 → codd_dev-3.7.5}/skills/codd-assemble/SKILL.md +0 -0
  628. {codd_dev-3.7.4 → codd_dev-3.7.5}/skills/codd-evolve/SKILL.md +0 -0
  629. {codd_dev-3.7.4 → codd_dev-3.7.5}/skills/codd-generate/SKILL.md +0 -0
  630. {codd_dev-3.7.4 → codd_dev-3.7.5}/skills/codd-greenfield/SKILL.md +0 -0
  631. {codd_dev-3.7.4 → codd_dev-3.7.5}/skills/codd-impact/SKILL.md +0 -0
  632. {codd_dev-3.7.4 → codd_dev-3.7.5}/skills/codd-init/SKILL.md +0 -0
  633. {codd_dev-3.7.4 → codd_dev-3.7.5}/skills/codd-propagate/SKILL.md +0 -0
  634. {codd_dev-3.7.4 → codd_dev-3.7.5}/skills/codd-restore/SKILL.md +0 -0
  635. {codd_dev-3.7.4 → codd_dev-3.7.5}/skills/codd-scan/SKILL.md +0 -0
  636. {codd_dev-3.7.4 → codd_dev-3.7.5}/skills/codd-validate/SKILL.md +0 -0
  637. {codd_dev-3.7.4 → 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.4
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.4"
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,
@@ -1219,6 +1244,129 @@ def _cpp_header_root_dirs(path_to_node: dict[Path, str]) -> list[Path]:
1219
1244
  _CPP_HEADER_SUFFIXES = frozenset({".h", ".hpp", ".hh"})
1220
1245
 
1221
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
+
1222
1370
  def _infer_test_targets(
1223
1371
  test_path: Path,
1224
1372
  project_root: Path,
@@ -1228,11 +1376,15 @@ def _infer_test_targets(
1228
1376
  targets: set[str] = set()
1229
1377
 
1230
1378
  for import_ref in _extract_test_imports(test_path):
1231
- target_id = _resolve_import_target(import_ref, test_path, project_root, path_to_node, aliases)
1232
- if not target_id and "." in import_ref and not import_ref.startswith("."):
1233
- target_id = _resolve_python_import_target(import_ref, project_root, path_to_node)
1234
- if target_id:
1235
- 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)
1236
1388
 
1237
1389
  convention_key = _test_convention_key(test_path, project_root)
1238
1390
  if convention_key:
@@ -1347,12 +1499,54 @@ def _extract_cpp_include_specifiers(file_path: Path) -> list[str]:
1347
1499
  return specifiers
1348
1500
 
1349
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
+
1350
1544
  #: Suffix → raw-specifier extractor (DATA dispatch). A source file whose language
1351
1545
  #: 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.
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.
1356
1550
  _SUFFIX_SPECIFIER_EXTRACTORS: dict[str, "Callable[[Path], list[str]]"] = {
1357
1551
  ".py": _extract_python_import_specifiers,
1358
1552
  ".java": _extract_java_import_specifiers,
@@ -1362,6 +1556,7 @@ _SUFFIX_SPECIFIER_EXTRACTORS: dict[str, "Callable[[Path], list[str]]"] = {
1362
1556
  ".cc": _extract_cpp_include_specifiers,
1363
1557
  ".cpp": _extract_cpp_include_specifiers,
1364
1558
  ".cxx": _extract_cpp_include_specifiers,
1559
+ ".cs": _extract_csharp_import_specifiers,
1365
1560
  }
1366
1561
 
1367
1562
 
@@ -1403,6 +1598,22 @@ def _resolve_python_import_target(import_ref: str, project_root: Path, path_to_n
1403
1598
  return path_to_node.get(init_path)
1404
1599
 
1405
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
+
1406
1617
  def _resolve_file_candidate(candidate: Path, path_to_node: dict[Path, str]) -> str | None:
1407
1618
  if candidate in path_to_node:
1408
1619
  return path_to_node[candidate]
@@ -1420,6 +1631,26 @@ def _resolve_file_candidate(candidate: Path, path_to_node: dict[Path, str]) -> s
1420
1631
  init_file = candidate / "__init__.py"
1421
1632
  if init_file in path_to_node:
1422
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]
1423
1654
  return None
1424
1655
 
1425
1656
 
@@ -310,6 +310,11 @@ def _detect_language(project_root: Path, exclude_patterns: list[str]) -> str:
310
310
  # ``cpp`` instead of vacuously falling back to ``python``.
311
311
  ".cc": "cpp", ".cpp": "cpp", ".cxx": "cpp",
312
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",
313
318
  }
314
319
 
315
320
  for root, dirs, files in os.walk(project_root):
@@ -219,6 +219,82 @@ def _java_internal_key(fqn_parts: list[str], root_parts: list[str]) -> str:
219
219
  return fqn_parts[-2] if len(fqn_parts) >= 2 else fqn_parts[0]
220
220
 
221
221
 
222
+ #: C# type-declaration keyword → emitted symbol kind. ``record`` collapses to the
223
+ #: nearest existing kind (``class``) so downstream symbol consumers (which only
224
+ #: know class/interface/enum/struct/function) stay unchanged; ``record struct`` is
225
+ #: covered by the ``struct`` pattern. Access/`partial`/`sealed`/`abstract`/etc.
226
+ #: modifiers are tolerated before the keyword.
227
+ _CSHARP_MODIFIERS = r'(?:public|internal|protected|private|static|sealed|abstract|partial|readonly|ref|unsafe|new|file)'
228
+ _CSHARP_TYPE_KEYWORD_KINDS = (
229
+ (re.compile(rf'^\s*(?:{_CSHARP_MODIFIERS}\s+)*class\s+(\w+)'), "class"),
230
+ (re.compile(rf'^\s*(?:{_CSHARP_MODIFIERS}\s+)*interface\s+(\w+)'), "interface"),
231
+ (re.compile(rf'^\s*(?:{_CSHARP_MODIFIERS}\s+)*enum\s+(\w+)'), "enum"),
232
+ (re.compile(rf'^\s*(?:{_CSHARP_MODIFIERS}\s+)*(?:record\s+)?struct\s+(\w+)'), "struct"),
233
+ (re.compile(rf'^\s*(?:{_CSHARP_MODIFIERS}\s+)*record\s+(?:class\s+)?(\w+)'), "class"),
234
+ )
235
+
236
+
237
+ def _symbols_csharp(content: str, rel_path: str) -> "list[Symbol]":
238
+ symbols: list = []
239
+ for i, line in enumerate(content.splitlines(), 1):
240
+ for pattern, kind in _CSHARP_TYPE_KEYWORD_KINDS:
241
+ m = pattern.match(line)
242
+ if m:
243
+ symbols.append(_symbol(m.group(1), kind, rel_path, i))
244
+ break
245
+ return symbols
246
+
247
+
248
+ #: C# ``using`` directives + ``namespace`` declarations. Mirrors
249
+ #: ``builder._CSHARP_USING_RE`` / ``builder._CSHARP_NAMESPACE_RE`` so the scan-path
250
+ #: parser and the DAG builder agree on a C# project's using graph. ``using``
251
+ #: covers plain / ``static`` / ``global`` / alias (``using Alias = X.Y;``) forms;
252
+ #: the namespace regex covers BOTH file-scoped (``namespace X.Y;``) and block
253
+ #: (``namespace X.Y {``) declarations (Dapper uses both).
254
+ _CSHARP_USING_RE = re.compile(
255
+ r'^\s*(?:global\s+)?using\s+(?:static\s+)?'
256
+ r'(?:[\w.]+\s*=\s*)?' # optional ``Alias =`` (we capture the RHS namespace)
257
+ r'([\w.]+)\s*;'
258
+ )
259
+ _CSHARP_NAMESPACE_RE = re.compile(r'^\s*namespace\s+([\w.]+)\s*[;{]?\s*$')
260
+
261
+ #: C# framework / BCL namespace roots. A ``using`` rooted here is external (the
262
+ #: analogue of Java ``java.*`` / C++ angle-form ``<…>``). Everything else is a
263
+ #: candidate first-party namespace; the DAG builder owns the precise
264
+ #: namespace→file resolution for edges via the reverse-index.
265
+ _CSHARP_FRAMEWORK_ROOTS = frozenset({"System", "Microsoft", "Windows", "Mono"})
266
+
267
+
268
+ def _imports_csharp(content, project_root, src_dir, file_path):
269
+ """Classify C# usings: first-party ``internal`` vs ``System.*``/framework.
270
+
271
+ The regex sibling of the DAG builder's using extraction (there is no
272
+ tree-sitter-c-sharp binding). A ``using Dapper.X;`` rooted outside the
273
+ framework roots is first-party (``internal``, bucketed by the namespace's
274
+ first segment); ``using System.Text;`` / ``using Microsoft.*`` is framework
275
+ (``external``, keyed by the full namespace). Returns the
276
+ ``(internal, external)`` shape every ``extract_imports`` strategy yields.
277
+ """
278
+ internal: dict[str, list[str]] = {}
279
+ external: set[str] = set()
280
+
281
+ for line in content.splitlines():
282
+ m = _CSHARP_USING_RE.match(line)
283
+ if not m:
284
+ continue
285
+ namespace = m.group(1)
286
+ top = namespace.split(".", 1)[0]
287
+ if top in _CSHARP_FRAMEWORK_ROOTS:
288
+ external.add(namespace)
289
+ else:
290
+ # Bucket by the first namespace segment (``Dapper`` for
291
+ # ``Dapper.ProviderTools``); the DAG builder owns the precise
292
+ # namespace→file resolution for edges via the reverse-index.
293
+ internal.setdefault(top, []).append(line.strip())
294
+
295
+ return internal, external
296
+
297
+
222
298
  def _symbols_go(content: str, rel_path: str) -> "list[Symbol]":
223
299
  symbols: list = []
224
300
  for i, line in enumerate(content.splitlines(), 1):
@@ -590,6 +666,20 @@ _CPP = RegexLanguageStrategy(
590
666
  guess_test_target=None,
591
667
  )
592
668
 
669
+ _CSHARP = RegexLanguageStrategy(
670
+ name="csharp",
671
+ extensions=frozenset({".cs"}),
672
+ # stdlib stays EMPTY: ``_imports_csharp`` already classifies framework usings
673
+ # (``System.*``/``Microsoft.*``/…) into ``external`` itself; there is no fixed
674
+ # name-set to subtract (C# uses arbitrary dotted namespaces, not a list).
675
+ entry_points=("Program.cs", "Main.cs"),
676
+ extract_symbols=_symbols_csharp,
677
+ extract_imports=_imports_csharp,
678
+ detect_code_patterns=None,
679
+ file_to_module=_file_to_module_first_part,
680
+ guess_test_target=None,
681
+ )
682
+
593
683
  #: The generic fallback for an unknown language — best-effort no-op analysis,
594
684
  #: matching the implicit ``else`` of every old ladder (empty symbols/imports,
595
685
  #: no patterns, first-path-part module name, no test-target, no extensions).
@@ -605,6 +695,7 @@ _STRATEGIES: dict[str, RegexLanguageStrategy] = {
605
695
  "java": _JAVA,
606
696
  "go": _GO,
607
697
  "cpp": _CPP,
698
+ "csharp": _CSHARP,
608
699
  }
609
700
 
610
701
 
@@ -791,6 +882,50 @@ def _resolve_cpp_include_path(
791
882
  return None
792
883
 
793
884
 
885
+ #: C# ``using`` directive (mirrors the scan/builder regexes) for recovering the
886
+ #: imported namespace from a stored ``internal`` line.
887
+ _CSHARP_USING_LINE_RE = re.compile(
888
+ r'(?:global\s+)?using\s+(?:static\s+)?(?:[\w.]+\s*=\s*)?([\w.]+)\s*;'
889
+ )
890
+
891
+
892
+ def _ceg_targets_csharp(
893
+ internal: dict, project_root: Path, file_path: Path
894
+ ) -> "list[CegImportTarget]":
895
+ """C# internal usings → ``module`` CEG nodes keyed by first-party namespace.
896
+
897
+ Mirrors ``_ceg_targets_java`` (a stable ``module:`` identifier per imported
898
+ first-party unit) rather than probing the filesystem — C# resolution is
899
+ NAMESPACE-based, not path-based, so there is no single file a ``using``
900
+ points at; the DAG builder owns the precise namespace→declaring-files
901
+ resolution for import EDGES via its reverse-index. The ``internal`` map values
902
+ are the raw using lines (``using Dapper.ProviderTools;`` / ``using static
903
+ Dapper.SqlMapper;`` / ``using Foo = Dapper.X;``); we recover the imported
904
+ namespace for the node.
905
+ """
906
+ targets: list[CegImportTarget] = []
907
+ seen: set[str] = set()
908
+ for using_lines in internal.values():
909
+ for line in using_lines:
910
+ match = _CSHARP_USING_LINE_RE.search(line)
911
+ if not match:
912
+ continue
913
+ namespace = match.group(1)
914
+ if not namespace or namespace in seen:
915
+ continue
916
+ seen.add(namespace)
917
+ targets.append(
918
+ CegImportTarget(
919
+ target_id=f"module:{namespace}",
920
+ node_type="module",
921
+ node_kwargs={"name": namespace},
922
+ evidence_method="csharp_using",
923
+ confidence=0.90,
924
+ )
925
+ )
926
+ return targets
927
+
928
+
794
929
  #: Per-language scanner CEG-import resolvers (registry DATA). Languages without
795
930
  #: an entry contribute NO import edges, byte-identical to the former scanner
796
931
  #: block that only handled python and typescript/javascript.
@@ -802,6 +937,7 @@ _CEG_IMPORT_RESOLVERS: dict[
802
937
  "python": _ceg_targets_python,
803
938
  "java": _ceg_targets_java,
804
939
  "cpp": _ceg_targets_cpp,
940
+ "csharp": _ceg_targets_csharp,
805
941
  }
806
942
 
807
943
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "codd-dev"
7
- version = "3.7.4"
7
+ version = "3.7.5"
8
8
  description = "CoDD: Coherence-Driven Development — cross-artifact change impact analysis"
9
9
  readme = "README.md"
10
10
  license = "MIT"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes