codd-dev 3.2.0__tar.gz → 3.4.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 (625) hide show
  1. {codd_dev-3.2.0 → codd_dev-3.4.0}/PKG-INFO +1 -1
  2. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/__init__.py +1 -1
  3. codd_dev-3.4.0/codd/dag/checks/resource_flow_coherence.py +382 -0
  4. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/extractor.py +14 -0
  5. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/runner.py +1 -0
  6. {codd_dev-3.2.0 → codd_dev-3.4.0}/pyproject.toml +1 -1
  7. {codd_dev-3.2.0 → codd_dev-3.4.0}/.gitignore +0 -0
  8. {codd_dev-3.2.0 → codd_dev-3.4.0}/LICENSE +0 -0
  9. {codd_dev-3.2.0 → codd_dev-3.4.0}/README.md +0 -0
  10. {codd_dev-3.2.0 → codd_dev-3.4.0}/bench_fixture/README.md +0 -0
  11. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/__main__.py +0 -0
  12. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/_git_helper.py +0 -0
  13. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/action_outcome.py +0 -0
  14. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/ai_invoke.py +0 -0
  15. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/ai_patch.py +0 -0
  16. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/artifact_contract.py +0 -0
  17. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/artifact_ids.py +0 -0
  18. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/artifacts/catalog.yaml +0 -0
  19. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/ask_user_question_adapter.py +0 -0
  20. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/assembler.py +0 -0
  21. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/bridge.py +0 -0
  22. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/brownfield/__init__.py +0 -0
  23. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/brownfield/pipeline.py +0 -0
  24. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/capability_completeness.py +0 -0
  25. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/claude_cli.py +0 -0
  26. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/cli.py +0 -0
  27. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/clustering.py +0 -0
  28. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/coherence_adapters.py +0 -0
  29. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/coherence_engine.py +0 -0
  30. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/confidence.py +0 -0
  31. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/config.py +0 -0
  32. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/config_schema.py +0 -0
  33. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/contracts.py +0 -0
  34. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/contracts_registry/__init__.py +0 -0
  35. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/contracts_registry/__main__.py +0 -0
  36. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/contracts_registry/certify.py +0 -0
  37. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/contracts_registry/generate_matrix.py +0 -0
  38. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/contracts_registry/registry.py +0 -0
  39. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/coverage_auditor.py +0 -0
  40. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/coverage_execution_coherence.py +0 -0
  41. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/coverage_metrics.py +0 -0
  42. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/__init__.py +0 -0
  43. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/auto_repair.py +0 -0
  44. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/builder.py +0 -0
  45. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/__init__.py +0 -0
  46. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
  47. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/artifact_contract_check.py +0 -0
  48. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/ci_health.py +0 -0
  49. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/dependency_freshness.py +0 -0
  50. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/depends_on_consistency.py +0 -0
  51. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/deployment_completeness.py +0 -0
  52. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/edge_validity.py +0 -0
  53. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/environment_coverage.py +0 -0
  54. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/implementation_coverage.py +0 -0
  55. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/node_completeness.py +0 -0
  56. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/opt_out.py +0 -0
  57. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/task_completion.py +0 -0
  58. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/transitive_closure.py +0 -0
  59. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/ui_coherence.py +0 -0
  60. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/checks/user_journey_coherence.py +0 -0
  61. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/coverage_axes.py +0 -0
  62. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/defaults/cli.yaml +0 -0
  63. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
  64. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/defaults/csharp.yaml +0 -0
  65. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/defaults/elixir.yaml +0 -0
  66. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/defaults/generic.yaml +0 -0
  67. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/defaults/iot.yaml +0 -0
  68. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/defaults/java.yaml +0 -0
  69. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/defaults/kotlin.yaml +0 -0
  70. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/defaults/mobile.yaml +0 -0
  71. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/defaults/ruby.yaml +0 -0
  72. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/defaults/rust.yaml +0 -0
  73. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/defaults/scala.yaml +0 -0
  74. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/defaults/swift.yaml +0 -0
  75. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
  76. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/defaults/web.yaml +0 -0
  77. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dag/impact.py +0 -0
  78. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/defaults.py +0 -0
  79. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/defaults.yaml +0 -0
  80. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/dependency_lock_coherence.py +0 -0
  81. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deploy_targets/__init__.py +0 -0
  82. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deploy_targets/app_service.py +0 -0
  83. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deploy_targets/base.py +0 -0
  84. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deploy_targets/docker_compose.py +0 -0
  85. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployer.py +0 -0
  86. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/__init__.py +0 -0
  87. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/checks/__init__.py +0 -0
  88. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
  89. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
  90. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
  91. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
  92. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/extractor.py +0 -0
  93. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/__init__.py +0 -0
  94. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/ai_command.py +0 -0
  95. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/ai_command_factory.py +0 -0
  96. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/codex_app_server.py +0 -0
  97. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/llm_consideration.py +0 -0
  98. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/schema/__init__.py +0 -0
  99. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/schema/prisma.py +0 -0
  100. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/target/__init__.py +0 -0
  101. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/target/docker_compose.py +0 -0
  102. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/verification/__init__.py +0 -0
  103. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
  104. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
  105. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
  106. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
  107. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
  108. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/verification/curl.py +0 -0
  109. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
  110. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
  111. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/verification/playwright.py +0 -0
  112. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/verification/pytest_http.py +0 -0
  113. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/deployment/providers/verification/vitest.py +0 -0
  114. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/design_md.py +0 -0
  115. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/diff/__init__.py +0 -0
  116. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/diff/apply.py +0 -0
  117. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/diff/engine.py +0 -0
  118. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/diff/persistence.py +0 -0
  119. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/diff/templates/diff_prompt.md +0 -0
  120. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/discovery.py +0 -0
  121. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/drift.py +0 -0
  122. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/e2e_contract_coherence.py +0 -0
  123. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/e2e_extractor.py +0 -0
  124. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/e2e_generator.py +0 -0
  125. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/e2e_harness.py +0 -0
  126. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/e2e_runner.py +0 -0
  127. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/elicit/__init__.py +0 -0
  128. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/elicit/apply.py +0 -0
  129. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/elicit/engine.py +0 -0
  130. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/elicit/finding.py +0 -0
  131. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/elicit/formatters/__init__.py +0 -0
  132. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/elicit/formatters/base.py +0 -0
  133. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/elicit/formatters/interactive.py +0 -0
  134. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/elicit/formatters/json_fmt.py +0 -0
  135. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/elicit/formatters/md.py +0 -0
  136. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/elicit/lexicon_loader.py +0 -0
  137. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/elicit/persistence.py +0 -0
  138. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
  139. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/env_refs.py +0 -0
  140. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/extract_ai.py +0 -0
  141. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/extract_paths.py +0 -0
  142. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/extractor.py +0 -0
  143. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fix/__init__.py +0 -0
  144. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fix/candidate_selector.py +0 -0
  145. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fix/design_updater.py +0 -0
  146. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fix/impact_planner.py +0 -0
  147. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fix/impl_propagation.py +0 -0
  148. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fix/interactive_prompt.py +0 -0
  149. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fix/phenomenon_fixer.py +0 -0
  150. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fix/phenomenon_parser.py +0 -0
  151. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fix/risk_classifier.py +0 -0
  152. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fix/templates/clarification_question.txt +0 -0
  153. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fix/templates/design_update.txt +0 -0
  154. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fix/templates/impl_update.txt +0 -0
  155. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
  156. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fix/templates/risk_assessment.txt +0 -0
  157. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fix/templates_loader.py +0 -0
  158. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fixer.py +0 -0
  159. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fixup_drift.py +0 -0
  160. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fixup_drift_strategies/__init__.py +0 -0
  161. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
  162. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
  163. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
  164. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/frontmatter.py +0 -0
  165. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/generator.py +0 -0
  166. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/git_evidence.py +0 -0
  167. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/graph.py +0 -0
  168. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/greenfield/__init__.py +0 -0
  169. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/greenfield/pipeline.py +0 -0
  170. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/hitl_session.py +0 -0
  171. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/hooks/__init__.py +0 -0
  172. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/hooks/pre-commit +0 -0
  173. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
  174. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
  175. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/hooks/recipes/codex_hook.sh +0 -0
  176. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
  177. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
  178. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/iac_nfr.py +0 -0
  179. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/implement_oracle.py +0 -0
  180. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/implement_oracle_scope.py +0 -0
  181. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/implement_oracle_types.py +0 -0
  182. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/implementer/__init__.py +0 -0
  183. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/implementer/chunked_runner.py +0 -0
  184. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/implementer/typecheck_loop.py +0 -0
  185. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/implementer.py +0 -0
  186. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/import_coherence.py +0 -0
  187. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/inheritance.py +0 -0
  188. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/init/__init__.py +0 -0
  189. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/init/lexicon_suggest.py +0 -0
  190. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/init/llm_lexicon_suggester.py +0 -0
  191. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/init/stack_detector.py +0 -0
  192. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/knowledge_fetcher.py +0 -0
  193. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/__init__.py +0 -0
  194. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/adapters/__init__.py +0 -0
  195. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/adapters/implement_oracle.py +0 -0
  196. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/adapters/oracle_go.py +0 -0
  197. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/adapters/oracle_python.py +0 -0
  198. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/adapters/oracle_typescript.py +0 -0
  199. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/adapters/runner_report.py +0 -0
  200. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/builtin_adapters.py +0 -0
  201. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/compat.py +0 -0
  202. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/contract.py +0 -0
  203. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/loader.py +0 -0
  204. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/oracle_executor.py +0 -0
  205. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/path_planner.py +0 -0
  206. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/profile.py +0 -0
  207. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/profiles/go.yaml +0 -0
  208. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/profiles/python.yaml +0 -0
  209. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/profiles/typescript.yaml +0 -0
  210. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/registry.py +0 -0
  211. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/verify_executor.py +0 -0
  212. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/languages/verify_plan.py +0 -0
  213. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/lexicon.py +0 -0
  214. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/lexicon_cli/__init__.py +0 -0
  215. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
  216. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/lexicon_cli/formatters/html.py +0 -0
  217. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
  218. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/lexicon_cli/formatters/md.py +0 -0
  219. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/lexicon_cli/inspector.py +0 -0
  220. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/lexicon_cli/manager.py +0 -0
  221. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/lexicon_cli/reporter.py +0 -0
  222. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/lexicon_cli/threshold.py +0 -0
  223. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/__init__.py +0 -0
  224. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/approval.py +0 -0
  225. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/best_practice_augmenter.py +0 -0
  226. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/criteria_expander.py +0 -0
  227. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/design_doc_extractor.py +0 -0
  228. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/impl_step_deriver.py +0 -0
  229. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/means_catalog_loader.py +0 -0
  230. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/parser.py +0 -0
  231. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/plan_deriver.py +0 -0
  232. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/prompt_builder.py +0 -0
  233. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/strategy_validator.py +0 -0
  234. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
  235. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
  236. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
  237. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
  238. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
  239. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/templates/meta_instruction.md +0 -0
  240. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/templates/plan_derive_meta.md +0 -0
  241. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
  242. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/mcp_server.py +0 -0
  243. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/measure.py +0 -0
  244. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/operational_e2e_audit.py +0 -0
  245. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/operations_derive.py +0 -0
  246. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/parsing/__init__.py +0 -0
  247. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/parsing/_shared.py +0 -0
  248. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/parsing/api_specs.py +0 -0
  249. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/parsing/extractor_registry.py +0 -0
  250. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/parsing/filesystem_routes.py +0 -0
  251. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/parsing/iac.py +0 -0
  252. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/parsing/python_ast.py +0 -0
  253. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/parsing/regex_strategies.py +0 -0
  254. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/parsing/schemas.py +0 -0
  255. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/parsing/tests_builddeps.py +0 -0
  256. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/parsing/treesitter.py +0 -0
  257. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/planner.py +0 -0
  258. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/policy.py +0 -0
  259. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/preflight/__init__.py +0 -0
  260. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/preflight/defaults/cli.yaml +0 -0
  261. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/preflight/defaults/generic.yaml +0 -0
  262. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/preflight/defaults/iot.yaml +0 -0
  263. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/preflight/defaults/mobile.yaml +0 -0
  264. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/preflight/defaults/web.yaml +0 -0
  265. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/project_types.py +0 -0
  266. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/propagate.py +0 -0
  267. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/propagation_common.py +0 -0
  268. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/propagator.py +0 -0
  269. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/reconciliation_ledger.py +0 -0
  270. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/reference_resolution.py +0 -0
  271. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/registry.py +0 -0
  272. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/__init__.py +0 -0
  273. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/approval_repair.py +0 -0
  274. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/auto_scope_guard.py +0 -0
  275. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/engine.py +0 -0
  276. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/git_patcher.py +0 -0
  277. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/history.py +0 -0
  278. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/llm_repair_engine.py +0 -0
  279. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/loop.py +0 -0
  280. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/primary_picker.py +0 -0
  281. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/proof_breaks.py +0 -0
  282. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/repair_result.py +0 -0
  283. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/repairability_classifier.py +0 -0
  284. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/schema.py +0 -0
  285. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/templates/analyze_meta.md +0 -0
  286. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/templates/propose_meta.md +0 -0
  287. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
  288. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/templates/repairability_meta.md +0 -0
  289. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/test_failure_attribution.py +0 -0
  290. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair/verify_runner.py +0 -0
  291. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/repair_slice.py +0 -0
  292. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/require.py +0 -0
  293. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/require_plugins.py +0 -0
  294. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/require_propagate.py +0 -0
  295. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
  296. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
  297. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
  298. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
  299. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/required_artifacts/defaults/web.yaml +0 -0
  300. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/required_artifacts_deriver.py +0 -0
  301. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
  302. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
  303. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
  304. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
  305. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
  306. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/requirement_completeness_auditor.py +0 -0
  307. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/requirement_reconciliation.py +0 -0
  308. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/requirements_meta.py +0 -0
  309. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/restoration_report.py +0 -0
  310. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/restore.py +0 -0
  311. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/routes_extractor.py +0 -0
  312. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/runtime_smoke/__init__.py +0 -0
  313. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/runtime_smoke/checks.py +0 -0
  314. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/runtime_smoke/config.py +0 -0
  315. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/runtime_smoke/report.py +0 -0
  316. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/runtime_smoke/runner.py +0 -0
  317. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/scanner.py +0 -0
  318. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/schema_refs.py +0 -0
  319. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/screen_flow_validator.py +0 -0
  320. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/screen_transition_extractor.py +0 -0
  321. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/screen_transitions/defaults.yaml +0 -0
  322. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/skills_cli/__init__.py +0 -0
  323. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/skills_cli/discovery.py +0 -0
  324. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/skills_cli/manager.py +0 -0
  325. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/skills_cli/paths.py +0 -0
  326. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/__init__.py +0 -0
  327. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/adapters/__init__.py +0 -0
  328. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/adapters/_base.py +0 -0
  329. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/adapters/nextjs.py +0 -0
  330. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/adapters/playwright.py +0 -0
  331. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/adapters/prisma.py +0 -0
  332. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/command_authenticity.py +0 -0
  333. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/command_override.py +0 -0
  334. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/command_plan.py +0 -0
  335. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/compose.py +0 -0
  336. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/loader.py +0 -0
  337. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/lock.py +0 -0
  338. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/obligations.py +0 -0
  339. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/profile.py +0 -0
  340. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/profiles/addons/playwright.yaml +0 -0
  341. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/profiles/addons/prisma.yaml +0 -0
  342. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/profiles/frameworks/nextjs.yaml +0 -0
  343. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/project.py +0 -0
  344. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/registry.py +0 -0
  345. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/replacement_proof.py +0 -0
  346. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/stack/resolve.py +0 -0
  347. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/surface_reconciliation.py +0 -0
  348. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/synth.py +0 -0
  349. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/templates/codd.yaml.tmpl +0 -0
  350. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/templates/conventions.yaml.tmpl +0 -0
  351. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
  352. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/templates/doc_links.yaml.tmpl +0 -0
  353. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
  354. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
  355. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
  356. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
  357. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
  358. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/templates/extracted/system-context.md.j2 +0 -0
  359. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/templates/gitignore.tmpl +0 -0
  360. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/templates/lexicon_questions.md +0 -0
  361. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/templates/lexicon_schema.yaml +0 -0
  362. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/templates/overrides.yaml.tmpl +0 -0
  363. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/test_detection.py +0 -0
  364. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/test_import_coherence.py +0 -0
  365. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/traceability.py +0 -0
  366. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/validator.py +0 -0
  367. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/vb_marker_authenticity.py +0 -0
  368. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/vb_rerun_scope.py +0 -0
  369. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/verifiable_behavior_audit.py +0 -0
  370. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/watch/__init__.py +0 -0
  371. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/watch/events.py +0 -0
  372. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/watch/propagation_log.py +0 -0
  373. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/watch/propagation_pipeline.py +0 -0
  374. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/watch/test_runner.py +0 -0
  375. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/watch/watcher.py +0 -0
  376. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd/wiring.py +0 -0
  377. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
  378. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
  379. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
  380. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
  381. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
  382. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
  383. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
  384. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
  385. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
  386. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
  387. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
  388. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
  389. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
  390. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
  391. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
  392. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
  393. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
  394. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
  395. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
  396. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
  397. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
  398. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
  399. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
  400. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
  401. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
  402. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
  403. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
  404. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
  405. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
  406. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
  407. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
  408. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
  409. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
  410. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
  411. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
  412. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
  413. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
  414. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
  415. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
  416. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
  417. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
  418. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
  419. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
  420. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
  421. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
  422. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
  423. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
  424. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
  425. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
  426. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
  427. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
  428. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
  429. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
  430. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
  431. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
  432. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
  433. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
  434. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
  435. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
  436. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
  437. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
  438. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
  439. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
  440. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
  441. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
  442. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
  443. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
  444. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
  445. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
  446. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
  447. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
  448. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
  449. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
  450. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
  451. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
  452. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
  453. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
  454. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
  455. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
  456. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
  457. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
  458. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
  459. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
  460. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
  461. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
  462. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
  463. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
  464. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
  465. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
  466. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
  467. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
  468. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
  469. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
  470. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
  471. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
  472. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
  473. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
  474. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
  475. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
  476. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
  477. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
  478. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
  479. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
  480. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
  481. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
  482. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
  483. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
  484. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
  485. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
  486. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
  487. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
  488. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
  489. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
  490. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
  491. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
  492. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
  493. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
  494. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
  495. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
  496. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
  497. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
  498. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
  499. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
  500. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
  501. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
  502. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
  503. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
  504. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
  505. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
  506. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
  507. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
  508. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
  509. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
  510. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
  511. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
  512. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
  513. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
  514. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
  515. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
  516. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
  517. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
  518. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
  519. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
  520. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
  521. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
  522. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
  523. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
  524. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
  525. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
  526. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
  527. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
  528. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
  529. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
  530. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
  531. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
  532. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
  533. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
  534. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
  535. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
  536. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
  537. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
  538. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
  539. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
  540. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
  541. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
  542. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
  543. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
  544. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
  545. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
  546. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
  547. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
  548. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
  549. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
  550. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
  551. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
  552. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
  553. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
  554. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
  555. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
  556. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
  557. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
  558. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
  559. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
  560. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
  561. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
  562. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
  563. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
  564. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
  565. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
  566. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
  567. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
  568. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
  569. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
  570. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
  571. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
  572. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
  573. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
  574. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
  575. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
  576. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
  577. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
  578. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
  579. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
  580. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
  581. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
  582. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
  583. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
  584. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
  585. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
  586. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
  587. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
  588. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
  589. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
  590. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
  591. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
  592. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
  593. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
  594. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
  595. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
  596. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
  597. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
  598. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
  599. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
  600. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
  601. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
  602. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
  603. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
  604. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
  605. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
  606. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
  607. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
  608. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
  609. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
  610. {codd_dev-3.2.0 → codd_dev-3.4.0}/codd_plugins/stack_map.yaml +0 -0
  611. {codd_dev-3.2.0 → codd_dev-3.4.0}/docs/cookbook/cdp_browser/README.md +0 -0
  612. {codd_dev-3.2.0 → codd_dev-3.4.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
  613. {codd_dev-3.2.0 → codd_dev-3.4.0}/docs/requirements/README.md +0 -0
  614. {codd_dev-3.2.0 → codd_dev-3.4.0}/examples/README.md +0 -0
  615. {codd_dev-3.2.0 → codd_dev-3.4.0}/skills/codd-assemble/SKILL.md +0 -0
  616. {codd_dev-3.2.0 → codd_dev-3.4.0}/skills/codd-evolve/SKILL.md +0 -0
  617. {codd_dev-3.2.0 → codd_dev-3.4.0}/skills/codd-generate/SKILL.md +0 -0
  618. {codd_dev-3.2.0 → codd_dev-3.4.0}/skills/codd-greenfield/SKILL.md +0 -0
  619. {codd_dev-3.2.0 → codd_dev-3.4.0}/skills/codd-impact/SKILL.md +0 -0
  620. {codd_dev-3.2.0 → codd_dev-3.4.0}/skills/codd-init/SKILL.md +0 -0
  621. {codd_dev-3.2.0 → codd_dev-3.4.0}/skills/codd-propagate/SKILL.md +0 -0
  622. {codd_dev-3.2.0 → codd_dev-3.4.0}/skills/codd-restore/SKILL.md +0 -0
  623. {codd_dev-3.2.0 → codd_dev-3.4.0}/skills/codd-scan/SKILL.md +0 -0
  624. {codd_dev-3.2.0 → codd_dev-3.4.0}/skills/codd-validate/SKILL.md +0 -0
  625. {codd_dev-3.2.0 → codd_dev-3.4.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: 3.2.0
3
+ Version: 3.4.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__ = "3.2.0"
3
+ __version__ = "3.4.0"
@@ -0,0 +1,382 @@
1
+ """DAG check: resource flow coherence.
2
+
3
+ The data-field sibling of the enablement axis. The enablement axis asks "is a
4
+ *capability* that gets exercised also granted/enabled?"; this check asks the
5
+ same question for *data resources*: a required capability that CONSUMES a
6
+ contract resource cannot function unless some obligation PRODUCES that resource.
7
+ A resource that is read by a required capability but written by no obligation is
8
+ a "dangling required consumer" — a real incompleteness that must not pass green.
9
+ A resource that is written by an obligation but read by no declared consumer is
10
+ a "dead resource" — an amber-only ambiguity that must be surfaced without
11
+ blocking deploy.
12
+
13
+ Design notes (kept deliberately conservative to preserve generality and avoid
14
+ false reds):
15
+
16
+ * **Contract-declaration driven.** Producers/consumers come from declared
17
+ ``capability_contracts`` / ``resource_contracts`` in design-doc frontmatter,
18
+ never from scanning implementation source for literals. The core therefore
19
+ knows no project/framework/language tokens; it only reasons over canonical
20
+ resource ids and produce/consume edges.
21
+ * **Dormant by default.** A project that declares no resource/capability
22
+ contracts gets ``skip`` (exit code unaffected) — existing projects keep
23
+ passing unchanged.
24
+ * **RED only when all hold:** (1) the consumer is required
25
+ (``required: true`` or ``on_missing: fail``), (2) the consuming capability is
26
+ a required capability of a ``critical``/``high`` user journey, and (3) no
27
+ producer / external provider exists for that resource. Anything weaker
28
+ (optional consumer, ``on_missing: skip|degrade``, capability not on a critical
29
+ journey, external/seed provider declared) is not gated.
30
+
31
+ This is intentionally separate from the enablement axis: ``enables/exercises``
32
+ is the *capability* supply relation, ``produces/consumes`` is the *resource*
33
+ supply relation. Mixing them muddies severity and diagnostics.
34
+ """
35
+
36
+ from __future__ import annotations
37
+
38
+ from dataclasses import dataclass, field
39
+ from pathlib import Path
40
+ from typing import Any
41
+
42
+ from codd.dag.checks import DagCheck, register_dag_check
43
+
44
+
45
+ _CRITICAL_LEVELS = {"critical", "high"}
46
+ _OPTIONAL_ON_MISSING = {"skip", "degrade", "ignore", "optional", "tolerate"}
47
+ _TRUE_TOKENS = {"true", "yes", "1", "required", "must"}
48
+ _FALSE_TOKENS = {"false", "no", "0", "optional"}
49
+
50
+
51
+ @dataclass
52
+ class ResourceUse:
53
+ resource: str
54
+ direction: str # "consume" | "produce"
55
+ owner_node_id: str
56
+ capability: str | None = None
57
+ obligation: str | None = None
58
+ required: bool | None = None
59
+ on_missing: str | None = None
60
+ external: bool = False
61
+
62
+
63
+ @dataclass
64
+ class ResourceFlowCoherenceResult:
65
+ check_name: str = "resource_flow_coherence"
66
+ severity: str = "info"
67
+ status: str = "pass"
68
+ message: str = ""
69
+ block_deploy: bool = False
70
+ violations: list[dict[str, Any]] = field(default_factory=list)
71
+ warnings: list[dict[str, Any]] = field(default_factory=list)
72
+ passed: bool = True
73
+ skipped: bool = False
74
+
75
+
76
+ @register_dag_check("resource_flow_coherence")
77
+ class ResourceFlowCoherenceCheck(DagCheck):
78
+ check_name = "resource_flow_coherence"
79
+ severity = "red"
80
+ block_deploy = True
81
+
82
+ def run(
83
+ self,
84
+ dag: Any | None = None,
85
+ project_root: str | Path | None = None,
86
+ settings: dict[str, Any] | None = None,
87
+ codd_config: dict[str, Any] | None = None,
88
+ ) -> ResourceFlowCoherenceResult:
89
+ target = dag if dag is not None else self.dag
90
+ if target is None:
91
+ raise ValueError("dag is required for resource_flow_coherence check")
92
+
93
+ design_docs = [
94
+ node
95
+ for node in sorted(target.nodes.values(), key=lambda item: item.id)
96
+ if getattr(node, "kind", None) == "design_doc"
97
+ ]
98
+
99
+ uses: list[ResourceUse] = []
100
+ alias_map: dict[str, str] = {}
101
+ for node in design_docs:
102
+ attrs = getattr(node, "attributes", None) or {}
103
+ uses.extend(self._capability_contract_uses(node.id, attrs))
104
+ node_uses, node_aliases = self._resource_contract_uses(node.id, attrs)
105
+ uses.extend(node_uses)
106
+ alias_map.update(node_aliases)
107
+
108
+ if not uses:
109
+ return ResourceFlowCoherenceResult(
110
+ severity="info",
111
+ status="skip",
112
+ skipped=True,
113
+ passed=True,
114
+ block_deploy=False,
115
+ message="resource_flow_coherence SKIP (no resource/capability contracts declared)",
116
+ )
117
+
118
+ critical_caps = self._critical_required_capabilities(design_docs)
119
+
120
+ producers: dict[str, list[ResourceUse]] = {}
121
+ consumers: list[ResourceUse] = []
122
+ for use in uses:
123
+ use.resource = self._canonical(use.resource, alias_map)
124
+ if use.direction == "produce":
125
+ producers.setdefault(use.resource, []).append(use)
126
+ else:
127
+ consumers.append(use)
128
+
129
+ violations: list[dict[str, Any]] = []
130
+ warnings: list[dict[str, Any]] = self._dead_resource_warnings(producers, consumers)
131
+ for consumer in sorted(consumers, key=lambda c: (c.resource, c.capability or "", c.owner_node_id)):
132
+ if not self._is_required(consumer):
133
+ continue
134
+ if consumer.capability is None or consumer.capability not in critical_caps:
135
+ # Required read, but not tied to a critical/high journey capability.
136
+ # Advisory only: avoids false reds on audit/admin/optional reads.
137
+ warnings.append(
138
+ {
139
+ "type": "unscoped_resource_consumer",
140
+ "severity": "amber",
141
+ "resource": consumer.resource,
142
+ "consumer_capability": consumer.capability,
143
+ "owner_node_id": consumer.owner_node_id,
144
+ "message": (
145
+ f"Required consumer reads {consumer.resource} but its capability "
146
+ "is not a required capability of any critical/high journey; not gated."
147
+ ),
148
+ }
149
+ )
150
+ continue
151
+ if self._has_satisfying_producer(consumer.resource, producers):
152
+ continue
153
+ violations.append(
154
+ {
155
+ "type": "dangling_required_consumer",
156
+ "severity": "red",
157
+ "resource": consumer.resource,
158
+ "consumer_capability": consumer.capability,
159
+ "owner_node_id": consumer.owner_node_id,
160
+ "required_by": "user_journeys[].required_capabilities",
161
+ "missing": "producer",
162
+ "message": (
163
+ f"Required consumer reads {consumer.resource}, but no producer / "
164
+ "provided-by obligation exists in the contract graph."
165
+ ),
166
+ }
167
+ )
168
+
169
+ if violations:
170
+ return ResourceFlowCoherenceResult(
171
+ severity="red",
172
+ status="fail",
173
+ passed=False,
174
+ block_deploy=True,
175
+ message=(
176
+ f"resource_flow_coherence found {len(violations)} dangling required "
177
+ "consumer(s) with no producer obligation"
178
+ ),
179
+ violations=violations,
180
+ warnings=warnings,
181
+ )
182
+
183
+ return ResourceFlowCoherenceResult(
184
+ severity="info",
185
+ status="pass",
186
+ passed=True,
187
+ block_deploy=False,
188
+ message="resource_flow_coherence PASS",
189
+ warnings=warnings,
190
+ )
191
+
192
+ # ------------------------------------------------------------------ collect
193
+ def _capability_contract_uses(self, node_id: str, attrs: dict[str, Any]) -> list[ResourceUse]:
194
+ uses: list[ResourceUse] = []
195
+ for entry in self._entries(attrs, "capability_contracts"):
196
+ capability = self._str(entry.get("capability"))
197
+ for consume in self._dict_list(entry.get("consumes")):
198
+ resource = self._str(consume.get("resource"))
199
+ if not resource:
200
+ continue
201
+ uses.append(
202
+ ResourceUse(
203
+ resource=resource,
204
+ direction="consume",
205
+ owner_node_id=node_id,
206
+ capability=capability,
207
+ required=self._opt_bool(consume.get("required")),
208
+ on_missing=self._str(consume.get("on_missing")),
209
+ )
210
+ )
211
+ for produce in self._dict_list(entry.get("produces")):
212
+ resource = self._str(produce.get("resource"))
213
+ if not resource:
214
+ continue
215
+ uses.append(
216
+ ResourceUse(
217
+ resource=resource,
218
+ direction="produce",
219
+ owner_node_id=node_id,
220
+ capability=capability,
221
+ )
222
+ )
223
+ return uses
224
+
225
+ def _resource_contract_uses(
226
+ self, node_id: str, attrs: dict[str, Any]
227
+ ) -> tuple[list[ResourceUse], dict[str, str]]:
228
+ uses: list[ResourceUse] = []
229
+ aliases: dict[str, str] = {}
230
+ for entry in self._entries(attrs, "resource_contracts"):
231
+ resource = self._str(entry.get("resource"))
232
+ if not resource:
233
+ continue
234
+ for alias in self._as_list(entry.get("aliases")):
235
+ alias_s = self._str(alias)
236
+ if alias_s:
237
+ aliases[alias_s] = resource
238
+ for consumer in self._dict_list(entry.get("consumers")):
239
+ uses.append(
240
+ ResourceUse(
241
+ resource=resource,
242
+ direction="consume",
243
+ owner_node_id=node_id,
244
+ capability=self._str(consumer.get("capability")),
245
+ required=self._opt_bool(consumer.get("required")),
246
+ on_missing=self._str(consumer.get("on_missing")),
247
+ )
248
+ )
249
+ for producer in self._dict_list(entry.get("producers")):
250
+ uses.append(
251
+ ResourceUse(
252
+ resource=resource,
253
+ direction="produce",
254
+ owner_node_id=node_id,
255
+ obligation=self._str(producer.get("obligation") or producer.get("capability")),
256
+ )
257
+ )
258
+ for ext in self._as_list(entry.get("externally_provided_by")):
259
+ ext_d = ext if isinstance(ext, dict) else {"provider": ext}
260
+ uses.append(
261
+ ResourceUse(
262
+ resource=resource,
263
+ direction="produce",
264
+ owner_node_id=node_id,
265
+ obligation=self._str(ext_d.get("provider")),
266
+ external=True,
267
+ )
268
+ )
269
+ return uses, aliases
270
+
271
+ def _critical_required_capabilities(self, design_docs: list[Any]) -> set[str]:
272
+ caps: set[str] = set()
273
+ for node in design_docs:
274
+ attrs = getattr(node, "attributes", None) or {}
275
+ for journey in self._entries(attrs, "user_journeys"):
276
+ level = (self._str(journey.get("criticality")) or "").lower()
277
+ if level not in _CRITICAL_LEVELS:
278
+ continue
279
+ for cap in self._as_list(journey.get("required_capabilities")):
280
+ cap_s = self._str(cap)
281
+ if cap_s:
282
+ caps.add(cap_s)
283
+ return caps
284
+
285
+ # --------------------------------------------------------------- predicates
286
+ def _is_required(self, use: ResourceUse) -> bool:
287
+ on_missing = (use.on_missing or "").strip().lower()
288
+ if use.required is False or on_missing in _OPTIONAL_ON_MISSING:
289
+ return False
290
+ if use.required is True or on_missing == "fail":
291
+ return True
292
+ # Neither explicitly required nor fail-on-missing → not gated (conservative).
293
+ return False
294
+
295
+ def _has_satisfying_producer(self, resource: str, producers: dict[str, list[ResourceUse]]) -> bool:
296
+ # v1: existence-based. A declared producer / external provider / seed for
297
+ # the same canonical resource satisfies the consumer. Topological ordering
298
+ # is intentionally not enforced here to avoid false reds on graphs without
299
+ # explicit operation flow.
300
+ return bool(producers.get(resource))
301
+
302
+ def _dead_resource_warnings(
303
+ self, producers: dict[str, list[ResourceUse]], consumers: list[ResourceUse]
304
+ ) -> list[dict[str, Any]]:
305
+ consumer_resources = {consumer.resource for consumer in consumers}
306
+ warnings: list[dict[str, Any]] = []
307
+ for resource, resource_producers in sorted(producers.items()):
308
+ if resource in consumer_resources:
309
+ continue
310
+ if any(producer.external for producer in resource_producers):
311
+ continue
312
+ producer_refs = sorted(
313
+ {
314
+ ref
315
+ for producer in resource_producers
316
+ for ref in [producer.obligation or producer.capability]
317
+ if ref
318
+ }
319
+ )
320
+ warnings.append(
321
+ {
322
+ "type": "dead_resource",
323
+ "severity": "amber",
324
+ "resource": resource,
325
+ "producer_refs": producer_refs,
326
+ "producer_owner_node_ids": sorted(
327
+ {producer.owner_node_id for producer in resource_producers}
328
+ ),
329
+ "message": (
330
+ f"Resource {resource} has producer obligation(s) but no declared consumers."
331
+ ),
332
+ }
333
+ )
334
+ return warnings
335
+
336
+ # ---------------------------------------------------------- canonical/parse
337
+ def _canonical(self, resource: str, alias_map: dict[str, str]) -> str:
338
+ value = (resource or "").strip()
339
+ return alias_map.get(value, value)
340
+
341
+ @staticmethod
342
+ def _entries(attrs: Any, key: str) -> list[dict[str, Any]]:
343
+ value = attrs.get(key, []) if isinstance(attrs, dict) else []
344
+ if not isinstance(value, list):
345
+ return []
346
+ return [entry for entry in value if isinstance(entry, dict)]
347
+
348
+ @staticmethod
349
+ def _dict_list(value: Any) -> list[dict[str, Any]]:
350
+ if not isinstance(value, list):
351
+ return []
352
+ return [entry for entry in value if isinstance(entry, dict)]
353
+
354
+ @staticmethod
355
+ def _as_list(value: Any) -> list[Any]:
356
+ if value is None:
357
+ return []
358
+ if isinstance(value, list):
359
+ return value
360
+ if isinstance(value, tuple):
361
+ return list(value)
362
+ return [value]
363
+
364
+ @staticmethod
365
+ def _str(value: Any) -> str | None:
366
+ if value is None:
367
+ return None
368
+ text = str(value).strip()
369
+ return text or None
370
+
371
+ @staticmethod
372
+ def _opt_bool(value: Any) -> bool | None:
373
+ if value is None:
374
+ return None
375
+ if isinstance(value, bool):
376
+ return value
377
+ token = str(value).strip().lower()
378
+ if token in _TRUE_TOKENS:
379
+ return True
380
+ if token in _FALSE_TOKENS:
381
+ return False
382
+ return None
@@ -36,6 +36,12 @@ PRESENTATION_SPEC_REQUIRED_FIELDS = ("field_id",)
36
36
  PRESENTATION_SPEC_LIST_FIELDS = ("lexicon_refs", "evidence_signals", "expected_presentation_signals")
37
37
  AGGREGATION_POLICY_REQUIRED_FIELDS = ("field_id",)
38
38
  AGGREGATION_POLICY_LIST_FIELDS = ("evidence_signals", "expected_aggregation_signals", "allowed_policies")
39
+ # Resource-flow contracts: a capability that CONSUMES a contract resource needs an
40
+ # obligation that PRODUCES it (the data-field sibling of the enablement axis).
41
+ RESOURCE_CONTRACT_REQUIRED_FIELDS = ("resource",)
42
+ RESOURCE_CONTRACT_LIST_FIELDS = ("aliases", "consumers", "producers", "externally_provided_by")
43
+ CAPABILITY_CONTRACT_REQUIRED_FIELDS = ("capability",)
44
+ CAPABILITY_CONTRACT_LIST_FIELDS = ("consumes", "produces", "requires", "required_by_journeys")
39
45
  DESIGN_DOC_ATTRIBUTE_SCHEMAS = {
40
46
  "runtime_constraints": {
41
47
  "required_fields": RUNTIME_CONSTRAINT_REQUIRED_FIELDS,
@@ -61,6 +67,14 @@ DESIGN_DOC_ATTRIBUTE_SCHEMAS = {
61
67
  "required_fields": AGGREGATION_POLICY_REQUIRED_FIELDS,
62
68
  "list_fields": AGGREGATION_POLICY_LIST_FIELDS,
63
69
  },
70
+ "resource_contracts": {
71
+ "required_fields": RESOURCE_CONTRACT_REQUIRED_FIELDS,
72
+ "list_fields": RESOURCE_CONTRACT_LIST_FIELDS,
73
+ },
74
+ "capability_contracts": {
75
+ "required_fields": CAPABILITY_CONTRACT_REQUIRED_FIELDS,
76
+ "list_fields": CAPABILITY_CONTRACT_LIST_FIELDS,
77
+ },
64
78
  }
65
79
  DESIGN_DOC_ATTRIBUTE_KEYS = tuple(DESIGN_DOC_ATTRIBUTE_SCHEMAS)
66
80
  LANGUAGE_SUFFIXES = {
@@ -27,6 +27,7 @@ CHECK_MODULES = (
27
27
  "codd.dag.checks.implementation_coverage",
28
28
  "codd.dag.checks.environment_coverage",
29
29
  "codd.dag.checks.artifact_contract_check",
30
+ "codd.dag.checks.resource_flow_coherence",
30
31
  )
31
32
 
32
33
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "codd-dev"
7
- version = "3.2.0"
7
+ version = "3.4.0"
8
8
  description = "CoDD: Coherence-Driven Development — cross-artifact change impact analysis"
9
9
  readme = "README.md"
10
10
  license = "MIT"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes