codd-dev 2.7.0__tar.gz → 2.8.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (424) hide show
  1. {codd_dev-2.7.0 → codd_dev-2.8.0}/PKG-INFO +1 -1
  2. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/cli.py +102 -2
  3. codd_dev-2.8.0/codd/init/llm_lexicon_suggester.py +234 -0
  4. {codd_dev-2.7.0 → codd_dev-2.8.0}/pyproject.toml +1 -1
  5. {codd_dev-2.7.0 → codd_dev-2.8.0}/.gitignore +0 -0
  6. {codd_dev-2.7.0 → codd_dev-2.8.0}/LICENSE +0 -0
  7. {codd_dev-2.7.0 → codd_dev-2.8.0}/README.md +0 -0
  8. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/__init__.py +0 -0
  9. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/__main__.py +0 -0
  10. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/_git_helper.py +0 -0
  11. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/ask_user_question_adapter.py +0 -0
  12. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/assembler.py +0 -0
  13. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/bridge.py +0 -0
  14. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/brownfield/__init__.py +0 -0
  15. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/brownfield/pipeline.py +0 -0
  16. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/clustering.py +0 -0
  17. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/coherence_adapters.py +0 -0
  18. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/coherence_engine.py +0 -0
  19. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/config.py +0 -0
  20. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/contracts.py +0 -0
  21. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/coverage_auditor.py +0 -0
  22. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/coverage_metrics.py +0 -0
  23. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/dag/__init__.py +0 -0
  24. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/dag/builder.py +0 -0
  25. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/dag/checks/__init__.py +0 -0
  26. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/dag/checks/depends_on_consistency.py +0 -0
  27. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/dag/checks/deployment_completeness.py +0 -0
  28. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/dag/checks/edge_validity.py +0 -0
  29. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/dag/checks/environment_coverage.py +0 -0
  30. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/dag/checks/implementation_coverage.py +0 -0
  31. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/dag/checks/node_completeness.py +0 -0
  32. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/dag/checks/task_completion.py +0 -0
  33. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/dag/checks/transitive_closure.py +0 -0
  34. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/dag/checks/user_journey_coherence.py +0 -0
  35. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/dag/coverage_axes.py +0 -0
  36. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/dag/defaults/cli.yaml +0 -0
  37. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
  38. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/dag/defaults/csharp.yaml +0 -0
  39. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/dag/defaults/elixir.yaml +0 -0
  40. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/dag/defaults/generic.yaml +0 -0
  41. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/dag/defaults/iot.yaml +0 -0
  42. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/dag/defaults/java.yaml +0 -0
  43. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/dag/defaults/kotlin.yaml +0 -0
  44. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/dag/defaults/mobile.yaml +0 -0
  45. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/dag/defaults/ruby.yaml +0 -0
  46. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/dag/defaults/rust.yaml +0 -0
  47. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/dag/defaults/scala.yaml +0 -0
  48. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/dag/defaults/swift.yaml +0 -0
  49. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
  50. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/dag/defaults/web.yaml +0 -0
  51. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/dag/extractor.py +0 -0
  52. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/dag/runner.py +0 -0
  53. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/defaults.yaml +0 -0
  54. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/deploy_targets/__init__.py +0 -0
  55. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/deploy_targets/app_service.py +0 -0
  56. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/deploy_targets/base.py +0 -0
  57. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/deploy_targets/docker_compose.py +0 -0
  58. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/deployer.py +0 -0
  59. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/deployment/__init__.py +0 -0
  60. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/deployment/checks/__init__.py +0 -0
  61. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
  62. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
  63. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
  64. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
  65. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/deployment/extractor.py +0 -0
  66. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/deployment/providers/__init__.py +0 -0
  67. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/deployment/providers/ai_command.py +0 -0
  68. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/deployment/providers/llm_consideration.py +0 -0
  69. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/deployment/providers/schema/__init__.py +0 -0
  70. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/deployment/providers/schema/prisma.py +0 -0
  71. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/deployment/providers/target/__init__.py +0 -0
  72. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/deployment/providers/target/docker_compose.py +0 -0
  73. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/deployment/providers/verification/__init__.py +0 -0
  74. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
  75. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
  76. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
  77. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
  78. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
  79. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/deployment/providers/verification/curl.py +0 -0
  80. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
  81. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
  82. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/deployment/providers/verification/playwright.py +0 -0
  83. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/design_md.py +0 -0
  84. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/diff/__init__.py +0 -0
  85. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/diff/apply.py +0 -0
  86. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/diff/engine.py +0 -0
  87. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/diff/persistence.py +0 -0
  88. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/diff/templates/diff_prompt.md +0 -0
  89. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/drift.py +0 -0
  90. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/e2e_extractor.py +0 -0
  91. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/e2e_generator.py +0 -0
  92. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/e2e_runner.py +0 -0
  93. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/elicit/__init__.py +0 -0
  94. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/elicit/apply.py +0 -0
  95. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/elicit/engine.py +0 -0
  96. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/elicit/finding.py +0 -0
  97. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/elicit/formatters/__init__.py +0 -0
  98. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/elicit/formatters/base.py +0 -0
  99. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/elicit/formatters/interactive.py +0 -0
  100. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/elicit/formatters/json_fmt.py +0 -0
  101. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/elicit/formatters/md.py +0 -0
  102. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/elicit/lexicon_loader.py +0 -0
  103. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/elicit/persistence.py +0 -0
  104. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
  105. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/env_refs.py +0 -0
  106. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/extract_ai.py +0 -0
  107. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/extractor.py +0 -0
  108. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/fixer.py +0 -0
  109. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/fixup_drift.py +0 -0
  110. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/fixup_drift_strategies/__init__.py +0 -0
  111. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
  112. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
  113. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
  114. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/generator.py +0 -0
  115. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/graph.py +0 -0
  116. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/hitl_session.py +0 -0
  117. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/hooks/__init__.py +0 -0
  118. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/hooks/pre-commit +0 -0
  119. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
  120. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/hooks/recipes/codex_hook.sh +0 -0
  121. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
  122. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
  123. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/implementer/__init__.py +0 -0
  124. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/implementer/chunked_runner.py +0 -0
  125. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/implementer/typecheck_loop.py +0 -0
  126. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/implementer.py +0 -0
  127. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/inheritance.py +0 -0
  128. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/init/__init__.py +0 -0
  129. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/init/lexicon_suggest.py +0 -0
  130. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/init/stack_detector.py +0 -0
  131. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/knowledge_fetcher.py +0 -0
  132. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/lexicon.py +0 -0
  133. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/lexicon_cli/__init__.py +0 -0
  134. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
  135. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/lexicon_cli/formatters/html.py +0 -0
  136. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
  137. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/lexicon_cli/formatters/md.py +0 -0
  138. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/lexicon_cli/inspector.py +0 -0
  139. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/lexicon_cli/manager.py +0 -0
  140. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/lexicon_cli/reporter.py +0 -0
  141. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/lexicon_cli/threshold.py +0 -0
  142. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/llm/__init__.py +0 -0
  143. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/llm/approval.py +0 -0
  144. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/llm/best_practice_augmenter.py +0 -0
  145. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/llm/criteria_expander.py +0 -0
  146. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/llm/design_doc_extractor.py +0 -0
  147. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/llm/impl_step_deriver.py +0 -0
  148. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/llm/means_catalog_loader.py +0 -0
  149. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/llm/parser.py +0 -0
  150. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/llm/plan_deriver.py +0 -0
  151. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/llm/prompt_builder.py +0 -0
  152. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/llm/strategy_validator.py +0 -0
  153. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
  154. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
  155. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
  156. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
  157. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
  158. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/llm/templates/meta_instruction.md +0 -0
  159. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/llm/templates/plan_derive_meta.md +0 -0
  160. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
  161. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/mcp_server.py +0 -0
  162. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/measure.py +0 -0
  163. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/parsing.py +0 -0
  164. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/planner.py +0 -0
  165. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/policy.py +0 -0
  166. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/preflight/__init__.py +0 -0
  167. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/preflight/defaults/cli.yaml +0 -0
  168. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/preflight/defaults/iot.yaml +0 -0
  169. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/preflight/defaults/mobile.yaml +0 -0
  170. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/preflight/defaults/web.yaml +0 -0
  171. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/propagate.py +0 -0
  172. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/propagator.py +0 -0
  173. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/registry.py +0 -0
  174. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/repair/__init__.py +0 -0
  175. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/repair/approval_repair.py +0 -0
  176. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/repair/engine.py +0 -0
  177. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/repair/git_patcher.py +0 -0
  178. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/repair/history.py +0 -0
  179. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/repair/llm_repair_engine.py +0 -0
  180. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/repair/loop.py +0 -0
  181. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/repair/primary_picker.py +0 -0
  182. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/repair/proof_breaks.py +0 -0
  183. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/repair/repair_result.py +0 -0
  184. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/repair/repairability_classifier.py +0 -0
  185. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/repair/schema.py +0 -0
  186. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/repair/templates/analyze_meta.md +0 -0
  187. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/repair/templates/propose_meta.md +0 -0
  188. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
  189. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/repair/templates/repairability_meta.md +0 -0
  190. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/repair/verify_runner.py +0 -0
  191. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/repair_slice.py +0 -0
  192. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/require.py +0 -0
  193. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/require_plugins.py +0 -0
  194. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/require_propagate.py +0 -0
  195. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
  196. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
  197. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
  198. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/required_artifacts/defaults/web.yaml +0 -0
  199. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/required_artifacts_deriver.py +0 -0
  200. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
  201. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
  202. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
  203. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
  204. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/requirement_completeness_auditor.py +0 -0
  205. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/restore.py +0 -0
  206. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/routes_extractor.py +0 -0
  207. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/scanner.py +0 -0
  208. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/schema_refs.py +0 -0
  209. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/screen_flow_validator.py +0 -0
  210. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/screen_transition_extractor.py +0 -0
  211. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/screen_transitions/defaults.yaml +0 -0
  212. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/synth.py +0 -0
  213. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/templates/codd.yaml.tmpl +0 -0
  214. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/templates/conventions.yaml.tmpl +0 -0
  215. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
  216. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/templates/doc_links.yaml.tmpl +0 -0
  217. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
  218. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
  219. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
  220. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
  221. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
  222. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/templates/extracted/system-context.md.j2 +0 -0
  223. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/templates/gitignore.tmpl +0 -0
  224. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/templates/lexicon_questions.md +0 -0
  225. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/templates/lexicon_schema.yaml +0 -0
  226. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/templates/overrides.yaml.tmpl +0 -0
  227. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/traceability.py +0 -0
  228. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/validator.py +0 -0
  229. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/watch/__init__.py +0 -0
  230. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/watch/events.py +0 -0
  231. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/watch/propagation_log.py +0 -0
  232. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/watch/propagation_pipeline.py +0 -0
  233. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/watch/test_runner.py +0 -0
  234. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/watch/watcher.py +0 -0
  235. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd/wiring.py +0 -0
  236. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
  237. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
  238. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
  239. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
  240. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
  241. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
  242. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
  243. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
  244. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
  245. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
  246. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
  247. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
  248. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
  249. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
  250. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
  251. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
  252. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
  253. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
  254. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
  255. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
  256. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
  257. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
  258. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
  259. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
  260. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
  261. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
  262. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
  263. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
  264. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
  265. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
  266. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
  267. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
  268. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
  269. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
  270. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
  271. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
  272. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
  273. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
  274. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
  275. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
  276. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
  277. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
  278. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
  279. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
  280. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
  281. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
  282. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
  283. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
  284. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
  285. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
  286. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
  287. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
  288. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
  289. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
  290. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
  291. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
  292. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
  293. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
  294. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
  295. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
  296. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
  297. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
  298. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
  299. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
  300. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
  301. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
  302. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
  303. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
  304. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
  305. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
  306. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
  307. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
  308. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
  309. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
  310. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
  311. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
  312. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
  313. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
  314. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
  315. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
  316. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
  317. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
  318. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
  319. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
  320. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
  321. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
  322. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
  323. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
  324. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
  325. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
  326. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
  327. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
  328. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
  329. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
  330. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
  331. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
  332. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
  333. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
  334. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
  335. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
  336. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
  337. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
  338. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
  339. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
  340. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
  341. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
  342. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
  343. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
  344. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
  345. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
  346. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
  347. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
  348. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
  349. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
  350. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
  351. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
  352. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
  353. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
  354. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
  355. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
  356. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
  357. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
  358. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
  359. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
  360. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
  361. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
  362. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
  363. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
  364. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
  365. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
  366. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
  367. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
  368. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
  369. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
  370. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
  371. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
  372. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
  373. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
  374. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
  375. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
  376. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
  377. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
  378. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
  379. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
  380. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
  381. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
  382. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
  383. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
  384. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
  385. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
  386. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
  387. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
  388. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
  389. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
  390. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
  391. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
  392. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
  393. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
  394. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
  395. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
  396. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
  397. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
  398. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
  399. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
  400. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
  401. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
  402. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
  403. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
  404. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
  405. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
  406. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
  407. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
  408. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
  409. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
  410. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
  411. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
  412. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
  413. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
  414. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
  415. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
  416. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
  417. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
  418. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
  419. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
  420. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
  421. {codd_dev-2.7.0 → codd_dev-2.8.0}/codd_plugins/stack_map.yaml +0 -0
  422. {codd_dev-2.7.0 → codd_dev-2.8.0}/docs/cookbook/cdp_browser/README.md +0 -0
  423. {codd_dev-2.7.0 → codd_dev-2.8.0}/docs/requirements/README.md +0 -0
  424. {codd_dev-2.7.0 → codd_dev-2.8.0}/tests/integration/standalone_repair_skeleton/README.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codd-dev
