codd-dev 2.37.0__tar.gz → 2.38.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 (579) hide show
  1. {codd_dev-2.37.0 → codd_dev-2.38.0}/PKG-INFO +1 -1
  2. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/__init__.py +1 -1
  3. codd_dev-2.38.0/codd/contracts_registry/__init__.py +46 -0
  4. codd_dev-2.38.0/codd/contracts_registry/__main__.py +12 -0
  5. codd_dev-2.38.0/codd/contracts_registry/certify.py +267 -0
  6. codd_dev-2.38.0/codd/contracts_registry/generate_matrix.py +146 -0
  7. codd_dev-2.38.0/codd/contracts_registry/registry.py +1189 -0
  8. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/coverage_execution_coherence.py +34 -0
  9. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/greenfield/pipeline.py +193 -14
  10. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/implement_oracle_scope.py +202 -0
  11. {codd_dev-2.37.0 → codd_dev-2.38.0}/pyproject.toml +1 -1
  12. {codd_dev-2.37.0 → codd_dev-2.38.0}/.gitignore +0 -0
  13. {codd_dev-2.37.0 → codd_dev-2.38.0}/LICENSE +0 -0
  14. {codd_dev-2.37.0 → codd_dev-2.38.0}/README.md +0 -0
  15. {codd_dev-2.37.0 → codd_dev-2.38.0}/bench_fixture/README.md +0 -0
  16. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/__main__.py +0 -0
  17. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/_git_helper.py +0 -0
  18. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/action_outcome.py +0 -0
  19. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/ai_invoke.py +0 -0
  20. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/ai_patch.py +0 -0
  21. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/artifact_contract.py +0 -0
  22. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/artifact_ids.py +0 -0
  23. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/artifacts/catalog.yaml +0 -0
  24. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/ask_user_question_adapter.py +0 -0
  25. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/assembler.py +0 -0
  26. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/bridge.py +0 -0
  27. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/brownfield/__init__.py +0 -0
  28. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/brownfield/pipeline.py +0 -0
  29. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/capability_completeness.py +0 -0
  30. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/claude_cli.py +0 -0
  31. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/cli.py +0 -0
  32. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/clustering.py +0 -0
  33. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/coherence_adapters.py +0 -0
  34. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/coherence_engine.py +0 -0
  35. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/confidence.py +0 -0
  36. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/config.py +0 -0
  37. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/config_schema.py +0 -0
  38. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/contracts.py +0 -0
  39. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/coverage_auditor.py +0 -0
  40. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/coverage_metrics.py +0 -0
  41. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/__init__.py +0 -0
  42. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/auto_repair.py +0 -0
  43. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/builder.py +0 -0
  44. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/checks/__init__.py +0 -0
  45. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
  46. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/checks/artifact_contract_check.py +0 -0
  47. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/checks/ci_health.py +0 -0
  48. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/checks/dependency_freshness.py +0 -0
  49. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/checks/depends_on_consistency.py +0 -0
  50. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/checks/deployment_completeness.py +0 -0
  51. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/checks/edge_validity.py +0 -0
  52. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/checks/environment_coverage.py +0 -0
  53. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/checks/implementation_coverage.py +0 -0
  54. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/checks/node_completeness.py +0 -0
  55. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/checks/opt_out.py +0 -0
  56. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/checks/task_completion.py +0 -0
  57. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/checks/transitive_closure.py +0 -0
  58. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/checks/ui_coherence.py +0 -0
  59. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/checks/user_journey_coherence.py +0 -0
  60. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/coverage_axes.py +0 -0
  61. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/defaults/cli.yaml +0 -0
  62. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
  63. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/defaults/csharp.yaml +0 -0
  64. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/defaults/elixir.yaml +0 -0
  65. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/defaults/generic.yaml +0 -0
  66. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/defaults/iot.yaml +0 -0
  67. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/defaults/java.yaml +0 -0
  68. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/defaults/kotlin.yaml +0 -0
  69. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/defaults/mobile.yaml +0 -0
  70. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/defaults/ruby.yaml +0 -0
  71. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/defaults/rust.yaml +0 -0
  72. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/defaults/scala.yaml +0 -0
  73. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/defaults/swift.yaml +0 -0
  74. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
  75. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/defaults/web.yaml +0 -0
  76. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/extractor.py +0 -0
  77. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/impact.py +0 -0
  78. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dag/runner.py +0 -0
  79. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/defaults.py +0 -0
  80. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/defaults.yaml +0 -0
  81. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/dependency_lock_coherence.py +0 -0
  82. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deploy_targets/__init__.py +0 -0
  83. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deploy_targets/app_service.py +0 -0
  84. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deploy_targets/base.py +0 -0
  85. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deploy_targets/docker_compose.py +0 -0
  86. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deployer.py +0 -0
  87. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deployment/__init__.py +0 -0
  88. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deployment/checks/__init__.py +0 -0
  89. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
  90. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
  91. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
  92. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
  93. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deployment/extractor.py +0 -0
  94. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deployment/providers/__init__.py +0 -0
  95. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deployment/providers/ai_command.py +0 -0
  96. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deployment/providers/ai_command_factory.py +0 -0
  97. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deployment/providers/codex_app_server.py +0 -0
  98. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deployment/providers/llm_consideration.py +0 -0
  99. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deployment/providers/schema/__init__.py +0 -0
  100. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deployment/providers/schema/prisma.py +0 -0
  101. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deployment/providers/target/__init__.py +0 -0
  102. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deployment/providers/target/docker_compose.py +0 -0
  103. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deployment/providers/verification/__init__.py +0 -0
  104. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
  105. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
  106. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
  107. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
  108. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
  109. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deployment/providers/verification/curl.py +0 -0
  110. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
  111. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
  112. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deployment/providers/verification/playwright.py +0 -0
  113. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/deployment/providers/verification/vitest.py +0 -0
  114. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/design_md.py +0 -0
  115. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/diff/__init__.py +0 -0
  116. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/diff/apply.py +0 -0
  117. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/diff/engine.py +0 -0
  118. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/diff/persistence.py +0 -0
  119. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/diff/templates/diff_prompt.md +0 -0
  120. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/discovery.py +0 -0
  121. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/drift.py +0 -0
  122. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/e2e_contract_coherence.py +0 -0
  123. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/e2e_extractor.py +0 -0
  124. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/e2e_generator.py +0 -0
  125. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/e2e_runner.py +0 -0
  126. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/elicit/__init__.py +0 -0
  127. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/elicit/apply.py +0 -0
  128. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/elicit/engine.py +0 -0
  129. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/elicit/finding.py +0 -0
  130. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/elicit/formatters/__init__.py +0 -0
  131. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/elicit/formatters/base.py +0 -0
  132. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/elicit/formatters/interactive.py +0 -0
  133. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/elicit/formatters/json_fmt.py +0 -0
  134. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/elicit/formatters/md.py +0 -0
  135. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/elicit/lexicon_loader.py +0 -0
  136. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/elicit/persistence.py +0 -0
  137. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
  138. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/env_refs.py +0 -0
  139. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/extract_ai.py +0 -0
  140. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/extract_paths.py +0 -0
  141. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/extractor.py +0 -0
  142. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/fix/__init__.py +0 -0
  143. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/fix/candidate_selector.py +0 -0
  144. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/fix/design_updater.py +0 -0
  145. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/fix/impl_propagation.py +0 -0
  146. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/fix/interactive_prompt.py +0 -0
  147. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/fix/phenomenon_fixer.py +0 -0
  148. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/fix/phenomenon_parser.py +0 -0
  149. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/fix/risk_classifier.py +0 -0
  150. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/fix/templates/clarification_question.txt +0 -0
  151. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/fix/templates/design_update.txt +0 -0
  152. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/fix/templates/impl_update.txt +0 -0
  153. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
  154. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/fix/templates/risk_assessment.txt +0 -0
  155. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/fix/templates_loader.py +0 -0
  156. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/fixer.py +0 -0
  157. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/fixup_drift.py +0 -0
  158. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/fixup_drift_strategies/__init__.py +0 -0
  159. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
  160. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
  161. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
  162. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/frontmatter.py +0 -0
  163. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/generator.py +0 -0
  164. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/git_evidence.py +0 -0
  165. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/graph.py +0 -0
  166. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/greenfield/__init__.py +0 -0
  167. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/hitl_session.py +0 -0
  168. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/hooks/__init__.py +0 -0
  169. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/hooks/pre-commit +0 -0
  170. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
  171. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
  172. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/hooks/recipes/codex_hook.sh +0 -0
  173. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
  174. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
  175. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/iac_nfr.py +0 -0
  176. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/implement_oracle.py +0 -0
  177. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/implementer/__init__.py +0 -0
  178. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/implementer/chunked_runner.py +0 -0
  179. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/implementer/typecheck_loop.py +0 -0
  180. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/implementer.py +0 -0
  181. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/import_coherence.py +0 -0
  182. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/inheritance.py +0 -0
  183. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/init/__init__.py +0 -0
  184. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/init/lexicon_suggest.py +0 -0
  185. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/init/llm_lexicon_suggester.py +0 -0
  186. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/init/stack_detector.py +0 -0
  187. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/knowledge_fetcher.py +0 -0
  188. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/lexicon.py +0 -0
  189. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/lexicon_cli/__init__.py +0 -0
  190. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
  191. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/lexicon_cli/formatters/html.py +0 -0
  192. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
  193. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/lexicon_cli/formatters/md.py +0 -0
  194. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/lexicon_cli/inspector.py +0 -0
  195. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/lexicon_cli/manager.py +0 -0
  196. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/lexicon_cli/reporter.py +0 -0
  197. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/lexicon_cli/threshold.py +0 -0
  198. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/llm/__init__.py +0 -0
  199. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/llm/approval.py +0 -0
  200. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/llm/best_practice_augmenter.py +0 -0
  201. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/llm/criteria_expander.py +0 -0
  202. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/llm/design_doc_extractor.py +0 -0
  203. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/llm/impl_step_deriver.py +0 -0
  204. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/llm/means_catalog_loader.py +0 -0
  205. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/llm/parser.py +0 -0
  206. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/llm/plan_deriver.py +0 -0
  207. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/llm/prompt_builder.py +0 -0
  208. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/llm/strategy_validator.py +0 -0
  209. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
  210. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
  211. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
  212. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
  213. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
  214. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/llm/templates/meta_instruction.md +0 -0
  215. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/llm/templates/plan_derive_meta.md +0 -0
  216. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
  217. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/mcp_server.py +0 -0
  218. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/measure.py +0 -0
  219. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/operational_e2e_audit.py +0 -0
  220. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/operations_derive.py +0 -0
  221. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/parsing/__init__.py +0 -0
  222. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/parsing/_shared.py +0 -0
  223. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/parsing/api_specs.py +0 -0
  224. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/parsing/filesystem_routes.py +0 -0
  225. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/parsing/iac.py +0 -0
  226. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/parsing/python_ast.py +0 -0
  227. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/parsing/schemas.py +0 -0
  228. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/parsing/tests_builddeps.py +0 -0
  229. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/parsing/treesitter.py +0 -0
  230. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/planner.py +0 -0
  231. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/policy.py +0 -0
  232. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/preflight/__init__.py +0 -0
  233. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/preflight/defaults/cli.yaml +0 -0
  234. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/preflight/defaults/generic.yaml +0 -0
  235. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/preflight/defaults/iot.yaml +0 -0
  236. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/preflight/defaults/mobile.yaml +0 -0
  237. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/preflight/defaults/web.yaml +0 -0
  238. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/project_types.py +0 -0
  239. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/propagate.py +0 -0
  240. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/propagation_common.py +0 -0
  241. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/propagator.py +0 -0
  242. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/reconciliation_ledger.py +0 -0
  243. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/reference_resolution.py +0 -0
  244. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/registry.py +0 -0
  245. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/repair/__init__.py +0 -0
  246. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/repair/approval_repair.py +0 -0
  247. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/repair/auto_scope_guard.py +0 -0
  248. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/repair/engine.py +0 -0
  249. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/repair/git_patcher.py +0 -0
  250. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/repair/history.py +0 -0
  251. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/repair/llm_repair_engine.py +0 -0
  252. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/repair/loop.py +0 -0
  253. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/repair/primary_picker.py +0 -0
  254. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/repair/proof_breaks.py +0 -0
  255. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/repair/repair_result.py +0 -0
  256. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/repair/repairability_classifier.py +0 -0
  257. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/repair/schema.py +0 -0
  258. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/repair/templates/analyze_meta.md +0 -0
  259. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/repair/templates/propose_meta.md +0 -0
  260. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
  261. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/repair/templates/repairability_meta.md +0 -0
  262. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/repair/test_failure_attribution.py +0 -0
  263. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/repair/verify_runner.py +0 -0
  264. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/repair_slice.py +0 -0
  265. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/require.py +0 -0
  266. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/require_plugins.py +0 -0
  267. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/require_propagate.py +0 -0
  268. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
  269. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
  270. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
  271. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
  272. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/required_artifacts/defaults/web.yaml +0 -0
  273. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/required_artifacts_deriver.py +0 -0
  274. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
  275. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
  276. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
  277. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
  278. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
  279. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/requirement_completeness_auditor.py +0 -0
  280. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/requirement_reconciliation.py +0 -0
  281. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/requirements_meta.py +0 -0
  282. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/restoration_report.py +0 -0
  283. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/restore.py +0 -0
  284. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/routes_extractor.py +0 -0
  285. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/runtime_smoke/__init__.py +0 -0
  286. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/runtime_smoke/checks.py +0 -0
  287. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/runtime_smoke/config.py +0 -0
  288. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/runtime_smoke/report.py +0 -0
  289. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/runtime_smoke/runner.py +0 -0
  290. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/scanner.py +0 -0
  291. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/schema_refs.py +0 -0
  292. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/screen_flow_validator.py +0 -0
  293. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/screen_transition_extractor.py +0 -0
  294. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/screen_transitions/defaults.yaml +0 -0
  295. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/skills_cli/__init__.py +0 -0
  296. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/skills_cli/discovery.py +0 -0
  297. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/skills_cli/manager.py +0 -0
  298. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/skills_cli/paths.py +0 -0
  299. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/surface_reconciliation.py +0 -0
  300. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/synth.py +0 -0
  301. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/templates/codd.yaml.tmpl +0 -0
  302. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/templates/conventions.yaml.tmpl +0 -0
  303. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
  304. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/templates/doc_links.yaml.tmpl +0 -0
  305. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
  306. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
  307. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
  308. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
  309. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
  310. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/templates/extracted/system-context.md.j2 +0 -0
  311. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/templates/gitignore.tmpl +0 -0
  312. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/templates/lexicon_questions.md +0 -0
  313. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/templates/lexicon_schema.yaml +0 -0
  314. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/templates/overrides.yaml.tmpl +0 -0
  315. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/test_detection.py +0 -0
  316. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/test_import_coherence.py +0 -0
  317. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/traceability.py +0 -0
  318. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/validator.py +0 -0
  319. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/vb_marker_authenticity.py +0 -0
  320. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/vb_rerun_scope.py +0 -0
  321. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/verifiable_behavior_audit.py +0 -0
  322. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/watch/__init__.py +0 -0
  323. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/watch/events.py +0 -0
  324. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/watch/propagation_log.py +0 -0
  325. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/watch/propagation_pipeline.py +0 -0
  326. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/watch/test_runner.py +0 -0
  327. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/watch/watcher.py +0 -0
  328. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd/wiring.py +0 -0
  329. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
  330. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
  331. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
  332. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
  333. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
  334. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
  335. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
  336. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
  337. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
  338. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
  339. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
  340. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
  341. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
  342. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
  343. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
  344. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
  345. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
  346. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
  347. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
  348. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
  349. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
  350. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
  351. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
  352. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
  353. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
  354. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
  355. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
  356. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
  357. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
  358. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
  359. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
  360. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
  361. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
  362. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
  363. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
  364. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
  365. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
  366. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
  367. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
  368. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
  369. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
  370. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
  371. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
  372. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
  373. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
  374. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
  375. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
  376. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
  377. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
  378. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
  379. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
  380. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
  381. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
  382. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
  383. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
  384. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
  385. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
  386. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
  387. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
  388. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
  389. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
  390. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
  391. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
  392. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
  393. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
  394. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
  395. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
  396. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
  397. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
  398. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
  399. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
  400. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
  401. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
  402. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
  403. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
  404. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
  405. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
  406. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
  407. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
  408. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
  409. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
  410. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
  411. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
  412. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
  413. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
  414. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
  415. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
  416. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
  417. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
  418. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
  419. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
  420. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
  421. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
  422. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
  423. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
  424. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
  425. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
  426. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
  427. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
  428. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
  429. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
  430. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
  431. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
  432. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
  433. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
  434. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
  435. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
  436. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
  437. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
  438. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
  439. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
  440. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
  441. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
  442. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
  443. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
  444. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
  445. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
  446. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
  447. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
  448. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
  449. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
  450. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
  451. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
  452. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
  453. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
  454. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
  455. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
  456. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
  457. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
  458. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
  459. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
  460. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
  461. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
  462. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
  463. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
  464. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
  465. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
  466. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
  467. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
  468. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
  469. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
  470. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
  471. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
  472. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
  473. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
  474. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
  475. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
  476. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
  477. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
  478. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
  479. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
  480. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
  481. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
  482. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
  483. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
  484. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
  485. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
  486. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
  487. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
  488. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
  489. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
  490. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
  491. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
  492. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
  493. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
  494. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
  495. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
  496. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
  497. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
  498. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
  499. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
  500. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
  501. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
  502. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
  503. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
  504. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
  505. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
  506. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
  507. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
  508. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
  509. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
  510. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
  511. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
  512. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
  513. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
  514. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
  515. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
  516. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
  517. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
  518. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
  519. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
  520. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
  521. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
  522. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
  523. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
  524. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
  525. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
  526. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
  527. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
  528. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
  529. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
  530. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
  531. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
  532. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
  533. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
  534. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
  535. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
  536. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
  537. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
  538. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
  539. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
  540. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
  541. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
  542. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
  543. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
  544. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
  545. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
  546. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
  547. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
  548. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
  549. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
  550. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
  551. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
  552. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
  553. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
  554. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
  555. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
  556. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
  557. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
  558. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
  559. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
  560. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
  561. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
  562. {codd_dev-2.37.0 → codd_dev-2.38.0}/codd_plugins/stack_map.yaml +0 -0
  563. {codd_dev-2.37.0 → codd_dev-2.38.0}/docs/cookbook/cdp_browser/README.md +0 -0
  564. {codd_dev-2.37.0 → codd_dev-2.38.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
  565. {codd_dev-2.37.0 → codd_dev-2.38.0}/docs/requirements/README.md +0 -0
  566. {codd_dev-2.37.0 → codd_dev-2.38.0}/dogfood/README.md +0 -0
  567. {codd_dev-2.37.0 → codd_dev-2.38.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
  568. {codd_dev-2.37.0 → codd_dev-2.38.0}/examples/README.md +0 -0
  569. {codd_dev-2.37.0 → codd_dev-2.38.0}/skills/codd-assemble/SKILL.md +0 -0
  570. {codd_dev-2.37.0 → codd_dev-2.38.0}/skills/codd-evolve/SKILL.md +0 -0
  571. {codd_dev-2.37.0 → codd_dev-2.38.0}/skills/codd-generate/SKILL.md +0 -0
  572. {codd_dev-2.37.0 → codd_dev-2.38.0}/skills/codd-greenfield/SKILL.md +0 -0
  573. {codd_dev-2.37.0 → codd_dev-2.38.0}/skills/codd-impact/SKILL.md +0 -0
  574. {codd_dev-2.37.0 → codd_dev-2.38.0}/skills/codd-init/SKILL.md +0 -0
  575. {codd_dev-2.37.0 → codd_dev-2.38.0}/skills/codd-propagate/SKILL.md +0 -0
  576. {codd_dev-2.37.0 → codd_dev-2.38.0}/skills/codd-restore/SKILL.md +0 -0
  577. {codd_dev-2.37.0 → codd_dev-2.38.0}/skills/codd-scan/SKILL.md +0 -0
  578. {codd_dev-2.37.0 → codd_dev-2.38.0}/skills/codd-validate/SKILL.md +0 -0
  579. {codd_dev-2.37.0 → codd_dev-2.38.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.37.0
3
+ Version: 2.38.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.37.0"
3
+ __version__ = "2.38.0"
@@ -0,0 +1,46 @@
1
+ """ACG Contract Registry — the coherence-contract coverage layer for CoDD.
2
+
3
+ This package is an **audit / visualization layer**. It does NOT change any
4
+ existing CoDD gate behaviour. It DECLARES the coherence contracts CoDD enforces
5
+ (or has predicted but not yet enforced) and REPORTS their coverage, turning the
6
+ dogfood ledger from a "failure history" into a "contract coverage table"
7
+ (the minimal first step of GPT-5.5 Pro's ACG Contract Registry design, §5).
8
+
9
+ A *coherence contract* is a typed edge between two CoDD coherence nodes
10
+ (Requirement, DesignDoc, Plan/ImplementTask, GeneratedArtifact, Symbol,
11
+ TestClaim, Toolchain, RepairState, SessionState, SUTChannel, AIInvocation) with
12
+ one or more contract *dimensions* (existence, identity, uniqueness, ownership,
13
+ freshness, observability, authenticity, execution, repairability, budget,
14
+ termination). Each contract is either:
15
+
16
+ * ``covered`` — enforced by a named authority symbol AND pinned by a
17
+ regression test (``certification_fixtures``);
18
+ * ``uncertified`` — enforced by a named authority symbol but with no
19
+ regression-test pointer recorded here (CI should surface
20
+ these so a pointer gets added — but NOT block);
21
+ * ``uncovered`` — a predicted-but-unenforced cell (GPT §2 "空セル"): a latent
22
+ issue with a proposed gate, no authority yet.
23
+
24
+ Public surface (kept small and stable):
25
+
26
+ * :class:`Contract` — the frozen contract record.
27
+ * :data:`REGISTRY` — the tuple of all declared contracts.
28
+ * :func:`contracts_by_status` — group the registry by status.
29
+ * :func:`coverage_summary` — counts by status.
30
+ """
31
+
32
+ from __future__ import annotations
33
+
34
+ from codd.contracts_registry.registry import (
35
+ REGISTRY,
36
+ Contract,
37
+ contracts_by_status,
38
+ coverage_summary,
39
+ )
40
+
41
+ __all__ = [
42
+ "Contract",
43
+ "REGISTRY",
44
+ "contracts_by_status",
45
+ "coverage_summary",
46
+ ]
@@ -0,0 +1,12 @@
1
+ """Entry point for ``python -m codd.contracts_registry`` (delegates to certify).
2
+
3
+ ``python -m codd.contracts_registry`` -> the certification report.
4
+ ``python -m codd.contracts_registry.certify`` -> the same (certify has its own __main__).
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ from codd.contracts_registry.certify import main
10
+
11
+ if __name__ == "__main__":
12
+ raise SystemExit(main())
@@ -0,0 +1,267 @@
1
+ """``python -m codd.contracts_registry.certify`` — report coherence-contract coverage.
2
+
3
+ This CLI is the "visualize first, don't fail" surface of the ACG Contract
4
+ Registry (GPT §5, "最小第一歩": *pointer が無い contract は CI で uncertified と
5
+ 表示する。最初から fail にせず、まず可視化する*).
6
+
7
+ Behaviour:
8
+
9
+ * loads :data:`codd.contracts_registry.REGISTRY`;
10
+ * optionally cross-checks ``dogfood/contract_matrix.yaml`` (``--matrix PATH``)
11
+ for drift between the registry and the human-readable table;
12
+ * for ``covered`` / ``uncertified`` contracts that name regression-test ids,
13
+ optionally checks those test *files* exist under the tests/ tree
14
+ (``--check-fixtures``; existence-only, never runs them);
15
+ * prints a summary table (total / covered / uncertified / uncovered) plus the
16
+ uncovered list (the proactive backlog);
17
+ * **default exit 0** even with uncovered / uncertified contracts (report-only);
18
+ * ``--strict`` exits non-zero iff ANY contract is ``uncertified``
19
+ (covered-but-no-test-pointer). ``uncovered`` cells are KNOWN backlog and do
20
+ NOT trip ``--strict``.
21
+
22
+ It deliberately does NOT execute any test or any CoDD gate.
23
+ """
24
+
25
+ from __future__ import annotations
26
+
27
+ import argparse
28
+ import re
29
+ import sys
30
+ from pathlib import Path
31
+ from typing import Sequence
32
+
33
+ from codd.contracts_registry.registry import (
34
+ REGISTRY,
35
+ Contract,
36
+ contracts_by_status,
37
+ coverage_summary,
38
+ )
39
+
40
+ # Exit codes (kept small + documented; default path is always 0).
41
+ EXIT_OK = 0
42
+ EXIT_STRICT_UNCERTIFIED = 2
43
+ EXIT_MATRIX_DRIFT = 3
44
+
45
+
46
+ def _repo_root() -> Path:
47
+ """The codd-dev (worktree) root — two levels up from this file.
48
+
49
+ ``codd/contracts/certify.py`` -> repo root. Used to resolve the default
50
+ matrix path and the tests/ tree for fixture existence checks.
51
+ """
52
+ return Path(__file__).resolve().parents[2]
53
+
54
+
55
+ # A certification-fixture string may be a precise ``path::test_name`` id or a
56
+ # free-text pointer like ``"tests/foo.py (several cases)"``. We extract any
57
+ # ``tests/...py`` token to do an existence check; free-text without a path is
58
+ # treated as a pointer we cannot file-check (reported, never failed).
59
+ _TEST_PATH_RE = re.compile(r"(tests/[\w./-]+?\.py|tests/[\w./-]+?\.ts)")
60
+
61
+
62
+ def _fixture_test_files(fixture: str) -> list[str]:
63
+ """Extract test file path(s) embedded in a certification-fixture string."""
64
+ return _TEST_PATH_RE.findall(fixture)
65
+
66
+
67
+ def _check_fixture_files(
68
+ contract: Contract, root: Path
69
+ ) -> tuple[list[str], list[str]]:
70
+ """Return (existing, missing) test files referenced by a contract.
71
+
72
+ Existence-only; never imports or runs anything.
73
+ """
74
+ existing: list[str] = []
75
+ missing: list[str] = []
76
+ seen: set[str] = set()
77
+ for fixture in contract.certification_fixtures:
78
+ for rel in _fixture_test_files(fixture):
79
+ if rel in seen:
80
+ continue
81
+ seen.add(rel)
82
+ if (root / rel).is_file():
83
+ existing.append(rel)
84
+ else:
85
+ missing.append(rel)
86
+ return existing, missing
87
+
88
+
89
+ def _load_matrix_ids(matrix_path: Path) -> set[str]:
90
+ """Load contract ids from the human-readable matrix YAML (for drift check).
91
+
92
+ The matrix groups contracts under ``families: {<family>: [ {id: ...}, ...]}``.
93
+ Returns the set of all contract ids found.
94
+ """
95
+ import yaml # local import: only needed when --matrix is given
96
+
97
+ data = yaml.safe_load(matrix_path.read_text(encoding="utf-8")) or {}
98
+ ids: set[str] = set()
99
+ families = data.get("families", {})
100
+ if isinstance(families, dict):
101
+ for entries in families.values():
102
+ for entry in entries or ():
103
+ if isinstance(entry, dict) and "id" in entry:
104
+ ids.add(str(entry["id"]))
105
+ return ids
106
+
107
+
108
+ def _render_summary(
109
+ *,
110
+ check_fixtures: bool,
111
+ root: Path,
112
+ matrix_drift: tuple[set[str], set[str]] | None,
113
+ ) -> tuple[str, bool]:
114
+ """Build the report text. Returns (text, has_missing_fixture_files)."""
115
+ grouped = contracts_by_status()
116
+ summary = coverage_summary()
117
+ lines: list[str] = []
118
+ lines.append("ACG Contract Registry — coverage certification")
119
+ lines.append("=" * 60)
120
+ lines.append(
121
+ f"total={summary['total']} "
122
+ f"covered={summary['covered']} "
123
+ f"uncertified={summary['uncertified']} "
124
+ f"uncovered={summary['uncovered']}"
125
+ )
126
+ lines.append("")
127
+
128
+ has_missing_files = False
129
+
130
+ # covered + uncertified: list with authority + (optional) fixture-file check.
131
+ for status in ("covered", "uncertified"):
132
+ items = grouped[status]
133
+ if not items:
134
+ continue
135
+ lines.append(f"[{status}] ({len(items)})")
136
+ for c in sorted(items, key=lambda x: x.id):
137
+ line = f" {c.id} <- {c.authority}"
138
+ if check_fixtures:
139
+ existing, missing = _check_fixture_files(c, root)
140
+ if missing:
141
+ has_missing_files = True
142
+ line += f" [MISSING test file(s): {', '.join(missing)}]"
143
+ elif existing:
144
+ line += f" [{len(existing)} test file(s) present]"
145
+ lines.append(line)
146
+ lines.append("")
147
+
148
+ # uncovered: the proactive backlog (predicted_issue + proposed_gate).
149
+ uncovered = grouped["uncovered"]
150
+ if uncovered:
151
+ lines.append(f"[uncovered — proactive backlog] ({len(uncovered)})")
152
+ for c in sorted(uncovered, key=lambda x: x.id):
153
+ lines.append(f" {c.id}")
154
+ lines.append(f" issue: {c.predicted_issue}")
155
+ lines.append(f" gate : {c.proposed_gate}")
156
+ lines.append("")
157
+
158
+ if matrix_drift is not None:
159
+ only_registry, only_matrix = matrix_drift
160
+ if not only_registry and not only_matrix:
161
+ lines.append("matrix: in sync with registry (no drift).")
162
+ else:
163
+ lines.append("matrix: DRIFT detected")
164
+ if only_registry:
165
+ lines.append(
166
+ " in registry but NOT in matrix: "
167
+ + ", ".join(sorted(only_registry))
168
+ )
169
+ if only_matrix:
170
+ lines.append(
171
+ " in matrix but NOT in registry: "
172
+ + ", ".join(sorted(only_matrix))
173
+ )
174
+ lines.append("")
175
+
176
+ return "\n".join(lines), has_missing_files
177
+
178
+
179
+ def build_parser() -> argparse.ArgumentParser:
180
+ parser = argparse.ArgumentParser(
181
+ prog="python -m codd.contracts_registry.certify",
182
+ description=(
183
+ "Report ACG coherence-contract coverage from the registry "
184
+ "(visualize-first; report-only by default)."
185
+ ),
186
+ )
187
+ parser.add_argument(
188
+ "--matrix",
189
+ metavar="PATH",
190
+ default=None,
191
+ help=(
192
+ "cross-check this contract_matrix.yaml against the registry and "
193
+ "report id drift (default: do not cross-check)."
194
+ ),
195
+ )
196
+ parser.add_argument(
197
+ "--check-fixtures",
198
+ action="store_true",
199
+ help=(
200
+ "existence-check the regression-test FILES named by covered/"
201
+ "uncertified contracts (never runs them)."
202
+ ),
203
+ )
204
+ parser.add_argument(
205
+ "--strict",
206
+ action="store_true",
207
+ help=(
208
+ "exit non-zero iff any contract is 'uncertified' (covered but no "
209
+ "test pointer). 'uncovered' backlog cells do NOT trip strict mode."
210
+ ),
211
+ )
212
+ return parser
213
+
214
+
215
+ def main(argv: Sequence[str] | None = None) -> int:
216
+ args = build_parser().parse_args(argv)
217
+ root = _repo_root()
218
+
219
+ matrix_drift: tuple[set[str], set[str]] | None = None
220
+ if args.matrix:
221
+ matrix_path = Path(args.matrix)
222
+ if not matrix_path.is_absolute():
223
+ matrix_path = (Path.cwd() / matrix_path).resolve()
224
+ if not matrix_path.is_file():
225
+ print(f"error: matrix file not found: {matrix_path}", file=sys.stderr)
226
+ return EXIT_MATRIX_DRIFT
227
+ matrix_ids = _load_matrix_ids(matrix_path)
228
+ registry_ids = {c.id for c in REGISTRY}
229
+ matrix_drift = (registry_ids - matrix_ids, matrix_ids - registry_ids)
230
+
231
+ text, _has_missing_files = _render_summary(
232
+ check_fixtures=args.check_fixtures,
233
+ root=root,
234
+ matrix_drift=matrix_drift,
235
+ )
236
+ print(text)
237
+
238
+ summary = coverage_summary()
239
+
240
+ # Default: report-only, exit 0 (visualize first, don't fail).
241
+ exit_code = EXIT_OK
242
+
243
+ # --strict: fail ONLY on uncertified (covered-but-no-pointer). Never on
244
+ # uncovered (known backlog).
245
+ if args.strict and summary["uncertified"] > 0:
246
+ print(
247
+ f"strict: {summary['uncertified']} uncertified contract(s) "
248
+ "(covered but no regression-test pointer) — failing.",
249
+ file=sys.stderr,
250
+ )
251
+ exit_code = EXIT_STRICT_UNCERTIFIED
252
+
253
+ # Matrix drift is a hard error regardless of --strict: the committed matrix
254
+ # MUST mirror the registry (the no-drift invariant the meta-test pins).
255
+ if matrix_drift is not None and (matrix_drift[0] or matrix_drift[1]):
256
+ print(
257
+ "error: contract_matrix.yaml has drifted from the registry "
258
+ "(regenerate it).",
259
+ file=sys.stderr,
260
+ )
261
+ exit_code = EXIT_MATRIX_DRIFT if exit_code == EXIT_OK else exit_code
262
+
263
+ return exit_code
264
+
265
+
266
+ if __name__ == "__main__": # pragma: no cover - thin shim
267
+ raise SystemExit(main())
@@ -0,0 +1,146 @@
1
+ """Generate ``dogfood/contract_matrix.yaml`` from the registry.
2
+
3
+ The committed matrix is the human-readable "ledger -> 契約カバレッジ表" artifact
4
+ (GPT §5). It is GENERATED from :data:`codd.contracts_registry.REGISTRY` so it can never
5
+ silently drift; ``tests/test_contracts_registry.py`` has a meta-test asserting
6
+ the committed file matches what this generator would produce.
7
+
8
+ Run: ``python -m codd.contracts_registry.generate_matrix`` (writes the file)
9
+ ``python -m codd.contracts_registry.generate_matrix --check`` (diff only, exit!=0
10
+ on drift; used in tests/CI).
11
+ """
12
+
13
+ from __future__ import annotations
14
+
15
+ import argparse
16
+ import sys
17
+ from collections import OrderedDict
18
+ from pathlib import Path
19
+
20
+ from codd.contracts_registry.registry import REGISTRY, Contract, coverage_summary
21
+
22
+
23
+ def _contract_to_entry(c: Contract) -> "OrderedDict[str, object]":
24
+ """Render one contract as an ordered mapping (covered vs uncovered shape)."""
25
+ entry: "OrderedDict[str, object]" = OrderedDict()
26
+ entry["id"] = c.id
27
+ entry["source_node"] = c.source_node
28
+ entry["target_node"] = c.target_node
29
+ entry["edge_type"] = c.edge_type
30
+ entry["dimensions"] = list(c.dimensions)
31
+ entry["status"] = c.status
32
+ entry["enforcement"] = c.enforcement
33
+ entry["fail_mode"] = c.fail_mode
34
+ if c.status == "uncovered":
35
+ entry["authority"] = None
36
+ entry["predicted_issue"] = c.predicted_issue
37
+ entry["proposed_gate"] = c.proposed_gate
38
+ else:
39
+ entry["authority"] = c.authority
40
+ if c.config_flag:
41
+ entry["config_flag"] = c.config_flag
42
+ entry["certification_fixtures"] = list(c.certification_fixtures)
43
+ if c.finding_ids:
44
+ entry["finding_ids"] = list(c.finding_ids)
45
+ return entry
46
+
47
+
48
+ def build_document() -> "OrderedDict[str, object]":
49
+ """Assemble the full matrix document (grouped by node family)."""
50
+ families: "OrderedDict[str, list]" = OrderedDict()
51
+ # Stable family order = first-seen order in the registry (covered first,
52
+ # then outer, then uncovered — matches registry assembly), which keeps the
53
+ # file readable and the diff stable.
54
+ for c in REGISTRY:
55
+ families.setdefault(c.node_family, []).append(_contract_to_entry(c))
56
+
57
+ doc: "OrderedDict[str, object]" = OrderedDict()
58
+ doc["generated_from"] = "codd/contracts/registry.py"
59
+ doc["coverage_summary"] = dict(coverage_summary())
60
+ doc["families"] = families
61
+ return doc
62
+
63
+
64
+ def render_yaml() -> str:
65
+ """Deterministic YAML text for the matrix (stable key order, block style)."""
66
+ import yaml
67
+
68
+ # Preserve insertion order (OrderedDict) in the dump.
69
+ class _OrderedDumper(yaml.SafeDumper):
70
+ pass
71
+
72
+ def _ordered_representer(dumper, data):
73
+ return dumper.represent_mapping(
74
+ "tag:yaml.org,2002:map", data.items()
75
+ )
76
+
77
+ _OrderedDumper.add_representer(OrderedDict, _ordered_representer)
78
+
79
+ body = yaml.dump(
80
+ build_document(),
81
+ Dumper=_OrderedDumper,
82
+ sort_keys=False,
83
+ default_flow_style=False,
84
+ allow_unicode=True,
85
+ width=100,
86
+ )
87
+ header = (
88
+ "# ═══════════════════════════════════════════════════════════════════\n"
89
+ "# ACG Contract Coverage Matrix (ledger -> 契約カバレッジ表)\n"
90
+ "# ═══════════════════════════════════════════════════════════════════\n"
91
+ "# AUTO-GENERATED from codd/contracts/registry.py.\n"
92
+ "# Regenerate with: python -m codd.contracts_registry.generate_matrix\n"
93
+ "# A meta-test (tests/test_contracts_registry.py) pins this file to the\n"
94
+ "# registry so they can never drift. Do NOT hand-edit.\n"
95
+ "#\n"
96
+ "# status: covered = enforced by `authority` AND pinned by a test\n"
97
+ "# uncertified = enforced by `authority` but no test pointer\n"
98
+ "# uncovered = predicted-but-unenforced (GPT §2 空セル backlog)\n"
99
+ "# ═══════════════════════════════════════════════════════════════════\n"
100
+ )
101
+ return header + body
102
+
103
+
104
+ def matrix_path() -> Path:
105
+ """``dogfood/contract_matrix.yaml`` at the repo root."""
106
+ return Path(__file__).resolve().parents[2] / "dogfood" / "contract_matrix.yaml"
107
+
108
+
109
+ def main(argv: list[str] | None = None) -> int:
110
+ parser = argparse.ArgumentParser(
111
+ prog="python -m codd.contracts_registry.generate_matrix",
112
+ description="Generate dogfood/contract_matrix.yaml from the registry.",
113
+ )
114
+ parser.add_argument(
115
+ "--check",
116
+ action="store_true",
117
+ help="do not write; exit non-zero if the committed file is stale.",
118
+ )
119
+ args = parser.parse_args(argv)
120
+
121
+ path = matrix_path()
122
+ expected = render_yaml()
123
+
124
+ if args.check:
125
+ if not path.is_file():
126
+ print(f"missing: {path}", file=sys.stderr)
127
+ return 1
128
+ actual = path.read_text(encoding="utf-8")
129
+ if actual != expected:
130
+ print(
131
+ "contract_matrix.yaml is STALE — run "
132
+ "`python -m codd.contracts_registry.generate_matrix`.",
133
+ file=sys.stderr,
134
+ )
135
+ return 1
136
+ print("contract_matrix.yaml is up to date.")
137
+ return 0
138
+
139
+ path.parent.mkdir(parents=True, exist_ok=True)
140
+ path.write_text(expected, encoding="utf-8")
141
+ print(f"wrote {path} ({len(REGISTRY)} contracts).")
142
+ return 0
143
+
144
+
145
+ if __name__ == "__main__":
146
+ raise SystemExit(main())