codd-dev 2.87.0__tar.gz → 2.89.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 (620) hide show
  1. {codd_dev-2.87.0 → codd_dev-2.89.0}/PKG-INFO +1 -1
  2. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/__init__.py +1 -1
  3. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/cli.py +44 -0
  4. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/e2e_harness.py +6 -1
  5. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/greenfield/pipeline.py +65 -0
  6. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/implementer.py +38 -4
  7. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/parsing/regex_strategies.py +93 -0
  8. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/repair_slice.py +36 -20
  9. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/stack/project.py +42 -0
  10. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/vb_marker_authenticity.py +17 -1
  11. {codd_dev-2.87.0 → codd_dev-2.89.0}/pyproject.toml +1 -1
  12. {codd_dev-2.87.0 → codd_dev-2.89.0}/.gitignore +0 -0
  13. {codd_dev-2.87.0 → codd_dev-2.89.0}/LICENSE +0 -0
  14. {codd_dev-2.87.0 → codd_dev-2.89.0}/README.md +0 -0
  15. {codd_dev-2.87.0 → codd_dev-2.89.0}/bench_fixture/README.md +0 -0
  16. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/__main__.py +0 -0
  17. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/_git_helper.py +0 -0
  18. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/action_outcome.py +0 -0
  19. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/ai_invoke.py +0 -0
  20. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/ai_patch.py +0 -0
  21. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/artifact_contract.py +0 -0
  22. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/artifact_ids.py +0 -0
  23. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/artifacts/catalog.yaml +0 -0
  24. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/ask_user_question_adapter.py +0 -0
  25. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/assembler.py +0 -0
  26. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/bridge.py +0 -0
  27. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/brownfield/__init__.py +0 -0
  28. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/brownfield/pipeline.py +0 -0
  29. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/capability_completeness.py +0 -0
  30. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/claude_cli.py +0 -0
  31. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/clustering.py +0 -0
  32. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/coherence_adapters.py +0 -0
  33. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/coherence_engine.py +0 -0
  34. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/confidence.py +0 -0
  35. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/config.py +0 -0
  36. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/config_schema.py +0 -0
  37. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/contracts.py +0 -0
  38. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/contracts_registry/__init__.py +0 -0
  39. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/contracts_registry/__main__.py +0 -0
  40. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/contracts_registry/certify.py +0 -0
  41. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/contracts_registry/generate_matrix.py +0 -0
  42. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/contracts_registry/registry.py +0 -0
  43. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/coverage_auditor.py +0 -0
  44. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/coverage_execution_coherence.py +0 -0
  45. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/coverage_metrics.py +0 -0
  46. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/__init__.py +0 -0
  47. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/auto_repair.py +0 -0
  48. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/builder.py +0 -0
  49. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/checks/__init__.py +0 -0
  50. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
  51. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/checks/artifact_contract_check.py +0 -0
  52. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/checks/ci_health.py +0 -0
  53. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/checks/dependency_freshness.py +0 -0
  54. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/checks/depends_on_consistency.py +0 -0
  55. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/checks/deployment_completeness.py +0 -0
  56. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/checks/edge_validity.py +0 -0
  57. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/checks/environment_coverage.py +0 -0
  58. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/checks/implementation_coverage.py +0 -0
  59. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/checks/node_completeness.py +0 -0
  60. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/checks/opt_out.py +0 -0
  61. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/checks/task_completion.py +0 -0
  62. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/checks/transitive_closure.py +0 -0
  63. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/checks/ui_coherence.py +0 -0
  64. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/checks/user_journey_coherence.py +0 -0
  65. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/coverage_axes.py +0 -0
  66. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/defaults/cli.yaml +0 -0
  67. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
  68. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/defaults/csharp.yaml +0 -0
  69. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/defaults/elixir.yaml +0 -0
  70. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/defaults/generic.yaml +0 -0
  71. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/defaults/iot.yaml +0 -0
  72. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/defaults/java.yaml +0 -0
  73. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/defaults/kotlin.yaml +0 -0
  74. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/defaults/mobile.yaml +0 -0
  75. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/defaults/ruby.yaml +0 -0
  76. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/defaults/rust.yaml +0 -0
  77. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/defaults/scala.yaml +0 -0
  78. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/defaults/swift.yaml +0 -0
  79. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
  80. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/defaults/web.yaml +0 -0
  81. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/extractor.py +0 -0
  82. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/impact.py +0 -0
  83. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dag/runner.py +0 -0
  84. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/defaults.py +0 -0
  85. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/defaults.yaml +0 -0
  86. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/dependency_lock_coherence.py +0 -0
  87. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deploy_targets/__init__.py +0 -0
  88. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deploy_targets/app_service.py +0 -0
  89. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deploy_targets/base.py +0 -0
  90. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deploy_targets/docker_compose.py +0 -0
  91. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deployer.py +0 -0
  92. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deployment/__init__.py +0 -0
  93. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deployment/checks/__init__.py +0 -0
  94. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
  95. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
  96. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
  97. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
  98. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deployment/extractor.py +0 -0
  99. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deployment/providers/__init__.py +0 -0
  100. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deployment/providers/ai_command.py +0 -0
  101. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deployment/providers/ai_command_factory.py +0 -0
  102. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deployment/providers/codex_app_server.py +0 -0
  103. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deployment/providers/llm_consideration.py +0 -0
  104. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deployment/providers/schema/__init__.py +0 -0
  105. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deployment/providers/schema/prisma.py +0 -0
  106. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deployment/providers/target/__init__.py +0 -0
  107. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deployment/providers/target/docker_compose.py +0 -0
  108. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deployment/providers/verification/__init__.py +0 -0
  109. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
  110. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
  111. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
  112. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
  113. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
  114. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deployment/providers/verification/curl.py +0 -0
  115. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
  116. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
  117. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deployment/providers/verification/playwright.py +0 -0
  118. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deployment/providers/verification/pytest_http.py +0 -0
  119. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/deployment/providers/verification/vitest.py +0 -0
  120. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/design_md.py +0 -0
  121. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/diff/__init__.py +0 -0
  122. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/diff/apply.py +0 -0
  123. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/diff/engine.py +0 -0
  124. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/diff/persistence.py +0 -0
  125. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/diff/templates/diff_prompt.md +0 -0
  126. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/discovery.py +0 -0
  127. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/drift.py +0 -0
  128. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/e2e_contract_coherence.py +0 -0
  129. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/e2e_extractor.py +0 -0
  130. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/e2e_generator.py +0 -0
  131. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/e2e_runner.py +0 -0
  132. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/elicit/__init__.py +0 -0
  133. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/elicit/apply.py +0 -0
  134. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/elicit/engine.py +0 -0
  135. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/elicit/finding.py +0 -0
  136. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/elicit/formatters/__init__.py +0 -0
  137. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/elicit/formatters/base.py +0 -0
  138. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/elicit/formatters/interactive.py +0 -0
  139. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/elicit/formatters/json_fmt.py +0 -0
  140. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/elicit/formatters/md.py +0 -0
  141. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/elicit/lexicon_loader.py +0 -0
  142. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/elicit/persistence.py +0 -0
  143. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
  144. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/env_refs.py +0 -0
  145. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/extract_ai.py +0 -0
  146. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/extract_paths.py +0 -0
  147. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/extractor.py +0 -0
  148. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/fix/__init__.py +0 -0
  149. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/fix/candidate_selector.py +0 -0
  150. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/fix/design_updater.py +0 -0
  151. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/fix/impl_propagation.py +0 -0
  152. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/fix/interactive_prompt.py +0 -0
  153. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/fix/phenomenon_fixer.py +0 -0
  154. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/fix/phenomenon_parser.py +0 -0
  155. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/fix/risk_classifier.py +0 -0
  156. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/fix/templates/clarification_question.txt +0 -0
  157. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/fix/templates/design_update.txt +0 -0
  158. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/fix/templates/impl_update.txt +0 -0
  159. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
  160. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/fix/templates/risk_assessment.txt +0 -0
  161. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/fix/templates_loader.py +0 -0
  162. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/fixer.py +0 -0
  163. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/fixup_drift.py +0 -0
  164. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/fixup_drift_strategies/__init__.py +0 -0
  165. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
  166. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
  167. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
  168. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/frontmatter.py +0 -0
  169. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/generator.py +0 -0
  170. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/git_evidence.py +0 -0
  171. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/graph.py +0 -0
  172. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/greenfield/__init__.py +0 -0
  173. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/hitl_session.py +0 -0
  174. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/hooks/__init__.py +0 -0
  175. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/hooks/pre-commit +0 -0
  176. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
  177. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
  178. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/hooks/recipes/codex_hook.sh +0 -0
  179. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
  180. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
  181. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/iac_nfr.py +0 -0
  182. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/implement_oracle.py +0 -0
  183. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/implement_oracle_scope.py +0 -0
  184. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/implement_oracle_types.py +0 -0
  185. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/implementer/__init__.py +0 -0
  186. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/implementer/chunked_runner.py +0 -0
  187. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/implementer/typecheck_loop.py +0 -0
  188. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/import_coherence.py +0 -0
  189. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/inheritance.py +0 -0
  190. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/init/__init__.py +0 -0
  191. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/init/lexicon_suggest.py +0 -0
  192. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/init/llm_lexicon_suggester.py +0 -0
  193. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/init/stack_detector.py +0 -0
  194. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/knowledge_fetcher.py +0 -0
  195. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/languages/__init__.py +0 -0
  196. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/languages/adapters/__init__.py +0 -0
  197. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/languages/adapters/implement_oracle.py +0 -0
  198. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/languages/adapters/oracle_go.py +0 -0
  199. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/languages/adapters/oracle_python.py +0 -0
  200. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/languages/adapters/oracle_typescript.py +0 -0
  201. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/languages/adapters/runner_report.py +0 -0
  202. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/languages/builtin_adapters.py +0 -0
  203. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/languages/compat.py +0 -0
  204. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/languages/contract.py +0 -0
  205. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/languages/loader.py +0 -0
  206. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/languages/oracle_executor.py +0 -0
  207. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/languages/path_planner.py +0 -0
  208. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/languages/profile.py +0 -0
  209. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/languages/profiles/go.yaml +0 -0
  210. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/languages/profiles/python.yaml +0 -0
  211. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/languages/profiles/typescript.yaml +0 -0
  212. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/languages/registry.py +0 -0
  213. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/languages/verify_executor.py +0 -0
  214. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/languages/verify_plan.py +0 -0
  215. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/lexicon.py +0 -0
  216. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/lexicon_cli/__init__.py +0 -0
  217. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
  218. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/lexicon_cli/formatters/html.py +0 -0
  219. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
  220. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/lexicon_cli/formatters/md.py +0 -0
  221. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/lexicon_cli/inspector.py +0 -0
  222. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/lexicon_cli/manager.py +0 -0
  223. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/lexicon_cli/reporter.py +0 -0
  224. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/lexicon_cli/threshold.py +0 -0
  225. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/llm/__init__.py +0 -0
  226. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/llm/approval.py +0 -0
  227. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/llm/best_practice_augmenter.py +0 -0
  228. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/llm/criteria_expander.py +0 -0
  229. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/llm/design_doc_extractor.py +0 -0
  230. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/llm/impl_step_deriver.py +0 -0
  231. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/llm/means_catalog_loader.py +0 -0
  232. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/llm/parser.py +0 -0
  233. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/llm/plan_deriver.py +0 -0
  234. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/llm/prompt_builder.py +0 -0
  235. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/llm/strategy_validator.py +0 -0
  236. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
  237. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
  238. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
  239. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
  240. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
  241. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/llm/templates/meta_instruction.md +0 -0
  242. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/llm/templates/plan_derive_meta.md +0 -0
  243. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
  244. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/mcp_server.py +0 -0
  245. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/measure.py +0 -0
  246. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/operational_e2e_audit.py +0 -0
  247. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/operations_derive.py +0 -0
  248. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/parsing/__init__.py +0 -0
  249. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/parsing/_shared.py +0 -0
  250. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/parsing/api_specs.py +0 -0
  251. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/parsing/extractor_registry.py +0 -0
  252. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/parsing/filesystem_routes.py +0 -0
  253. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/parsing/iac.py +0 -0
  254. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/parsing/python_ast.py +0 -0
  255. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/parsing/schemas.py +0 -0
  256. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/parsing/tests_builddeps.py +0 -0
  257. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/parsing/treesitter.py +0 -0
  258. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/planner.py +0 -0
  259. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/policy.py +0 -0
  260. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/preflight/__init__.py +0 -0
  261. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/preflight/defaults/cli.yaml +0 -0
  262. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/preflight/defaults/generic.yaml +0 -0
  263. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/preflight/defaults/iot.yaml +0 -0
  264. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/preflight/defaults/mobile.yaml +0 -0
  265. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/preflight/defaults/web.yaml +0 -0
  266. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/project_types.py +0 -0
  267. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/propagate.py +0 -0
  268. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/propagation_common.py +0 -0
  269. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/propagator.py +0 -0
  270. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/reconciliation_ledger.py +0 -0
  271. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/reference_resolution.py +0 -0
  272. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/registry.py +0 -0
  273. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/repair/__init__.py +0 -0
  274. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/repair/approval_repair.py +0 -0
  275. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/repair/auto_scope_guard.py +0 -0
  276. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/repair/engine.py +0 -0
  277. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/repair/git_patcher.py +0 -0
  278. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/repair/history.py +0 -0
  279. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/repair/llm_repair_engine.py +0 -0
  280. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/repair/loop.py +0 -0
  281. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/repair/primary_picker.py +0 -0
  282. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/repair/proof_breaks.py +0 -0
  283. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/repair/repair_result.py +0 -0
  284. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/repair/repairability_classifier.py +0 -0
  285. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/repair/schema.py +0 -0
  286. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/repair/templates/analyze_meta.md +0 -0
  287. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/repair/templates/propose_meta.md +0 -0
  288. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
  289. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/repair/templates/repairability_meta.md +0 -0
  290. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/repair/test_failure_attribution.py +0 -0
  291. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/repair/verify_runner.py +0 -0
  292. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/require.py +0 -0
  293. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/require_plugins.py +0 -0
  294. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/require_propagate.py +0 -0
  295. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
  296. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
  297. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
  298. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
  299. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/required_artifacts/defaults/web.yaml +0 -0
  300. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/required_artifacts_deriver.py +0 -0
  301. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
  302. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
  303. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
  304. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
  305. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
  306. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/requirement_completeness_auditor.py +0 -0
  307. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/requirement_reconciliation.py +0 -0
  308. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/requirements_meta.py +0 -0
  309. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/restoration_report.py +0 -0
  310. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/restore.py +0 -0
  311. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/routes_extractor.py +0 -0
  312. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/runtime_smoke/__init__.py +0 -0
  313. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/runtime_smoke/checks.py +0 -0
  314. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/runtime_smoke/config.py +0 -0
  315. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/runtime_smoke/report.py +0 -0
  316. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/runtime_smoke/runner.py +0 -0
  317. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/scanner.py +0 -0
  318. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/schema_refs.py +0 -0
  319. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/screen_flow_validator.py +0 -0
  320. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/screen_transition_extractor.py +0 -0
  321. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/screen_transitions/defaults.yaml +0 -0
  322. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/skills_cli/__init__.py +0 -0
  323. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/skills_cli/discovery.py +0 -0
  324. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/skills_cli/manager.py +0 -0
  325. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/skills_cli/paths.py +0 -0
  326. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/stack/__init__.py +0 -0
  327. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/stack/adapters/__init__.py +0 -0
  328. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/stack/adapters/_base.py +0 -0
  329. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/stack/adapters/nextjs.py +0 -0
  330. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/stack/adapters/playwright.py +0 -0
  331. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/stack/compose.py +0 -0
  332. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/stack/loader.py +0 -0
  333. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/stack/lock.py +0 -0
  334. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/stack/obligations.py +0 -0
  335. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/stack/profile.py +0 -0
  336. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/stack/profiles/addons/playwright.yaml +0 -0
  337. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/stack/profiles/addons/prisma.yaml +0 -0
  338. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/stack/profiles/frameworks/nextjs.yaml +0 -0
  339. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/stack/registry.py +0 -0
  340. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/stack/resolve.py +0 -0
  341. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/surface_reconciliation.py +0 -0
  342. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/synth.py +0 -0
  343. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/templates/codd.yaml.tmpl +0 -0
  344. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/templates/conventions.yaml.tmpl +0 -0
  345. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
  346. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/templates/doc_links.yaml.tmpl +0 -0
  347. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
  348. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
  349. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
  350. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
  351. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
  352. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/templates/extracted/system-context.md.j2 +0 -0
  353. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/templates/gitignore.tmpl +0 -0
  354. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/templates/lexicon_questions.md +0 -0
  355. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/templates/lexicon_schema.yaml +0 -0
  356. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/templates/overrides.yaml.tmpl +0 -0
  357. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/test_detection.py +0 -0
  358. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/test_import_coherence.py +0 -0
  359. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/traceability.py +0 -0
  360. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/validator.py +0 -0
  361. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/vb_rerun_scope.py +0 -0
  362. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/verifiable_behavior_audit.py +0 -0
  363. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/watch/__init__.py +0 -0
  364. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/watch/events.py +0 -0
  365. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/watch/propagation_log.py +0 -0
  366. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/watch/propagation_pipeline.py +0 -0
  367. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/watch/test_runner.py +0 -0
  368. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/watch/watcher.py +0 -0
  369. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd/wiring.py +0 -0
  370. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
  371. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
  372. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
  373. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
  374. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
  375. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
  376. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
  377. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
  378. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
  379. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
  380. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
  381. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
  382. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
  383. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
  384. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
  385. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
  386. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
  387. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
  388. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
  389. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
  390. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
  391. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
  392. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
  393. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
  394. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
  395. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
  396. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
  397. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
  398. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
  399. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
  400. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
  401. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
  402. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
  403. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
  404. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
  405. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
  406. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
  407. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
  408. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
  409. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
  410. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
  411. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
  412. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
  413. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
  414. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
  415. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
  416. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
  417. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
  418. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
  419. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
  420. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
  421. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
  422. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
  423. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
  424. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
  425. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
  426. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
  427. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
  428. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
  429. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
  430. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
  431. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
  432. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
  433. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
  434. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
  435. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
  436. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
  437. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
  438. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
  439. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
  440. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
  441. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
  442. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
  443. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
  444. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
  445. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
  446. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
  447. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
  448. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
  449. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
  450. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
  451. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
  452. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
  453. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
  454. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
  455. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
  456. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
  457. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
  458. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
  459. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
  460. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
  461. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
  462. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
  463. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
  464. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
  465. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
  466. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
  467. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
  468. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
  469. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
  470. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
  471. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
  472. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
  473. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
  474. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
  475. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
  476. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
  477. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
  478. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
  479. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
  480. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
  481. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
  482. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
  483. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
  484. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
  485. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
  486. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
  487. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
  488. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
  489. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
  490. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
  491. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
  492. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
  493. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
  494. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
  495. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
  496. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
  497. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
  498. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
  499. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
  500. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
  501. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
  502. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
  503. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
  504. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
  505. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
  506. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
  507. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
  508. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
  509. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
  510. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
  511. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
  512. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
  513. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
  514. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
  515. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
  516. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
  517. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
  518. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
  519. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
  520. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
  521. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
  522. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
  523. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
  524. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
  525. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
  526. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
  527. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
  528. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
  529. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
  530. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
  531. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
  532. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
  533. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
  534. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
  535. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
  536. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
  537. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
  538. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
  539. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
  540. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
  541. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
  542. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
  543. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
  544. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
  545. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
  546. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
  547. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
  548. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
  549. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
  550. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
  551. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
  552. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
  553. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
  554. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
  555. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
  556. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
  557. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
  558. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
  559. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
  560. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
  561. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
  562. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
  563. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
  564. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
  565. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
  566. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
  567. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
  568. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
  569. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
  570. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
  571. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
  572. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
  573. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
  574. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
  575. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
  576. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
  577. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
  578. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
  579. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
  580. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
  581. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
  582. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
  583. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
  584. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
  585. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
  586. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
  587. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
  588. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
  589. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
  590. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
  591. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
  592. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
  593. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
  594. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
  595. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
  596. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
  597. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
  598. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
  599. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
  600. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
  601. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
  602. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
  603. {codd_dev-2.87.0 → codd_dev-2.89.0}/codd_plugins/stack_map.yaml +0 -0
  604. {codd_dev-2.87.0 → codd_dev-2.89.0}/docs/cookbook/cdp_browser/README.md +0 -0
  605. {codd_dev-2.87.0 → codd_dev-2.89.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
  606. {codd_dev-2.87.0 → codd_dev-2.89.0}/docs/requirements/README.md +0 -0
  607. {codd_dev-2.87.0 → codd_dev-2.89.0}/dogfood/README.md +0 -0
  608. {codd_dev-2.87.0 → codd_dev-2.89.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
  609. {codd_dev-2.87.0 → codd_dev-2.89.0}/examples/README.md +0 -0
  610. {codd_dev-2.87.0 → codd_dev-2.89.0}/skills/codd-assemble/SKILL.md +0 -0
  611. {codd_dev-2.87.0 → codd_dev-2.89.0}/skills/codd-evolve/SKILL.md +0 -0
  612. {codd_dev-2.87.0 → codd_dev-2.89.0}/skills/codd-generate/SKILL.md +0 -0
  613. {codd_dev-2.87.0 → codd_dev-2.89.0}/skills/codd-greenfield/SKILL.md +0 -0
  614. {codd_dev-2.87.0 → codd_dev-2.89.0}/skills/codd-impact/SKILL.md +0 -0
  615. {codd_dev-2.87.0 → codd_dev-2.89.0}/skills/codd-init/SKILL.md +0 -0
  616. {codd_dev-2.87.0 → codd_dev-2.89.0}/skills/codd-propagate/SKILL.md +0 -0
  617. {codd_dev-2.87.0 → codd_dev-2.89.0}/skills/codd-restore/SKILL.md +0 -0
  618. {codd_dev-2.87.0 → codd_dev-2.89.0}/skills/codd-scan/SKILL.md +0 -0
  619. {codd_dev-2.87.0 → codd_dev-2.89.0}/skills/codd-validate/SKILL.md +0 -0
  620. {codd_dev-2.87.0 → codd_dev-2.89.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.87.0
3
+ Version: 2.89.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
@@ -1,3 +1,3 @@
1
1
  """CoDD — Coherence-Driven Development."""
2
2
 
3
- __version__ = "2.87.0"
3
+ __version__ = "2.89.0"
@@ -5023,6 +5023,13 @@ def verify(
5023
5023
  if not runtime:
5024
5024
  return
5025
5025
 
5026
+ # Stack contract intake (Contract Kernel v2.77a) — bring the project's declared
5027
+ # framework-stack contract into the live verify run's trace, mirroring the
5028
+ # greenfield intake. INTAKE ONLY: no obligation is enforced and NO verdict
5029
+ # changes (that is v2.77b-e). A project with no `stack:` block is unaffected; a
5030
+ # declared-but-broken stack fails HONESTLY (anti-false-green), never a silent skip.
5031
+ _intake_stack_contract_for_verify(Path(path).resolve())
5032
+
5026
5033
  verify_kwargs: dict[str, Any] = {"path": path, "prefer_standalone": True}
5027
5034
  if runtime_skip:
5028
5035
  verify_kwargs["runtime_skip"] = runtime_skip
@@ -7591,6 +7598,43 @@ def _load_optional_project_config(project_root: Path) -> dict[str, Any]:
7591
7598
  return {}
7592
7599
 
7593
7600
 
7601
+ def _intake_stack_contract_for_verify(project_root: Path) -> None:
7602
+ """Resolve the project's declared stack contract into the verify run trace.
7603
+
7604
+ Contract Kernel v2.77a (intake only) — the verify-path mirror of the greenfield
7605
+ pipeline's :meth:`GreenfieldPipeline._intake_stack_contract`. Proves the
7606
+ framework-stack contract is LIVE-consumed by the verify path (the hash enters
7607
+ the run trace), WITHOUT enforcing any obligation or changing the verify verdict
7608
+ (obligation enforcement is v2.77b-e).
7609
+
7610
+ * No ``stack:`` block → no-op (the opt-in framework layer is unused; the vast
7611
+ majority of projects — emits a single trace line, no behaviour change).
7612
+ * A declared stack → its ``stack_contract_hash`` is echoed to the run trace.
7613
+ * A declared-but-BROKEN stack → honest failure (``SystemExit`` non-zero), never
7614
+ a silent skip (anti-false-green / no-silent-fallback).
7615
+ """
7616
+ from codd.stack.project import stack_contract_intake, stack_contract_trace
7617
+
7618
+ try:
7619
+ contract = stack_contract_intake(project_root)
7620
+ except Exception as exc: # noqa: BLE001 — a declared-but-broken stack must fail HONESTLY.
7621
+ click.echo(
7622
+ "stack contract intake failed: the project declares a `stack:` block in "
7623
+ f"codd.yaml but it could not be resolved ({type(exc).__name__}: {exc}). "
7624
+ "A declared-but-unresolvable stack is an honest error, never a silent skip.",
7625
+ err=True,
7626
+ )
7627
+ raise SystemExit(1) from exc
7628
+
7629
+ if contract is None:
7630
+ return
7631
+ trace = stack_contract_trace(contract)
7632
+ click.echo(
7633
+ f"[verify] stack contract intake: {trace['resolved_stack_id']} "
7634
+ f"stack_contract_hash={trace['stack_contract_hash']}"
7635
+ )
7636
+
7637
+
7594
7638
  def _run_verify_once(
7595
7639
  path: str,
7596
7640
  *,
@@ -40,6 +40,7 @@ from collections.abc import Mapping
40
40
  from dataclasses import dataclass
41
41
  from typing import Any, Literal
42
42
 
43
+ from codd.parsing.regex_strategies import language_extensions
43
44
  from codd.project_types import ProjectCapabilities
44
45
 
45
46
 
@@ -234,7 +235,11 @@ def resolve_e2e_harness(
234
235
  """
235
236
 
236
237
  lang = (project_language or "").strip().lower()
237
- is_python = lang == "python"
238
+ # "host language is Python" is driven from the language's declared source
239
+ # extensions (registry DATA: ``regex_strategies.language_extensions`` is
240
+ # canonical-keyed — it does NOT resolve aliases — so this is byte-identical
241
+ # to the former ``lang == "python"``), not a language-name branch in core.
242
+ is_python = ".py" in language_extensions(lang)
238
243
  modality = capabilities.e2e_modality
239
244
 
240
245
  if modality == "cli":
@@ -440,6 +440,26 @@ class GreenfieldPipeline:
440
440
 
441
441
  self._notify(options, f"greenfield start: {project_root.name}")
442
442
 
443
+ # Stack contract intake (Contract Kernel v2.77a) — bring the project's
444
+ # declared framework-stack contract into the LIVE run (in the run record +
445
+ # trace) so the framework layer is consumed by production, not only tests.
446
+ # INTAKE ONLY: no obligation is enforced here and NO verdict changes (that
447
+ # is v2.77b-e). A project with no ``stack:`` block is byte-identical (the
448
+ # opt-in framework layer is unused). A declared-but-broken stack is an
449
+ # HONEST failure (anti-false-green), never a silent skip. Done once, early,
450
+ # before the stage loop, so the hash covers the whole run. Routed through
451
+ # _fail (like every stage) so the autopilot REPORTS the honest error via a
452
+ # failed GreenfieldResult instead of raising to the caller. Its own
453
+ # pseudo-stage name (not a real STAGES entry) so the failure is attributed
454
+ # honestly to intake, not to ``init``.
455
+ try:
456
+ self._intake_stack_contract(project_root, session)
457
+ except StageError as exc:
458
+ return self._fail(
459
+ project_root, session, options, "stack_intake",
460
+ {"status": STATUS_PENDING, "detail": ""}, str(exc),
461
+ )
462
+
443
463
  runners: dict[str, Callable[[Path, dict[str, Any], dict[str, Any]], None]] = {
444
464
  "init": self._stage_init,
445
465
  "elicit": self._stage_elicit,
@@ -522,6 +542,51 @@ class GreenfieldPipeline:
522
542
  self._notify(options, f"greenfield {project_root.name}: FAILED at {stage_name} — {error}")
523
543
  return result
524
544
 
545
+ # ── stack contract intake (Contract Kernel v2.77a, intake only) ──
546
+
547
+ def _intake_stack_contract(self, project_root: Path, session: dict[str, Any]) -> None:
548
+ """Resolve the project's declared stack contract into the live run record + trace.
549
+
550
+ See the call site in :meth:`run`. INTAKE ONLY — proves the framework-stack
551
+ contract is LIVE-consumed (it enters the run record and the trace); it does
552
+ NOT enforce any obligation and does NOT change any pass/fail verdict
553
+ (obligation enforcement is v2.77b-e).
554
+
555
+ * No ``stack:`` block → no-op: nothing is added to the record and only a
556
+ single debug ``self.echo`` is emitted, so a non-stack project (the vast
557
+ majority) is behaviour-preserving.
558
+ * A declared stack → its :func:`stack_contract_trace` payload (incl.
559
+ ``stack_contract_hash``) is written to ``session["stack_contract"]`` and
560
+ echoed to the run trace.
561
+ * A declared-but-BROKEN stack → :class:`StageError` (honest error), never a
562
+ silent skip (anti-false-green / no-silent-fallback).
563
+ """
564
+ from codd.stack.project import stack_contract_intake, stack_contract_trace
565
+
566
+ try:
567
+ contract = stack_contract_intake(project_root)
568
+ except Exception as exc: # noqa: BLE001 — a declared-but-broken stack must fail HONESTLY.
569
+ raise StageError(
570
+ "stack contract intake failed: the project declares a `stack:` block in "
571
+ f"codd.yaml but it could not be resolved ({type(exc).__name__}: {exc}). "
572
+ "A declared-but-unresolvable stack is an honest error, never a silent skip "
573
+ "(check the language / frameworks / addons ids against the curated stack "
574
+ "profiles, or remove the `stack:` block to opt out of the framework layer)."
575
+ ) from exc
576
+
577
+ if contract is None:
578
+ # The opt-in framework layer is unused — byte-identical behaviour.
579
+ self.echo("[greenfield] stack contract intake: no `stack:` block (framework layer opt-out)")
580
+ return
581
+
582
+ trace = stack_contract_trace(contract)
583
+ session["stack_contract"] = dict(trace)
584
+ self.echo(
585
+ "[greenfield] stack contract intake: "
586
+ f"{trace['resolved_stack_id']} "
587
+ f"stack_contract_hash={trace['stack_contract_hash']}"
588
+ )
589
+
525
590
  # ── option resolution ───────────────────────────────────
526
591
 
527
592
  def _resolve_options(self, project_root: Path) -> dict[str, Any]:
@@ -747,7 +747,10 @@ def _confusable_code_error(relative_path: str, content: str, *, language: str) -
747
747
  deterministic, no LLM calls.
748
748
  """
749
749
  suffix = PurePosixPath(relative_path).suffix.lower()
750
- is_python = suffix == ".py" or (suffix == "" and language == "python")
750
+ # "is this a Python payload" is driven from the language's declared
751
+ # extensions (DATA), not a ``language == "python"`` branch: a .py suffix, or
752
+ # an extensionless payload whose language declares .py as a source extension.
753
+ is_python = suffix == ".py" or (suffix == "" and ".py" in _implementation_language_extensions(language))
751
754
  if not is_python:
752
755
  return None
753
756
  findings = _confusable_findings(content)
@@ -1754,7 +1757,7 @@ def _candidate_generated_paths(spec: ImplementSpec, language: Any, design_conten
1754
1757
  candidates.append(PurePosixPath(output_path) / f"index{default_extension}")
1755
1758
 
1756
1759
  normalized_language = _normalize_implementation_language(language)
1757
- if normalized_language in {"typescript", "javascript"} and _spec_looks_ui_facing(spec, design_content):
1760
+ if _ui_variant_extension(normalized_language) is not None and _spec_looks_ui_facing(spec, design_content):
1758
1761
  extensions = _implementation_language_extensions(normalized_language)
1759
1762
  if len(extensions) > 1:
1760
1763
  for output_path in spec.output_paths:
@@ -1883,7 +1886,7 @@ def _build_implementation_prompt(
1883
1886
  else:
1884
1887
  framework_guidance = f"- Use idiomatic {language_name} patterns for the target project."
1885
1888
 
1886
- if language in {"typescript", "javascript"} and len(preferred_extensions) > 1:
1889
+ if _ui_variant_extension(language) is not None and len(preferred_extensions) > 1:
1887
1890
  jsx_extension = preferred_extensions[1]
1888
1891
  extension_guidance = (
1889
1892
  f"- If the work needs JSX-style UI components, emit {jsx_extension} files. "
@@ -2581,10 +2584,41 @@ def _implementation_language_extensions(language: Any) -> tuple[str, ...]:
2581
2584
  return LANGUAGE_EXT_MAP.get(normalized, LANGUAGE_EXT_MAP["typescript"])
2582
2585
 
2583
2586
 
2587
+ #: Registry DATA (Contract Kernel Cut Condition A — implementer.py): the SECOND
2588
+ #: extension some language families carry is a JSX/UI-COMPONENT variant
2589
+ #: (TypeScript's ``.tsx``, JavaScript's ``.jsx``) rather than just "another file
2590
+ #: type" (e.g. C++'s ``.cc``/``.h``). Only a family whose alt extension is a UI
2591
+ #: variant should route UI-facing work to ``extensions[1]``. This is a
2592
+ #: language→capability DATA table (the analogue of a profile/registry entry — a
2593
+ #: declared capability, NOT a core ``language in (...)`` branch); core code asks
2594
+ #: ``_ui_variant_extension(language) is not None`` (a capability flag), never a
2595
+ #: language name. Byte-identical to the former ``in {"typescript","javascript"}``
2596
+ #: guards: those two families are exactly the ones whose ``extensions[1]`` is the
2597
+ #: UI/JSX variant.
2598
+ _UI_VARIANT_EXTENSION_BY_LANGUAGE: dict[str, str] = {
2599
+ "typescript": ".tsx",
2600
+ "javascript": ".jsx",
2601
+ }
2602
+
2603
+
2604
+ def _ui_variant_extension(language: Any) -> str | None:
2605
+ """The language's JSX/UI-component variant extension, or ``None`` (data lookup).
2606
+
2607
+ A capability flag in DATA form: a language family declares whether it has a
2608
+ dedicated UI-component extension (``.tsx``/``.jsx``). ``None`` means the
2609
+ family has no UI variant (its ``extensions[1]``, if any, is just another file
2610
+ type), so UI-facing routing must NOT use the alternate extension. Replaces
2611
+ the former ``language in {"typescript","javascript"}`` dispatch.
2612
+ """
2613
+ normalized = _normalize_implementation_language(language)
2614
+ return _UI_VARIANT_EXTENSION_BY_LANGUAGE.get(normalized)
2615
+
2616
+
2584
2617
  def _default_generated_extension(language: Any, content: str | None = None) -> str:
2585
2618
  normalized = _normalize_implementation_language(language)
2586
2619
  extensions = _implementation_language_extensions(normalized)
2587
- if normalized in {"typescript", "javascript"} and len(extensions) > 1 and content and _looks_like_tsx(content):
2620
+ ui_variant = _ui_variant_extension(normalized)
2621
+ if ui_variant is not None and len(extensions) > 1 and content and _looks_like_tsx(content):
2588
2622
  return extensions[1]
2589
2623
  return extensions[0]
2590
2624
 
@@ -529,6 +529,99 @@ def strategy_for(language: str) -> RegexLanguageStrategy:
529
529
  return _STRATEGIES.get((language or "").lower(), GENERIC_STRATEGY)
530
530
 
531
531
 
532
+ # ─────────────────────────────────────────────────────────────────────────────
533
+ # Repair-slice analyzer registry DATA (Contract Kernel Cut Condition A —
534
+ # repair_slice.py de-literalization). ``codd/repair_slice.py``'s function
535
+ # line-range + raises analyzer used to branch on ``language in
536
+ # ("typescript","javascript")`` (tree-sitter func node-type set) and
537
+ # ``language == "python"`` (regex def-vs-function pattern + group index, and the
538
+ # python-only raises regex). Those per-language facts live HERE as registry DATA
539
+ # (the analogue of a profile/adapter — an analyzer impl legitimately names its
540
+ # own language), so the core analyzer dispatches by a data lookup, NOT a
541
+ # language-name branch. Byte-identical to the former inline ladders; the
542
+ # ``tests/languages/test_contract_kernel_cut_a_parity.py`` oracle pins this.
543
+ #
544
+ # Repair-slice extraction (like all extraction) is ANALYSIS input for patch
545
+ # context, never a green/red GATE verdict — so an unknown language degrading to
546
+ # the GENERIC profile (empty func-node set, the function-keyword regex, no raises)
547
+ # is legitimate best-effort analysis, not a false-green.
548
+ # ─────────────────────────────────────────────────────────────────────────────
549
+
550
+
551
+ @dataclass(frozen=True)
552
+ class RepairSliceLanguageProfile:
553
+ """Per-language repair-slice analyzer DATA (one language; not dispatch).
554
+
555
+ * ``function_node_types`` — the tree-sitter named-node types that are a
556
+ function/method definition for this language (walked for line ranges).
557
+ * ``line_range_pattern`` — the regex (with ``re.MULTILINE``) that matches a
558
+ function definition in the regex FALLBACK path.
559
+ * ``line_range_name_group`` — which regex group holds the function name.
560
+ * ``raises_def_pattern`` / ``raises_stmt_pattern`` — the regex pair for the
561
+ regex-fallback raises analyzer; ``None`` (the GENERIC default) means this
562
+ language contributes NO raises in the fallback (byte-identical to the
563
+ former ``if language != "python": return {}``).
564
+ """
565
+
566
+ function_node_types: frozenset[str] = frozenset({"function_definition"})
567
+ line_range_pattern: re.Pattern[str] = field(
568
+ default_factory=lambda: re.compile(
569
+ r"^\s*(?:export\s+)?(?:async\s+)?function\s+(\w+)\s*\(", re.MULTILINE
570
+ )
571
+ )
572
+ line_range_name_group: int = 1
573
+ raises_def_pattern: re.Pattern[str] | None = None
574
+ raises_stmt_pattern: re.Pattern[str] | None = None
575
+
576
+
577
+ #: The python repair-slice profile: tree-sitter walks only ``function_definition``
578
+ #: (methods are ``function_definition`` inside a class in the python grammar); the
579
+ #: regex fallback uses the ``def`` pattern with the NAME in group 2; and python is
580
+ #: the ONLY language with a regex raises analyzer.
581
+ _REPAIR_PYTHON = RepairSliceLanguageProfile(
582
+ function_node_types=frozenset({"function_definition"}),
583
+ line_range_pattern=re.compile(r"^(\s*)(?:async\s+)?def\s+(\w+)\s*\(", re.MULTILINE),
584
+ line_range_name_group=2,
585
+ raises_def_pattern=re.compile(r"\s*(?:async\s+)?def\s+(\w+)\s*\("),
586
+ raises_stmt_pattern=re.compile(r"\s+raise\s+(\w+)"),
587
+ )
588
+
589
+ #: The ts/js repair-slice profile: tree-sitter additionally walks
590
+ #: ``method_definition`` + ``function_declaration`` (the former ``language in
591
+ #: ("typescript","javascript")`` set); the regex fallback uses the
592
+ #: ``function`` pattern with the NAME in group 1; no regex raises analyzer.
593
+ _REPAIR_TS_JS = RepairSliceLanguageProfile(
594
+ function_node_types=frozenset(
595
+ {"function_definition", "method_definition", "function_declaration"}
596
+ ),
597
+ line_range_pattern=re.compile(
598
+ r"^\s*(?:export\s+)?(?:async\s+)?function\s+(\w+)\s*\(", re.MULTILINE
599
+ ),
600
+ line_range_name_group=1,
601
+ )
602
+
603
+ #: The GENERIC repair-slice profile for any other/unknown language — byte-identical
604
+ #: to the former ``else`` branches: tree-sitter walks only ``function_definition``;
605
+ #: the regex fallback uses the ``function`` pattern with the name in group 1; and
606
+ #: no raises (the former ``if language != "python": return {}``).
607
+ GENERIC_REPAIR_PROFILE = RepairSliceLanguageProfile()
608
+
609
+ _REPAIR_PROFILES: dict[str, RepairSliceLanguageProfile] = {
610
+ "python": _REPAIR_PYTHON,
611
+ "typescript": _REPAIR_TS_JS,
612
+ "javascript": _REPAIR_TS_JS,
613
+ }
614
+
615
+
616
+ def repair_slice_profile_for(language: str) -> RepairSliceLanguageProfile:
617
+ """Repair-slice analyzer profile for *language* (registry-data lookup).
618
+
619
+ Unknown languages resolve to :data:`GENERIC_REPAIR_PROFILE` (the former
620
+ non-python / non-ts-js ``else`` behavior); analysis input, never a gate.
621
+ """
622
+ return _REPAIR_PROFILES.get((language or "").lower(), GENERIC_REPAIR_PROFILE)
623
+
624
+
532
625
  def language_extensions(language: str) -> set[str]:
533
626
  """Source-file extensions for *language* (registry-data lookup)."""
534
627
  return set(strategy_for(language).extensions)
@@ -60,9 +60,8 @@ def extract_function_line_ranges(
60
60
  ext = get_extractor(language)
61
61
  if not isinstance(ext, TreeSitterExtractor):
62
62
  return _extract_line_ranges_regex(content, language)
63
- parser = ext._get_parser()
64
- tree = parser.parse(content.encode("utf-8", errors="ignore"))
65
- return _walk_functions_for_ranges(tree.root_node, content, language)
63
+ root = ext._parse(content)
64
+ return _walk_functions_for_ranges(root, content, language)
66
65
  except Exception:
67
66
  return _extract_line_ranges_regex(content, language)
68
67
 
@@ -72,12 +71,14 @@ def _walk_functions_for_ranges(
72
71
  ) -> dict[str, tuple[int, int]]:
73
72
  """Walk AST to find all function definitions with their line ranges."""
74
73
  from codd.parsing import _iter_named_nodes, _field_text
74
+ from codd.parsing.regex_strategies import repair_slice_profile_for
75
75
  content_bytes = content.encode("utf-8", errors="ignore")
76
76
  ranges: dict[str, tuple[int, int]] = {}
77
77
 
78
- func_types = {"function_definition"}
79
- if language in ("typescript", "javascript"):
80
- func_types.update({"method_definition", "function_declaration"})
78
+ # The set of tree-sitter function/method node types for this language is
79
+ # registry DATA (the analogue of a profile/adapter), not a language-name
80
+ # branch in core. ts/js add method_definition + function_declaration.
81
+ func_types = repair_slice_profile_for(language).function_node_types
81
82
 
82
83
  for node in _iter_named_nodes(root):
83
84
  if node.type not in func_types:
@@ -105,18 +106,24 @@ def _parent_class_name(content_bytes: bytes, node: Any) -> str:
105
106
 
106
107
 
107
108
  def _extract_line_ranges_regex(content: str, language: str) -> dict[str, tuple[int, int]]:
108
- """Fallback: regex-based line range extraction."""
109
- ranges: dict[str, tuple[int, int]] = {}
110
- if language == "python":
111
- pattern = re.compile(r'^(\s*)(?:async\s+)?def\s+(\w+)\s*\(', re.MULTILINE)
112
- else:
113
- pattern = re.compile(r'^\s*(?:export\s+)?(?:async\s+)?function\s+(\w+)\s*\(', re.MULTILINE)
109
+ """Fallback: regex-based line range extraction.
110
+
111
+ The def-vs-function regex and the name-capture group are registry DATA per
112
+ language (python uses ``def`` with name in group 2; every other language uses
113
+ ``function`` with name in group 1), so this core fallback dispatches by a
114
+ data lookup, not a ``language == "python"`` branch.
115
+ """
116
+ from codd.parsing.regex_strategies import repair_slice_profile_for
117
+ profile = repair_slice_profile_for(language)
118
+ pattern = profile.line_range_pattern
119
+ name_group = profile.line_range_name_group
114
120
 
121
+ ranges: dict[str, tuple[int, int]] = {}
115
122
  lines = content.split("\n")
116
123
  matches = list(pattern.finditer(content))
117
124
  for i, m in enumerate(matches):
118
125
  line_no = content[:m.start()].count("\n") + 1
119
- name = m.group(2) if language == "python" else m.group(1)
126
+ name = m.group(name_group)
120
127
  # Estimate end: next function or end of file
121
128
  if i + 1 < len(matches):
122
129
  end_line = content[:matches[i + 1].start()].count("\n")
@@ -137,9 +144,8 @@ def extract_raises(content: str, file_path: str, language: str) -> dict[str, lis
137
144
  ext = get_extractor(language)
138
145
  if not isinstance(ext, TreeSitterExtractor):
139
146
  return _extract_raises_regex(content, language)
140
- parser = ext._get_parser()
141
- tree = parser.parse(content.encode("utf-8", errors="ignore"))
142
- return _walk_raises(tree.root_node, content, language)
147
+ root = ext._parse(content)
148
+ return _walk_raises(root, content, language)
143
149
  except Exception:
144
150
  return _extract_raises_regex(content, language)
145
151
 
@@ -193,17 +199,27 @@ def _enclosing_function(content_bytes: bytes, node: Any) -> str:
193
199
 
194
200
 
195
201
  def _extract_raises_regex(content: str, language: str) -> dict[str, list[str]]:
196
- """Fallback regex for raises extraction."""
202
+ """Fallback regex for raises extraction.
203
+
204
+ The def/raise regex pair is registry DATA per language; a language without a
205
+ declared raises analyzer (every language except python today) yields no
206
+ raises — a data lookup, not a ``language != "python"`` branch.
207
+ """
208
+ from codd.parsing.regex_strategies import repair_slice_profile_for
209
+ profile = repair_slice_profile_for(language)
210
+ def_pattern = profile.raises_def_pattern
211
+ stmt_pattern = profile.raises_stmt_pattern
212
+
197
213
  result: dict[str, list[str]] = {}
198
- if language != "python":
214
+ if def_pattern is None or stmt_pattern is None:
199
215
  return result
200
216
  current_func = ""
201
217
  for line in content.split("\n"):
202
- m = re.match(r'\s*(?:async\s+)?def\s+(\w+)\s*\(', line)
218
+ m = def_pattern.match(line)
203
219
  if m:
204
220
  current_func = m.group(1)
205
221
  if current_func:
206
- rm = re.match(r'\s+raise\s+(\w+)', line)
222
+ rm = stmt_pattern.match(line)
207
223
  if rm:
208
224
  exc = rm.group(1)
209
225
  result.setdefault(current_func, [])
@@ -68,3 +68,45 @@ def verify_project_stack(
68
68
  if contract is None:
69
69
  return None
70
70
  return enforce_obligations(contract, project_root=project_root, **checker_inputs)
71
+
72
+
73
+ def stack_contract_trace(contract: ResolvedStackContract) -> dict[str, Any]:
74
+ """Run-trace fields proving a run consumed the resolved stack contract.
75
+
76
+ Mirrors :meth:`codd.languages.contract.ResolvedLanguageContract.to_trace`: the
77
+ minimal, deterministic facts a run record / trace records so the live-consumption
78
+ of the framework-stack contract is observable (the v2.77a intake exit gate).
79
+ ``stack_contract_hash`` is the deterministic :attr:`ResolvedStackContract.content_hash`;
80
+ ``resolved_stack_id`` / ``resolved_stack_layers`` make "changing the profile changes
81
+ the plan" visible in the record itself.
82
+ """
83
+ return {
84
+ "resolved_stack_id": contract.stack_id,
85
+ "stack_contract_hash": contract.content_hash,
86
+ "resolved_stack_layers": [f"{ref.kind}:{ref.id}" for ref in contract.layers],
87
+ }
88
+
89
+
90
+ def stack_contract_intake(project_root: str | Path) -> ResolvedStackContract | None:
91
+ """Resolve a project's declared stack contract for LIVE consumption (intake only).
92
+
93
+ This is the production seam the greenfield/verify pipeline calls EARLY in a run
94
+ to bring the (previously dormant) framework-stack contract into the live run —
95
+ *without* enforcing any obligation yet (enforcement is v2.77b-e). It is exactly
96
+ :func:`resolve_project_stack`, named for the intake call-site so the
97
+ "no non-test caller = 0 state" is eliminated by an unambiguous production caller.
98
+
99
+ Contract:
100
+
101
+ * No ``stack:`` block (the opt-in framework layer is unused) → ``None``. The
102
+ vast majority of projects; behaviour is byte-identical, never an error.
103
+ * A declared ``stack:`` block → the :class:`ResolvedStackContract` (its
104
+ ``content_hash`` is the run-trace hash; see :func:`stack_contract_trace`).
105
+ * A declared-but-BROKEN block (unknown language/framework/addon, malformed
106
+ mapping) → the resolver RAISES (``ValueError`` / ``UnknownLanguageError`` /
107
+ ``UnknownLayerError``). The intake NEVER swallows this: anti-false-green
108
+ forbids a declared-but-unresolvable stack from silently proceeding as if no
109
+ stack were declared. The pipeline call-site turns the raise into an honest
110
+ stage/command failure.
111
+ """
112
+ return resolve_project_stack(project_root)
@@ -1235,6 +1235,18 @@ def _python_body_assigned_names(body_text: str) -> set[str]:
1235
1235
  return names
1236
1236
 
1237
1237
 
1238
+ #: Poetry MANIFEST-FORMAT reserved keys that appear under
1239
+ #: ``[tool.poetry.dependencies]`` but are NOT third-party packages. Poetry stores
1240
+ #: the interpreter version constraint as a pseudo-dependency named ``python``
1241
+ #: (``python = "^3.11"``); it is the interpreter pin, not a distribution to
1242
+ #: import. This is a poetry FILE-FORMAT fact (the analogue of registry/profile
1243
+ #: DATA), NOT a target-language gate dispatch — the surrounding parser is already
1244
+ #: unconditionally Python-specific. Excluding it keeps the third-party set exact;
1245
+ #: membership here is byte-identical to the former inline ``k.lower() != "python"``
1246
+ #: filter (Contract Kernel Cut Condition A — vb_marker_authenticity.py).
1247
+ _POETRY_RESERVED_NON_DEPENDENCY_KEYS = frozenset({"python"})
1248
+
1249
+
1238
1250
  def _python_manifest_top_dependencies(project_root: Path | None) -> frozenset[str]:
1239
1251
  """Declared third-party dependency names from ``pyproject.toml`` (PEP 621 +
1240
1252
  poetry), normalized for top-module matching. Empty when absent/unparseable —
@@ -1268,7 +1280,11 @@ def _python_manifest_top_dependencies(project_root: Path | None) -> frozenset[st
1268
1280
  if isinstance(poetry, dict):
1269
1281
  pdeps = poetry.get("dependencies", {})
1270
1282
  if isinstance(pdeps, dict):
1271
- reqs.extend(k for k in pdeps if isinstance(k, str) and k.lower() != "python")
1283
+ reqs.extend(
1284
+ k
1285
+ for k in pdeps
1286
+ if isinstance(k, str) and k.lower() not in _POETRY_RESERVED_NON_DEPENDENCY_KEYS
1287
+ )
1272
1288
  names: set[str] = set()
1273
1289
  for req in reqs:
1274
1290
  m = re.match(r"\s*([A-Za-z0-9._-]+)", req)
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "codd-dev"
7
- version = "2.87.0"
7
+ version = "2.89.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