3
- Version: 2.7.0
3
+ Version: 2.8.0
4
4
  Summary: CoDD: Coherence-Driven Development — cross-artifact change impact analysis
5
5
  Project-URL: Homepage, https://github.com/yohey-w/codd-dev
6
6
  Project-URL: Repository, https://github.com/yohey-w/codd-dev
@@ -463,6 +463,18 @@ def _format_preflight_ntfy(result: Any) -> str:
463
463
  default=True,
464
464
  help="Detect project manifests and offer lexicon plug-in suggestions.",
465
465
  )
466
+ @click.option(
467
+ "--llm-enhanced",
468
+ is_flag=True,
469
+ default=False,
470
+ help="Use AI to recommend lexicons from requirements and design context.",
471
+ )
472
+ @click.option(
473
+ "--auto-approve",
474
+ is_flag=True,
475
+ default=False,
476
+ help="Apply high and medium confidence AI lexicon recommendations without prompting.",
477
+ )
466
478
  def init(
467
479
  project_name: str,
468
480
  language: str,
@@ -470,6 +482,8 @@ def init(
470
482
  requirements: str | None,
471
483
  config_dir: str,
472
484
  suggest_lexicons: bool,
485
+ llm_enhanced: bool,
486
+ auto_approve: bool,
473
487
  ):
474
488
  """Initialize CoDD in a project directory."""
475
489
  dest_path = Path(dest).resolve()
@@ -521,10 +535,15 @@ def init(
521
535
  click.echo(f" or: codd generate --wave 2 (auto-generates everything)")
522
536
 
523
537
  if suggest_lexicons:
524
- _offer_lexicon_suggestions(dest_path)
538
+ _offer_lexicon_suggestions(dest_path, llm_enhanced=llm_enhanced, auto_approve=auto_approve)
525
539
 
526
540
 
527
- def _offer_lexicon_suggestions(project_root: Path) -> None:
541
+ def _offer_lexicon_suggestions(
542
+ project_root: Path,
543
+ *,
544
+ llm_enhanced: bool = False,
545
+ auto_approve: bool = False,
546
+ ) -> None:
528
547
  from codd.init.lexicon_suggest import (
529
548
  append_suggested_lexicons,
530
549
  describe_lexicons,
@@ -533,6 +552,42 @@ def _offer_lexicon_suggestions(project_root: Path) -> None:
533
552
  )
534
553
  from codd.init.stack_detector import StackDetector
535
554
 
555
+ if llm_enhanced:
556
+ from codd.init.llm_lexicon_suggester import llm_recommend_lexicons
557
+
558
+ llm_result = llm_recommend_lexicons(project_root)
559
+ if llm_result.recommendations:
560
+ descriptions = describe_lexicons(rec.lexicon_id for rec in llm_result.recommendations)
561
+ click.echo("")
562
+ click.echo("[LLM-enhanced] Analyzing project ...")
563
+ click.echo("[LLM-enhanced] Detected:")
564
+ click.echo(f" - Domain: {llm_result.detected_domain or 'unknown'}")
565
+ click.echo(f" - Compliance: {_format_detected_items(llm_result.detected_compliance)}")
566
+ click.echo(f" - Tech stack: {_format_detected_items(llm_result.detected_tech_stack)}")
567
+ click.echo(f" - Integrations: {_format_detected_items(llm_result.detected_integrations)}")
568
+ click.echo("")
569
+ click.echo("[LLM-enhanced] Recommended lexicons:")
570
+ for index, recommendation in enumerate(llm_result.recommendations, start=1):
571
+ description = descriptions.get(recommendation.lexicon_id, "")
572
+ suffix = f" ({description})" if description else ""
573
+ click.echo(
574
+ f" {index}. {_confidence_icon(recommendation.confidence)} "
575
+ f"{recommendation.lexicon_id}{suffix} [{recommendation.confidence}]"
576
+ )
577
+ if recommendation.reason:
578
+ click.echo(f" {recommendation.reason}")
579
+
580
+ selected = _select_llm_recommendations(llm_result, auto_approve=auto_approve)
581
+ if not selected:
582
+ click.echo("LLM-enhanced lexicons not added.")
583
+ return
584
+ path = append_suggested_lexicons(project_root, selected)
585
+ rel_path = path.relative_to(project_root).as_posix()
586
+ click.echo(f"{rel_path} updated ({len(selected)} suggested lexicons)")
587
+ return
588
+ click.echo("")
589
+ click.echo("[LLM-enhanced] No usable recommendation; falling back to stack-based suggestions.")
590
+
536
591
  detection = StackDetector().detect(project_root)
537
592
  if not detection.stack_hints:
538
593
  return
@@ -559,6 +614,51 @@ def _offer_lexicon_suggestions(project_root: Path) -> None:
559
614
  click.echo(f"{rel_path} updated ({len(suggestions)} suggested lexicons)")
560
615
 
561
616
 
617
+ def _format_detected_items(items: list[str]) -> str:
618
+ return ", ".join(items) if items else "none"
619
+
620
+
621
+ def _confidence_icon(confidence: str) -> str:
622
+ return {"high": "✅", "medium": "⚠️", "low": "△"}.get(confidence, "△")
623
+
624
+
625
+ def _select_llm_recommendations(llm_result: Any, *, auto_approve: bool) -> list[str]:
626
+ if auto_approve:
627
+ return [
628
+ recommendation.lexicon_id
629
+ for recommendation in llm_result.recommendations
630
+ if recommendation.confidence in {"high", "medium"}
631
+ ]
632
+
633
+ choice = click.prompt("Apply all recommended? [Y/n/select]", default="Y", show_default=False).strip().lower()
634
+ if choice in {"y", "yes", ""}:
635
+ return [
636
+ recommendation.lexicon_id
637
+ for recommendation in llm_result.recommendations
638
+ if recommendation.confidence in {"high", "medium"}
639
+ ]
640
+ if choice in {"n", "no"}:
641
+ return []
642
+ if choice != "select":
643
+ click.echo("Invalid selection; suggested lexicons not added.")
644
+ return []
645
+
646
+ raw_numbers = click.prompt("Select recommendation numbers", default="", show_default=False).strip()
647
+ selected: list[str] = []
648
+ for token in re.split(r"[\s,]+", raw_numbers):
649
+ if not token:
650
+ continue
651
+ try:
652
+ index = int(token)
653
+ except ValueError:
654
+ continue
655
+ if 1 <= index <= len(llm_result.recommendations):
656
+ lexicon_id = llm_result.recommendations[index - 1].lexicon_id
657
+ if lexicon_id not in selected:
658
+ selected.append(lexicon_id)
659
+ return selected
660
+
661
+
562
662
  @main.group("lexicon")
563
663
  def lexicon_cmd() -> None:
564
664
  """Manage bundled lexicon plug-ins."""
@@ -0,0 +1,234 @@
1
+ """LLM-backed lexicon recommendation from project context."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from dataclasses import dataclass
6
+ import json
7
+ from pathlib import Path
8
+ from typing import Any, Literal, Protocol
9
+
10
+ import yaml
11
+
12
+ from codd.deployment.providers.ai_command import AiCommandError, SubprocessAiCommand
13
+ from codd.init.lexicon_suggest import default_lexicon_root
14
+ from codd.init.stack_detector import StackDetector
15
+
16
+
17
+ Confidence = Literal["high", "medium", "low"]
18
+ _CONFIDENCES: set[str] = {"high", "medium", "low"}
19
+ _MAX_DOC_CHARS = 24_000
20
+ _MAX_FILE_CHARS = 4_000
21
+
22
+
23
+ class AiCommand(Protocol):
24
+ def invoke(self, prompt: str, model: str | None = None) -> str:
25
+ """Return an AI response for the supplied prompt."""
26
+
27
+
28
+ @dataclass(frozen=True)
29
+ class LlmLexiconRecommendation:
30
+ lexicon_id: str
31
+ confidence: Confidence
32
+ reason: str
33
+
34
+
35
+ @dataclass(frozen=True)
36
+ class LlmLexiconResult:
37
+ detected_domain: str
38
+ detected_compliance: list[str]
39
+ detected_tech_stack: list[str]
40
+ detected_integrations: list[str]
41
+ recommendations: list[LlmLexiconRecommendation]
42
+
43
+
44
+ def llm_recommend_lexicons(
45
+ project_root: Path,
46
+ *,
47
+ ai_command: AiCommand | None = None,
48
+ ) -> LlmLexiconResult:
49
+ """Recommend lexicons via AI, returning an empty result on unusable input."""
50
+
51
+ root = Path(project_root)
52
+ context = _collect_project_context(root)
53
+ if not context["requirements"]:
54
+ return _empty_result()
55
+
56
+ available = _available_lexicons()
57
+ if not available:
58
+ return _empty_result()
59
+
60
+ command = ai_command or SubprocessAiCommand(project_root=root)
61
+ prompt = _build_prompt(context, available)
62
+ try:
63
+ raw_output = command.invoke(prompt)
64
+ payload = json.loads(_extract_json_object(raw_output))
65
+ except (AiCommandError, OSError, TypeError, ValueError, json.JSONDecodeError):
66
+ return _empty_result()
67
+ return _result_from_payload(payload, set(available))
68
+
69
+
70
+ def _collect_project_context(project_root: Path) -> dict[str, Any]:
71
+ requirements = _read_matching_files(
72
+ project_root,
73
+ [
74
+ "requirements.md",
75
+ ".codd/requirements.md",
76
+ "codd/requirements.md",
77
+ "docs/requirements.md",
78
+ "docs/requirements*.md",
79
+ "docs/requirements/**/*.md",
80
+ ],
81
+ )
82
+ designs = _read_matching_files(
83
+ project_root,
84
+ [
85
+ "design/*.md",
86
+ ".codd/design/*.md",
87
+ "codd/design/*.md",
88
+ "docs/design/*.md",
89
+ ],
90
+ )
91
+ detection = StackDetector().detect(project_root)
92
+ return {
93
+ "requirements": requirements,
94
+ "designs": designs,
95
+ "tech_stack_hints": detection.stack_hints,
96
+ "detected_signals": detection.detected_signals,
97
+ }
98
+
99
+
100
+ def _read_matching_files(project_root: Path, patterns: list[str]) -> list[dict[str, str]]:
101
+ seen: set[Path] = set()
102
+ files: list[dict[str, str]] = []
103
+ budget = _MAX_DOC_CHARS
104
+ for pattern in patterns:
105
+ for path in sorted(project_root.glob(pattern)):
106
+ if path in seen or not path.is_file():
107
+ continue
108
+ seen.add(path)
109
+ if budget <= 0:
110
+ return files
111
+ text = path.read_text(encoding="utf-8", errors="replace")[: min(_MAX_FILE_CHARS, budget)]
112
+ budget -= len(text)
113
+ files.append({"path": path.relative_to(project_root).as_posix(), "content": text})
114
+ return files
115
+
116
+
117
+ def _available_lexicons() -> dict[str, str]:
118
+ root = default_lexicon_root()
119
+ available: dict[str, str] = {}
120
+ if not root.is_dir():
121
+ return available
122
+ for manifest in sorted(root.glob("*/manifest.yaml")):
123
+ try:
124
+ payload = yaml.safe_load(manifest.read_text(encoding="utf-8")) or {}
125
+ except (OSError, yaml.YAMLError):
126
+ continue
127
+ if not isinstance(payload, dict):
128
+ continue
129
+ lexicon_id = manifest.parent.name
130
+ if not lexicon_id:
131
+ continue
132
+ available[lexicon_id] = str(payload.get("description") or "").strip()
133
+ return available
134
+
135
+
136
+ def _build_prompt(context: dict[str, Any], available_lexicons: dict[str, str]) -> str:
137
+ payload = {
138
+ "available_lexicons": available_lexicons,
139
+ "project_context": context,
140
+ "required_output_schema": {
141
+ "detected_domain": "string",
142
+ "detected_compliance": ["string"],
143
+ "detected_tech_stack": ["string"],
144
+ "detected_integrations": ["string"],
145
+ "recommendations": [
146
+ {
147
+ "lexicon_id": "string from available_lexicons keys",
148
+ "confidence": "high | medium | low",
149
+ "reason": "short explanation",
150
+ }
151
+ ],
152
+ },
153
+ }
154
+ return (
155
+ "You are a requirements engineer. Analyze the project's documentation and "
156
+ "technology signals. Identify the business domain, compliance obligations, "
157
+ "technology stack, and external integrations using only the supplied project "
158
+ "context. From the available lexicons, recommend the most relevant entries. "
159
+ "Return JSON only. Do not include Markdown fences or prose.\n\n"
160
+ f"{json.dumps(payload, ensure_ascii=False, indent=2)}"
161
+ )
162
+
163
+
164
+ def _extract_json_object(raw_output: str) -> str:
165
+ text = raw_output.strip()
166
+ if text.startswith("```"):
167
+ lines = text.splitlines()
168
+ if lines and lines[0].startswith("```"):
169
+ lines = lines[1:]
170
+ if lines and lines[-1].strip() == "```":
171
+ lines = lines[:-1]
172
+ text = "\n".join(lines).strip()
173
+ start = text.find("{")
174
+ end = text.rfind("}")
175
+ if start == -1 or end == -1 or end < start:
176
+ raise ValueError("LLM output did not contain a JSON object")
177
+ return text[start : end + 1]
178
+
179
+
180
+ def _result_from_payload(payload: Any, available_ids: set[str]) -> LlmLexiconResult:
181
+ if not isinstance(payload, dict):
182
+ return _empty_result()
183
+
184
+ recommendations: list[LlmLexiconRecommendation] = []
185
+ seen: set[str] = set()
186
+ rows = payload.get("recommendations", [])
187
+ if isinstance(rows, list):
188
+ for row in rows:
189
+ if not isinstance(row, dict):
190
+ continue
191
+ lexicon_id = str(row.get("lexicon_id") or "").strip()
192
+ confidence = str(row.get("confidence") or "").strip().lower()
193
+ if lexicon_id not in available_ids or confidence not in _CONFIDENCES or lexicon_id in seen:
194
+ continue
195
+ seen.add(lexicon_id)
196
+ recommendations.append(
197
+ LlmLexiconRecommendation(
198
+ lexicon_id=lexicon_id,
199
+ confidence=confidence, # type: ignore[arg-type]
200
+ reason=str(row.get("reason") or "").strip(),
201
+ )
202
+ )
203
+
204
+ return LlmLexiconResult(
205
+ detected_domain=str(payload.get("detected_domain") or "").strip(),
206
+ detected_compliance=_string_list(payload.get("detected_compliance")),
207
+ detected_tech_stack=_string_list(payload.get("detected_tech_stack")),
208
+ detected_integrations=_string_list(payload.get("detected_integrations")),
209
+ recommendations=recommendations,
210
+ )
211
+
212
+
213
+ def _string_list(value: Any) -> list[str]:
214
+ if not isinstance(value, list):
215
+ return []
216
+ return [str(item).strip() for item in value if str(item).strip()]
217
+
218
+
219
+ def _empty_result() -> LlmLexiconResult:
220
+ return LlmLexiconResult(
221
+ detected_domain="",
222
+ detected_compliance=[],
223
+ detected_tech_stack=[],
224
+ detected_integrations=[],
225
+ recommendations=[],
226
+ )
227
+
228
+
229
+ __all__ = [
230
+ "AiCommand",
231
+ "LlmLexiconRecommendation",
232
+ "LlmLexiconResult",
233
+ "llm_recommend_lexicons",
234
+ ]
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "codd-dev"
7
- version = "2.7.0"
7
+ version = "2.8.0"
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
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