codd-dev 2.92.0__tar.gz → 2.94.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-2.92.0 → codd_dev-2.94.0}/PKG-INFO +1 -1
  2. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/__init__.py +1 -1
  3. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/cli.py +22 -0
  4. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/contracts_registry/registry.py +5 -0
  5. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/greenfield/pipeline.py +59 -0
  6. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/auto_scope_guard.py +185 -4
  7. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/command_plan.py +56 -16
  8. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/compose.py +182 -12
  9. codd_dev-2.94.0/codd/stack/obligations.py +171 -0
  10. codd_dev-2.94.0/codd/stack/project.py +252 -0
  11. codd_dev-2.94.0/codd/stack/replacement_proof.py +456 -0
  12. {codd_dev-2.92.0 → codd_dev-2.94.0}/pyproject.toml +1 -1
  13. codd_dev-2.92.0/codd/stack/obligations.py +0 -76
  14. codd_dev-2.92.0/codd/stack/project.py +0 -112
  15. {codd_dev-2.92.0 → codd_dev-2.94.0}/.gitignore +0 -0
  16. {codd_dev-2.92.0 → codd_dev-2.94.0}/LICENSE +0 -0
  17. {codd_dev-2.92.0 → codd_dev-2.94.0}/README.md +0 -0
  18. {codd_dev-2.92.0 → codd_dev-2.94.0}/bench_fixture/README.md +0 -0
  19. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/__main__.py +0 -0
  20. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/_git_helper.py +0 -0
  21. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/action_outcome.py +0 -0
  22. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/ai_invoke.py +0 -0
  23. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/ai_patch.py +0 -0
  24. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/artifact_contract.py +0 -0
  25. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/artifact_ids.py +0 -0
  26. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/artifacts/catalog.yaml +0 -0
  27. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/ask_user_question_adapter.py +0 -0
  28. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/assembler.py +0 -0
  29. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/bridge.py +0 -0
  30. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/brownfield/__init__.py +0 -0
  31. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/brownfield/pipeline.py +0 -0
  32. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/capability_completeness.py +0 -0
  33. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/claude_cli.py +0 -0
  34. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/clustering.py +0 -0
  35. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/coherence_adapters.py +0 -0
  36. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/coherence_engine.py +0 -0
  37. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/confidence.py +0 -0
  38. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/config.py +0 -0
  39. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/config_schema.py +0 -0
  40. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/contracts.py +0 -0
  41. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/contracts_registry/__init__.py +0 -0
  42. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/contracts_registry/__main__.py +0 -0
  43. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/contracts_registry/certify.py +0 -0
  44. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/contracts_registry/generate_matrix.py +0 -0
  45. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/coverage_auditor.py +0 -0
  46. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/coverage_execution_coherence.py +0 -0
  47. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/coverage_metrics.py +0 -0
  48. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/__init__.py +0 -0
  49. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/auto_repair.py +0 -0
  50. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/builder.py +0 -0
  51. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/__init__.py +0 -0
  52. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
  53. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/artifact_contract_check.py +0 -0
  54. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/ci_health.py +0 -0
  55. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/dependency_freshness.py +0 -0
  56. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/depends_on_consistency.py +0 -0
  57. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/deployment_completeness.py +0 -0
  58. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/edge_validity.py +0 -0
  59. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/environment_coverage.py +0 -0
  60. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/implementation_coverage.py +0 -0
  61. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/node_completeness.py +0 -0
  62. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/opt_out.py +0 -0
  63. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/task_completion.py +0 -0
  64. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/transitive_closure.py +0 -0
  65. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/ui_coherence.py +0 -0
  66. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/checks/user_journey_coherence.py +0 -0
  67. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/coverage_axes.py +0 -0
  68. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/defaults/cli.yaml +0 -0
  69. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
  70. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/defaults/csharp.yaml +0 -0
  71. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/defaults/elixir.yaml +0 -0
  72. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/defaults/generic.yaml +0 -0
  73. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/defaults/iot.yaml +0 -0
  74. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/defaults/java.yaml +0 -0
  75. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/defaults/kotlin.yaml +0 -0
  76. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/defaults/mobile.yaml +0 -0
  77. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/defaults/ruby.yaml +0 -0
  78. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/defaults/rust.yaml +0 -0
  79. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/defaults/scala.yaml +0 -0
  80. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/defaults/swift.yaml +0 -0
  81. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
  82. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/defaults/web.yaml +0 -0
  83. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/extractor.py +0 -0
  84. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/impact.py +0 -0
  85. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dag/runner.py +0 -0
  86. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/defaults.py +0 -0
  87. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/defaults.yaml +0 -0
  88. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/dependency_lock_coherence.py +0 -0
  89. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deploy_targets/__init__.py +0 -0
  90. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deploy_targets/app_service.py +0 -0
  91. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deploy_targets/base.py +0 -0
  92. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deploy_targets/docker_compose.py +0 -0
  93. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployer.py +0 -0
  94. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/__init__.py +0 -0
  95. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/checks/__init__.py +0 -0
  96. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
  97. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
  98. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
  99. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
  100. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/extractor.py +0 -0
  101. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/__init__.py +0 -0
  102. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/ai_command.py +0 -0
  103. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/ai_command_factory.py +0 -0
  104. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/codex_app_server.py +0 -0
  105. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/llm_consideration.py +0 -0
  106. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/schema/__init__.py +0 -0
  107. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/schema/prisma.py +0 -0
  108. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/target/__init__.py +0 -0
  109. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/target/docker_compose.py +0 -0
  110. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/verification/__init__.py +0 -0
  111. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
  112. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
  113. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
  114. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
  115. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
  116. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/verification/curl.py +0 -0
  117. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
  118. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
  119. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/verification/playwright.py +0 -0
  120. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/verification/pytest_http.py +0 -0
  121. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/deployment/providers/verification/vitest.py +0 -0
  122. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/design_md.py +0 -0
  123. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/diff/__init__.py +0 -0
  124. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/diff/apply.py +0 -0
  125. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/diff/engine.py +0 -0
  126. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/diff/persistence.py +0 -0
  127. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/diff/templates/diff_prompt.md +0 -0
  128. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/discovery.py +0 -0
  129. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/drift.py +0 -0
  130. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/e2e_contract_coherence.py +0 -0
  131. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/e2e_extractor.py +0 -0
  132. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/e2e_generator.py +0 -0
  133. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/e2e_harness.py +0 -0
  134. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/e2e_runner.py +0 -0
  135. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/elicit/__init__.py +0 -0
  136. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/elicit/apply.py +0 -0
  137. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/elicit/engine.py +0 -0
  138. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/elicit/finding.py +0 -0
  139. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/elicit/formatters/__init__.py +0 -0
  140. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/elicit/formatters/base.py +0 -0
  141. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/elicit/formatters/interactive.py +0 -0
  142. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/elicit/formatters/json_fmt.py +0 -0
  143. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/elicit/formatters/md.py +0 -0
  144. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/elicit/lexicon_loader.py +0 -0
  145. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/elicit/persistence.py +0 -0
  146. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
  147. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/env_refs.py +0 -0
  148. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/extract_ai.py +0 -0
  149. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/extract_paths.py +0 -0
  150. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/extractor.py +0 -0
  151. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fix/__init__.py +0 -0
  152. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fix/candidate_selector.py +0 -0
  153. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fix/design_updater.py +0 -0
  154. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fix/impl_propagation.py +0 -0
  155. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fix/interactive_prompt.py +0 -0
  156. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fix/phenomenon_fixer.py +0 -0
  157. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fix/phenomenon_parser.py +0 -0
  158. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fix/risk_classifier.py +0 -0
  159. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fix/templates/clarification_question.txt +0 -0
  160. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fix/templates/design_update.txt +0 -0
  161. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fix/templates/impl_update.txt +0 -0
  162. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
  163. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fix/templates/risk_assessment.txt +0 -0
  164. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fix/templates_loader.py +0 -0
  165. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fixer.py +0 -0
  166. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fixup_drift.py +0 -0
  167. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fixup_drift_strategies/__init__.py +0 -0
  168. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
  169. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
  170. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
  171. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/frontmatter.py +0 -0
  172. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/generator.py +0 -0
  173. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/git_evidence.py +0 -0
  174. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/graph.py +0 -0
  175. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/greenfield/__init__.py +0 -0
  176. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/hitl_session.py +0 -0
  177. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/hooks/__init__.py +0 -0
  178. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/hooks/pre-commit +0 -0
  179. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
  180. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
  181. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/hooks/recipes/codex_hook.sh +0 -0
  182. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
  183. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
  184. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/iac_nfr.py +0 -0
  185. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/implement_oracle.py +0 -0
  186. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/implement_oracle_scope.py +0 -0
  187. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/implement_oracle_types.py +0 -0
  188. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/implementer/__init__.py +0 -0
  189. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/implementer/chunked_runner.py +0 -0
  190. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/implementer/typecheck_loop.py +0 -0
  191. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/implementer.py +0 -0
  192. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/import_coherence.py +0 -0
  193. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/inheritance.py +0 -0
  194. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/init/__init__.py +0 -0
  195. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/init/lexicon_suggest.py +0 -0
  196. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/init/llm_lexicon_suggester.py +0 -0
  197. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/init/stack_detector.py +0 -0
  198. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/knowledge_fetcher.py +0 -0
  199. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/__init__.py +0 -0
  200. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/adapters/__init__.py +0 -0
  201. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/adapters/implement_oracle.py +0 -0
  202. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/adapters/oracle_go.py +0 -0
  203. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/adapters/oracle_python.py +0 -0
  204. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/adapters/oracle_typescript.py +0 -0
  205. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/adapters/runner_report.py +0 -0
  206. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/builtin_adapters.py +0 -0
  207. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/compat.py +0 -0
  208. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/contract.py +0 -0
  209. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/loader.py +0 -0
  210. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/oracle_executor.py +0 -0
  211. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/path_planner.py +0 -0
  212. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/profile.py +0 -0
  213. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/profiles/go.yaml +0 -0
  214. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/profiles/python.yaml +0 -0
  215. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/profiles/typescript.yaml +0 -0
  216. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/registry.py +0 -0
  217. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/verify_executor.py +0 -0
  218. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/languages/verify_plan.py +0 -0
  219. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/lexicon.py +0 -0
  220. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/lexicon_cli/__init__.py +0 -0
  221. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
  222. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/lexicon_cli/formatters/html.py +0 -0
  223. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
  224. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/lexicon_cli/formatters/md.py +0 -0
  225. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/lexicon_cli/inspector.py +0 -0
  226. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/lexicon_cli/manager.py +0 -0
  227. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/lexicon_cli/reporter.py +0 -0
  228. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/lexicon_cli/threshold.py +0 -0
  229. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/__init__.py +0 -0
  230. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/approval.py +0 -0
  231. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/best_practice_augmenter.py +0 -0
  232. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/criteria_expander.py +0 -0
  233. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/design_doc_extractor.py +0 -0
  234. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/impl_step_deriver.py +0 -0
  235. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/means_catalog_loader.py +0 -0
  236. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/parser.py +0 -0
  237. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/plan_deriver.py +0 -0
  238. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/prompt_builder.py +0 -0
  239. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/strategy_validator.py +0 -0
  240. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
  241. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
  242. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
  243. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
  244. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
  245. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/templates/meta_instruction.md +0 -0
  246. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/templates/plan_derive_meta.md +0 -0
  247. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
  248. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/mcp_server.py +0 -0
  249. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/measure.py +0 -0
  250. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/operational_e2e_audit.py +0 -0
  251. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/operations_derive.py +0 -0
  252. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/parsing/__init__.py +0 -0
  253. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/parsing/_shared.py +0 -0
  254. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/parsing/api_specs.py +0 -0
  255. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/parsing/extractor_registry.py +0 -0
  256. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/parsing/filesystem_routes.py +0 -0
  257. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/parsing/iac.py +0 -0
  258. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/parsing/python_ast.py +0 -0
  259. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/parsing/regex_strategies.py +0 -0
  260. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/parsing/schemas.py +0 -0
  261. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/parsing/tests_builddeps.py +0 -0
  262. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/parsing/treesitter.py +0 -0
  263. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/planner.py +0 -0
  264. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/policy.py +0 -0
  265. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/preflight/__init__.py +0 -0
  266. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/preflight/defaults/cli.yaml +0 -0
  267. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/preflight/defaults/generic.yaml +0 -0
  268. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/preflight/defaults/iot.yaml +0 -0
  269. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/preflight/defaults/mobile.yaml +0 -0
  270. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/preflight/defaults/web.yaml +0 -0
  271. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/project_types.py +0 -0
  272. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/propagate.py +0 -0
  273. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/propagation_common.py +0 -0
  274. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/propagator.py +0 -0
  275. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/reconciliation_ledger.py +0 -0
  276. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/reference_resolution.py +0 -0
  277. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/registry.py +0 -0
  278. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/__init__.py +0 -0
  279. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/approval_repair.py +0 -0
  280. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/engine.py +0 -0
  281. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/git_patcher.py +0 -0
  282. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/history.py +0 -0
  283. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/llm_repair_engine.py +0 -0
  284. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/loop.py +0 -0
  285. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/primary_picker.py +0 -0
  286. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/proof_breaks.py +0 -0
  287. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/repair_result.py +0 -0
  288. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/repairability_classifier.py +0 -0
  289. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/schema.py +0 -0
  290. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/templates/analyze_meta.md +0 -0
  291. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/templates/propose_meta.md +0 -0
  292. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
  293. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/templates/repairability_meta.md +0 -0
  294. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/test_failure_attribution.py +0 -0
  295. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair/verify_runner.py +0 -0
  296. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/repair_slice.py +0 -0
  297. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/require.py +0 -0
  298. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/require_plugins.py +0 -0
  299. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/require_propagate.py +0 -0
  300. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
  301. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
  302. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
  303. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
  304. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/required_artifacts/defaults/web.yaml +0 -0
  305. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/required_artifacts_deriver.py +0 -0
  306. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
  307. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
  308. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
  309. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
  310. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
  311. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/requirement_completeness_auditor.py +0 -0
  312. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/requirement_reconciliation.py +0 -0
  313. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/requirements_meta.py +0 -0
  314. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/restoration_report.py +0 -0
  315. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/restore.py +0 -0
  316. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/routes_extractor.py +0 -0
  317. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/runtime_smoke/__init__.py +0 -0
  318. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/runtime_smoke/checks.py +0 -0
  319. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/runtime_smoke/config.py +0 -0
  320. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/runtime_smoke/report.py +0 -0
  321. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/runtime_smoke/runner.py +0 -0
  322. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/scanner.py +0 -0
  323. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/schema_refs.py +0 -0
  324. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/screen_flow_validator.py +0 -0
  325. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/screen_transition_extractor.py +0 -0
  326. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/screen_transitions/defaults.yaml +0 -0
  327. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/skills_cli/__init__.py +0 -0
  328. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/skills_cli/discovery.py +0 -0
  329. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/skills_cli/manager.py +0 -0
  330. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/skills_cli/paths.py +0 -0
  331. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/__init__.py +0 -0
  332. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/adapters/__init__.py +0 -0
  333. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/adapters/_base.py +0 -0
  334. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/adapters/nextjs.py +0 -0
  335. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/adapters/playwright.py +0 -0
  336. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/command_authenticity.py +0 -0
  337. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/loader.py +0 -0
  338. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/lock.py +0 -0
  339. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/profile.py +0 -0
  340. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/profiles/addons/playwright.yaml +0 -0
  341. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/profiles/addons/prisma.yaml +0 -0
  342. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/profiles/frameworks/nextjs.yaml +0 -0
  343. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/registry.py +0 -0
  344. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/stack/resolve.py +0 -0
  345. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/surface_reconciliation.py +0 -0
  346. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/synth.py +0 -0
  347. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/templates/codd.yaml.tmpl +0 -0
  348. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/templates/conventions.yaml.tmpl +0 -0
  349. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
  350. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/templates/doc_links.yaml.tmpl +0 -0
  351. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
  352. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
  353. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
  354. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
  355. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
  356. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/templates/extracted/system-context.md.j2 +0 -0
  357. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/templates/gitignore.tmpl +0 -0
  358. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/templates/lexicon_questions.md +0 -0
  359. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/templates/lexicon_schema.yaml +0 -0
  360. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/templates/overrides.yaml.tmpl +0 -0
  361. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/test_detection.py +0 -0
  362. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/test_import_coherence.py +0 -0
  363. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/traceability.py +0 -0
  364. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/validator.py +0 -0
  365. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/vb_marker_authenticity.py +0 -0
  366. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/vb_rerun_scope.py +0 -0
  367. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/verifiable_behavior_audit.py +0 -0
  368. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/watch/__init__.py +0 -0
  369. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/watch/events.py +0 -0
  370. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/watch/propagation_log.py +0 -0
  371. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/watch/propagation_pipeline.py +0 -0
  372. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/watch/test_runner.py +0 -0
  373. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/watch/watcher.py +0 -0
  374. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd/wiring.py +0 -0
  375. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
  376. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
  377. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
  378. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
  379. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
  380. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
  381. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
  382. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
  383. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
  384. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
  385. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
  386. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
  387. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
  388. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
  389. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
  390. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
  391. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
  392. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
  393. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
  394. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
  395. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
  396. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
  397. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
  398. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
  399. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
  400. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
  401. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
  402. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
  403. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
  404. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
  405. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
  406. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
  407. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
  408. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
  409. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
  410. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
  411. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
  412. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
  413. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
  414. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
  415. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
  416. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
  417. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
  418. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
  419. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
  420. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
  421. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
  422. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
  423. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
  424. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
  425. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
  426. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
  427. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
  428. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
  429. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
  430. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
  431. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
  432. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
  433. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
  434. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
  435. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
  436. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
  437. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
  438. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
  439. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
  440. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
  441. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
  442. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
  443. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
  444. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
  445. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
  446. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
  447. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
  448. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
  449. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
  450. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
  451. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
  452. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
  453. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
  454. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
  455. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
  456. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
  457. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
  458. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
  459. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
  460. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
  461. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
  462. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
  463. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
  464. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
  465. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
  466. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
  467. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
  468. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
  469. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
  470. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
  471. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
  472. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
  473. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
  474. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
  475. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
  476. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
  477. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
  478. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
  479. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
  480. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
  481. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
  482. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
  483. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
  484. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
  485. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
  486. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
  487. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
  488. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
  489. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
  490. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
  491. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
  492. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
  493. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
  494. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
  495. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
  496. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
  497. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
  498. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
  499. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
  500. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
  501. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
  502. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
  503. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
  504. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
  505. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
  506. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
  507. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
  508. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
  509. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
  510. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
  511. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
  512. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
  513. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
  514. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
  515. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
  516. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
  517. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
  518. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
  519. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
  520. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
  521. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
  522. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
  523. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
  524. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
  525. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
  526. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
  527. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
  528. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
  529. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
  530. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
  531. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
  532. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
  533. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
  534. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
  535. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
  536. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
  537. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
  538. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
  539. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
  540. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
  541. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
  542. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
  543. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
  544. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
  545. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
  546. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
  547. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
  548. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
  549. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
  550. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
  551. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
  552. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
  553. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
  554. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
  555. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
  556. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
  557. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
  558. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
  559. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
  560. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
  561. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
  562. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
  563. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
  564. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
  565. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
  566. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
  567. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
  568. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
  569. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
  570. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
  571. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
  572. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
  573. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
  574. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
  575. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
  576. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
  577. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
  578. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
  579. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
  580. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
  581. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
  582. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
  583. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
  584. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
  585. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
  586. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
  587. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
  588. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
  589. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
  590. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
  591. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
  592. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
  593. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
  594. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
  595. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
  596. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
  597. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
  598. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
  599. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
  600. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
  601. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
  602. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
  603. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
  604. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
  605. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
  606. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
  607. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
  608. {codd_dev-2.92.0 → codd_dev-2.94.0}/codd_plugins/stack_map.yaml +0 -0
  609. {codd_dev-2.92.0 → codd_dev-2.94.0}/docs/cookbook/cdp_browser/README.md +0 -0
  610. {codd_dev-2.92.0 → codd_dev-2.94.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
  611. {codd_dev-2.92.0 → codd_dev-2.94.0}/docs/requirements/README.md +0 -0
  612. {codd_dev-2.92.0 → codd_dev-2.94.0}/dogfood/README.md +0 -0
  613. {codd_dev-2.92.0 → codd_dev-2.94.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
  614. {codd_dev-2.92.0 → codd_dev-2.94.0}/examples/README.md +0 -0
  615. {codd_dev-2.92.0 → codd_dev-2.94.0}/skills/codd-assemble/SKILL.md +0 -0
  616. {codd_dev-2.92.0 → codd_dev-2.94.0}/skills/codd-evolve/SKILL.md +0 -0
  617. {codd_dev-2.92.0 → codd_dev-2.94.0}/skills/codd-generate/SKILL.md +0 -0
  618. {codd_dev-2.92.0 → codd_dev-2.94.0}/skills/codd-greenfield/SKILL.md +0 -0
  619. {codd_dev-2.92.0 → codd_dev-2.94.0}/skills/codd-impact/SKILL.md +0 -0
  620. {codd_dev-2.92.0 → codd_dev-2.94.0}/skills/codd-init/SKILL.md +0 -0
  621. {codd_dev-2.92.0 → codd_dev-2.94.0}/skills/codd-propagate/SKILL.md +0 -0
  622. {codd_dev-2.92.0 → codd_dev-2.94.0}/skills/codd-restore/SKILL.md +0 -0
  623. {codd_dev-2.92.0 → codd_dev-2.94.0}/skills/codd-scan/SKILL.md +0 -0
  624. {codd_dev-2.92.0 → codd_dev-2.94.0}/skills/codd-validate/SKILL.md +0 -0
  625. {codd_dev-2.92.0 → codd_dev-2.94.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.92.0
3
+ Version: 2.94.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.92.0"
3
+ __version__ = "2.94.0"
@@ -7697,6 +7697,28 @@ def _intake_stack_contract_for_verify(project_root: Path, *, stack_command_execu
7697
7697
  f"({', '.join(plan.command_ids)})"
7698
7698
  )
7699
7699
 
7700
+ # Stack obligation CHECKER gate (Contract Kernel v2.77e) — the verify-path mirror of
7701
+ # the greenfield pipeline's :meth:`GreenfieldPipeline._enforce_stack_obligations`.
7702
+ # AFTER materialization (v2.77c) + authenticity (v2.77d), CHECK the composed
7703
+ # framework/addon OBLIGATIONS as a red/green gate: the Next.js ignoreBuildErrors guard
7704
+ # reds a build that would pass with type errors; the Playwright e2e_actually_executed
7705
+ # obligation reds a 0-test run. Anti-false-green: a missing/disabled/faulting checker
7706
+ # or an unenforceable ERROR obligation is RED (honest non-zero exit), never a silent
7707
+ # pass. Uses the ALREADY-RESOLVED ``contract`` from intake (no re-resolution from disk
7708
+ # — avoids a TOCTOU skip) and the SAME current-run evidence the authenticity layer
7709
+ # blessed. A non-stack project never reaches here (byte-identical).
7710
+ from codd.stack.project import StackObligationGateError, enforce_stack_obligation_gate
7711
+
7712
+ try:
7713
+ enforce_stack_obligation_gate(contract, project_root)
7714
+ except StackObligationGateError as exc:
7715
+ click.echo(f"[verify] stack obligation gate: {exc}", err=True)
7716
+ raise SystemExit(1) from exc
7717
+ click.echo(
7718
+ f"[verify] stack obligation gate: {len(contract.obligations)} obligation(s) checked "
7719
+ "— all enforced obligations satisfied"
7720
+ )
7721
+
7700
7722
 
7701
7723
  def _run_verify_once(
7702
7724
  path: str,
@@ -673,6 +673,11 @@ _COVERED: tuple[Contract, ...] = (
673
673
  "tests/repair/test_auto_repair_optin_and_scope.py (scope rejects failing-test edit / "
674
674
  "codd.yaml weaken / spec-doc edit; harness_contract_violation scaffold-fix allowed; "
675
675
  "max-files valve escalates)",
676
+ "tests/stack/test_stack_repair_governance.py (Contract Kernel v2.77f: scope-fence "
677
+ "rejects stack.lock / .codd/stack / declared codd/stack profile / codd.yaml stack-block "
678
+ "edits unconditionally, but allows real codd/stack source when CoDD is the SUT; "
679
+ "satisfy-source GREEN; defense-in-depth weaken/checker-delete/lock-refresh; "
680
+ "replace_with_proof GREEN only with executable behavioral-subsumption proof)",
676
681
  ),
677
682
  finding_ids=("F-greenfield-autorepair-optin-and-scope", "F-autorepair-test-command-unrepairable"),
678
683
  ),
@@ -533,6 +533,26 @@ class GreenfieldPipeline:
533
533
  {"status": STATUS_PENDING, "detail": ""}, str(exc),
534
534
  )
535
535
 
536
+ # Stack obligation CHECKER gate (Contract Kernel v2.77e) — turn the framework/
537
+ # addon OBLIGATIONS into a red/green gate, AFTER materialization+authenticity. The
538
+ # composed commands now run (v2.77c) and are authentic (v2.77d); this CHECKS the
539
+ # declared obligations (the Next.js ignoreBuildErrors guard reds a build that would
540
+ # pass with type errors; the Playwright e2e_actually_executed obligation reds a
541
+ # 0-test run). Anti-false-green: a missing/disabled/faulting checker or an
542
+ # unenforceable ERROR obligation is RED, never a silent pass. Uses the ALREADY-
543
+ # RESOLVED contract (no re-resolution from disk — avoids a TOCTOU skip) and the
544
+ # SAME current-run evidence the authenticity layer blessed. Only for stack-declared
545
+ # projects (contract is not None) — a non-stack run is byte-identical (no gate).
546
+ # Routed through _fail like intake/lock/materialization.
547
+ try:
548
+ if contract is not None:
549
+ self._enforce_stack_obligations(project_root, session, contract)
550
+ except StageError as exc:
551
+ return self._fail(
552
+ project_root, session, options, "stack_obligations",
553
+ {"status": STATUS_PENDING, "detail": ""}, str(exc),
554
+ )
555
+
536
556
  runners: dict[str, Callable[[Path, dict[str, Any], dict[str, Any]], None]] = {
537
557
  "init": self._stage_init,
538
558
  "elicit": self._stage_elicit,
@@ -756,6 +776,45 @@ class GreenfieldPipeline:
756
776
  f"{len(plan.slots)} slot(s) invoked ({', '.join(plan.command_ids)})"
757
777
  )
758
778
 
779
+ # ── stack obligation checker gate (Contract Kernel v2.77e) ──
780
+
781
+ def _enforce_stack_obligations(self, project_root: Path, session: dict[str, Any], contract) -> None:
782
+ """Run the composed stack obligation checkers as a red/green gate (v2.77e).
783
+
784
+ See the call site in :meth:`run`. Only invoked for stack-declared projects
785
+ (``contract is not None``); non-stack projects never reach here, so they are
786
+ byte-identical (no obligation gate at all).
787
+
788
+ Uses the ALREADY-RESOLVED ``contract`` (passed in from intake/lock/
789
+ materialization) — NOT a re-resolution from disk — so a stack file that changes
790
+ or is deleted after materialization cannot make this gate silently skip (a
791
+ TOCTOU false-green). :func:`enforce_stack_obligation_gate` invokes every
792
+ obligation's registered checker with ``project_root`` plus the current-run
793
+ evidence (the SAME e2e report the authenticity layer blessed), and raises
794
+ :class:`StackObligationGateError` unless every ERROR obligation was genuinely
795
+ enforced AND satisfied: a blocking violation, an unenforced ERROR obligation
796
+ (no registered checker — unverifiable), or a checker fault (raised / None /
797
+ malformed return) is RED. Translated to :class:`StageError` so the autopilot
798
+ reports it honestly via ``_fail``. The per-obligation verdict counts are
799
+ recorded in the run trace (observable, like the lock verdict + command plan).
800
+ """
801
+ from codd.stack.project import StackObligationGateError, enforce_stack_obligation_gate
802
+
803
+ try:
804
+ result = enforce_stack_obligation_gate(contract, project_root)
805
+ except StackObligationGateError as exc:
806
+ self.echo(f"[greenfield] stack obligation gate: {exc}")
807
+ raise StageError(str(exc)) from exc
808
+
809
+ record = session.get("stack_contract")
810
+ if isinstance(record, dict) and result is not None:
811
+ record["stack_obligations_checked"] = len(contract.obligations)
812
+ record["stack_obligations_unenforced"] = [o.id for o in result.unenforced]
813
+ self.echo(
814
+ "[greenfield] stack obligation gate: "
815
+ f"{len(contract.obligations)} obligation(s) checked — all enforced obligations satisfied"
816
+ )
817
+
759
818
  # ── option resolution ───────────────────────────────────
760
819
 
761
820
  def _resolve_options(self, project_root: Path) -> dict[str, Any]:
@@ -136,6 +136,53 @@ _SPEC_DIR_MARKERS: frozenset[str] = frozenset(
136
136
  {"docs", "doc", "design", "designs", "specs", "spec", "requirements"}
137
137
  )
138
138
 
139
+ # ── Stack contract artefacts (Contract Kernel v2.77f — Repair Governance) ────
140
+ #
141
+ # The STACK contract — the resolved framework/addon obligations, their checkers,
142
+ # the composed command plan, the replace_with_proof witnesses, and the pinned
143
+ # ``stack.lock`` — is the "definition of pass" for the framework layer. A repair MAY
144
+ # fix SUT SOURCE to *satisfy* a stack obligation, but it must NEVER edit the stack
145
+ # CONTRACT itself: weakening an obligation, deleting/unregistering a checker,
146
+ # inserting a no-op command, refreshing the lock, or mutating a proof witness are
147
+ # exactly how a repair would silence a red stack gate (false-green). These artefacts
148
+ # are therefore OFF-LIMITS to ANY auto-repair edit — UNCONDITIONALLY (unlike the
149
+ # oracle/doc fence above, which is gated on a code-addressable failure). Rationale: a
150
+ # stack profile/obligation/checker/proof is the contract, never SUT source; the lock
151
+ # is (re)generated ONLY on the explicit ``bootstrap_stack_lock`` first-generation
152
+ # creation path, never by an unattended repair. There is no failure class for which an
153
+ # auto-repair legitimately rewrites a stack contract artefact (a drift is cleared by
154
+ # reverting the contract change or by an explicit proof-backed update, not by repair)
155
+ # — so this fence does not carry the harness-contract exception the oracle fence does.
156
+ #
157
+ # Recognition (GPT-5.5 Pro consult 2026-06-21) is deliberately CONSERVATIVE about
158
+ # false-positives, because CoDD ITSELF is a frequent SUT under repair (dogfood):
159
+ # * the ``stack.lock`` basename anywhere — unconditional. (A rare unrelated app file
160
+ # literally named ``stack.lock`` is an acceptable false-positive for this kernel
161
+ # layer: preventing an unattended lock refresh outweighs it; manual repair still
162
+ # works.)
163
+ # * any path under a ``.codd/stack/`` directory — unconditional, ~zero false-positive
164
+ # risk: anything under ``.codd`` is harness/contract STATE, never SUT source.
165
+ # * a path under ``codd/stack/`` is fenced ONLY when it is PROVENANCED as a
166
+ # project-local stack-contract file by the project's ``stack:`` declaration (a
167
+ # ``profiles:`` / ``proofs:`` / ``checkers:`` / ``obligations:`` / ``root:`` path it
168
+ # references) — NOT by a blind directory rule. A blind ``codd/stack/`` rule would
169
+ # wrongly fence real CoDD framework SOURCE (``codd/stack/compose.py``, ``lock.py``,
170
+ # ``command_plan.py``, …) whenever CoDD is the SUT, a genuine false-RED.
171
+ # * the ``stack:`` block of ``codd.yaml`` — fenced UNCONDITIONALLY when a patch to
172
+ # ``codd.yaml`` touches the ``stack:`` key (the existing whole-file oracle fence is
173
+ # gated on a code-addressable failure, leaving a non-code-addressable hole through
174
+ # which a repair could weaken the stack declaration; this closes it without
175
+ # disturbing the existing non-stack codd.yaml behaviour).
176
+ _STACK_LOCK_BASENAME = "stack.lock"
177
+ #: Canonical project-local stack-contract STATE root — always harness, never SUT.
178
+ _STACK_STATE_DIR_MARKER: tuple[str, ...] = (".codd", "stack")
179
+ #: ``codd.yaml`` keys whose declarations point at project-local stack-contract files
180
+ #: (profiles / proof witnesses / checker / obligation sources / a contract root). A
181
+ #: ``codd/stack/`` path is fenced only when it matches one of these declared paths.
182
+ _STACK_DECL_PATH_KEYS: frozenset[str] = frozenset(
183
+ {"profiles", "proofs", "checkers", "obligations", "root", "roots", "profile_root", "proof_root"}
184
+ )
185
+
139
186
  #: Test-file recognition (mirrors common conventions across stacks). Used to
140
187
  #: flag a patch that edits a TEST for a non-harness failure (B0 keeps those
141
188
  #: read-only; we enforce it against the actual proposal path even when the
@@ -167,15 +214,19 @@ def evaluate_auto_patch_scope(
167
214
  caller (the repair loop, in auto mode only) escalates/rejects on
168
215
  ``allowed=False``.
169
216
  """
170
- patch_paths = [_normalize(patch.file_path) for patch in proposal.patches]
171
- patch_paths = [path for path in patch_paths if path]
172
- if not patch_paths:
217
+ patches = [p for p in proposal.patches if _normalize(p.file_path)]
218
+ if not patches:
173
219
  # An empty proposal is rejected upstream; nothing to scope-check.
174
220
  return AutoScopeDecision(allowed=True, reason="no patch paths to validate")
175
221
 
176
222
  failure_class = str(getattr(failure, "failure_class", "") or "")
177
223
  code_addressable = bool(getattr(failure, "code_addressable", False))
178
224
  allowlist = _editable_allowlist(failure, rca)
225
+ # Stack-contract path provenance from the project's ``stack:`` declaration (so a
226
+ # ``codd/stack/`` path is fenced only when the project actually declares it as a
227
+ # contract file — never a blind directory rule that would wrongly fence real CoDD
228
+ # framework source when CoDD is the SUT). Empty for a non-stack project.
229
+ declared_stack_paths = _declared_stack_contract_paths(codd_yaml)
179
230
  # Containment is enforced strictly ONLY when the primary failure resolved a
180
231
  # CONCRETE editable path set (B0 attribution of an executed test/typecheck
181
232
  # failure). A purely structural DAG failure carries logical node IDs
@@ -187,13 +238,16 @@ def evaluate_auto_patch_scope(
187
238
 
188
239
  offending: list[str] = []
189
240
  reasons: list[str] = []
190
- for path in patch_paths:
241
+ for patch in patches:
242
+ path = _normalize(patch.file_path)
191
243
  verdict = _classify_path(
192
244
  path,
193
245
  failure_class=failure_class,
194
246
  code_addressable=code_addressable,
195
247
  allowlist=allowlist,
196
248
  enforce_containment=has_resolved_targets,
249
+ declared_stack_paths=declared_stack_paths,
250
+ patch_content=getattr(patch, "content", "") or "",
197
251
  )
198
252
  if verdict is not None:
199
253
  offending.append(path)
@@ -285,11 +339,20 @@ def _classify_path(
285
339
  code_addressable: bool,
286
340
  allowlist: set[str],
287
341
  enforce_containment: bool,
342
+ declared_stack_paths: frozenset[str] = frozenset(),
343
+ patch_content: str = "",
288
344
  ) -> str | None:
289
345
  """Return a rejection reason for *path*, or ``None`` when it is in-scope.
290
346
 
291
347
  Role precedence (most-protected first):
292
348
 
349
+ 0. Stack contract artefact (``stack.lock`` / a ``codd/stack/`` profile /
350
+ obligation / checker) → reject UNCONDITIONALLY (Contract Kernel v2.77f).
351
+ A repair fixes SUT source to *satisfy* a stack obligation; it never edits
352
+ the stack contract (weaken / delete checker / no-op / refresh lock = a
353
+ silenced gate = false-green). No failure-class exception (unlike the oracle
354
+ fence): a stack artefact is never the thing an auto-repair legitimately
355
+ rewrites.
293
356
  1. Oracle / spec / gate-control artefact + a code-addressable failure →
294
357
  reject, UNLESS the failure class explicitly identifies THIS artefact as
295
358
  the defect (a harness-contract violation whose attribution named it).
@@ -302,6 +365,38 @@ def _classify_path(
302
365
  since the oracle/test protections above already block the false-green
303
366
  vector and structural source/doc drift repair is legitimate.
304
367
  """
368
+ # (0) Stack contract artefact protection — UNCONDITIONAL (Contract Kernel v2.77f).
369
+ # Checked FIRST and independent of failure_class / code_addressable: a repair must
370
+ # never edit the framework-stack contract (the definition of "pass" for the stack
371
+ # layer). The SUT-source fix path (satisfy/strengthen) stays open; only the
372
+ # contract artefacts themselves are fenced. Recognition is provenance-aware so it
373
+ # does NOT false-RED real CoDD framework source when CoDD is the SUT.
374
+ if _is_stack_contract_artifact(path, declared_stack_paths=declared_stack_paths):
375
+ return (
376
+ f"'{path}' is a STACK CONTRACT artefact (stack.lock / a .codd/stack or "
377
+ "declared project-local stack profile, obligation, checker, or proof witness); "
378
+ "auto-repair may fix SUT source to SATISFY a stack obligation but must NEVER "
379
+ "edit the stack contract itself — weakening an obligation, deleting a checker, "
380
+ "inserting a no-op command, refreshing the lock, or mutating a proof witness "
381
+ "would silence a stack gate (false-green). A stack drift is cleared by reverting "
382
+ "the contract change or an explicit proof-backed update, never by an unattended "
383
+ "repair (Contract Kernel v2.77f)."
384
+ )
385
+
386
+ # (0b) The ``stack:`` block of codd.yaml — fenced UNCONDITIONALLY when a patch to
387
+ # codd.yaml touches it. The whole-file oracle fence (rule 1) only engages for a
388
+ # code-addressable failure; this closes the non-code-addressable hole through which
389
+ # a repair could weaken the stack declaration, WITHOUT changing the existing
390
+ # non-stack codd.yaml behaviour (a codd.yaml patch that does not touch ``stack:`` is
391
+ # still handled by the oracle fence exactly as before).
392
+ if _is_codd_yaml(path) and _patch_touches_stack_block(patch_content):
393
+ return (
394
+ f"'{path}' patch modifies the codd.yaml `stack:` block (the project's stack "
395
+ "contract declaration); auto-repair must not alter the declared stack contract "
396
+ "(language/frameworks/addons/obligations) to clear a failure — that is the "
397
+ "weaken-the-contract false-green vector (Contract Kernel v2.77f)."
398
+ )
399
+
305
400
  is_oracle = _is_oracle_artifact(path)
306
401
  is_test = _is_test_file(path)
307
402
  harness_contract = failure_class == "harness_contract_violation"
@@ -346,6 +441,92 @@ def _classify_path(
346
441
  )
347
442
 
348
443
 
444
+ def _is_stack_contract_artifact(
445
+ path: str, *, declared_stack_paths: frozenset[str] = frozenset()
446
+ ) -> bool:
447
+ """True for a framework-stack CONTRACT artefact (Contract Kernel v2.77f).
448
+
449
+ Provenance-aware (GPT-5.5 Pro consult 2026-06-21) to avoid false-REDs:
450
+
451
+ * the ``stack.lock`` basename anywhere — unconditional;
452
+ * any path under a ``.codd/stack/`` directory — unconditional (harness state);
453
+ * a path under ``codd/stack/`` ONLY when it matches a stack-contract file the
454
+ project's ``stack:`` declaration references (``declared_stack_paths``) — NOT a
455
+ blind directory rule (which would wrongly fence real CoDD framework source when
456
+ CoDD is the SUT).
457
+
458
+ The curated profiles ship INSIDE the codd PACKAGE (never in a project's working
459
+ tree). The ``stack:`` block of ``codd.yaml`` is fenced separately (a hunk-aware
460
+ check on a codd.yaml patch), not here.
461
+ """
462
+ pure = PurePosixPath(path)
463
+ if pure.name.lower() == _STACK_LOCK_BASENAME:
464
+ return True
465
+ parts_lower = tuple(part.lower() for part in pure.parts)
466
+ if _contains_subsequence(parts_lower, _STACK_STATE_DIR_MARKER):
467
+ return True
468
+ # Provenanced project-local stack-contract file (declared in codd.yaml's stack:).
469
+ return path in declared_stack_paths
470
+
471
+
472
+ def _declared_stack_contract_paths(codd_yaml: Mapping[str, Any] | None) -> frozenset[str]:
473
+ """Project-local stack-contract file/dir paths declared in codd.yaml's ``stack:``.
474
+
475
+ Reads the ``stack:`` block and collects any path-valued entries under the
476
+ contract-source keys (:data:`_STACK_DECL_PATH_KEYS` — ``profiles`` / ``proofs`` /
477
+ ``checkers`` / ``obligations`` / ``root`` …). These are the project's OWN
478
+ stack-contract files; a ``codd/stack/`` patch path is fenced only when it matches
479
+ one (so real CoDD framework source is never fenced). A directory entry fences
480
+ everything under it. Empty for a non-stack project (the fence then keys only on the
481
+ ``stack.lock`` basename + ``.codd/stack/`` — neither of which affects a non-stack
482
+ repair). Best-effort + defensive: any malformed shape yields no extra paths.
483
+ """
484
+ if not isinstance(codd_yaml, Mapping):
485
+ return frozenset()
486
+ stack = codd_yaml.get("stack")
487
+ if not isinstance(stack, Mapping):
488
+ return frozenset()
489
+ collected: set[str] = set()
490
+
491
+ def _add_path_values(value: Any) -> None:
492
+ if isinstance(value, str):
493
+ norm = _normalize(value)
494
+ if norm:
495
+ collected.add(norm)
496
+ elif isinstance(value, (list, tuple)):
497
+ for item in value:
498
+ _add_path_values(item)
499
+ elif isinstance(value, Mapping):
500
+ for item in value.values():
501
+ _add_path_values(item)
502
+
503
+ for key in _STACK_DECL_PATH_KEYS:
504
+ if key in stack:
505
+ _add_path_values(stack[key])
506
+ return frozenset(collected)
507
+
508
+
509
+ def _is_codd_yaml(path: str) -> bool:
510
+ name = PurePosixPath(path).name.lower()
511
+ return name in {"codd.yaml", "codd.yml"}
512
+
513
+
514
+ def _patch_touches_stack_block(patch_content: str) -> bool:
515
+ """True when a codd.yaml patch references the ``stack:`` mapping key.
516
+
517
+ Conservative + content-based (works for both a full-file replacement and a unified
518
+ diff): a top-level or diff-added ``stack:`` line means the patch is shaping the
519
+ stack declaration. Matching ``(^|\\n)\\s*[+]?\\s*stack:`` catches a YAML key at any
520
+ indentation and a diff ``+stack:`` line. False-positives (a codd.yaml that merely
521
+ keeps an unrelated ``stack:`` line) are acceptable — auto-repair editing codd.yaml is
522
+ already the discouraged path, and a stack-declaring project's codd.yaml edit is far
523
+ better escalated to a human than silently applied.
524
+ """
525
+ if not patch_content:
526
+ return False
527
+ return bool(re.search(r"(^|\n)\s*\+?\s*stack\s*:", patch_content))
528
+
529
+
349
530
  def _is_oracle_artifact(path: str) -> bool:
350
531
  """True for spec/design/requirements docs + test-harness/gate-control files."""
351
532
  pure = PurePosixPath(path)
@@ -42,7 +42,7 @@ import os
42
42
  import subprocess # noqa: S404 — argv comes from the trusted resolved stack contract, shell=False.
43
43
  from dataclasses import dataclass, field
44
44
  from pathlib import Path
45
- from typing import Mapping, Protocol, Sequence
45
+ from typing import Any, Mapping, Protocol, Sequence
46
46
 
47
47
  from codd.languages.profile import CommandSpec
48
48
 
@@ -105,17 +105,32 @@ def stack_command_evidence_path(slot: "StackCommandSlot", project_root: Path) ->
105
105
  return project_root / STACK_COMMAND_EVIDENCE_DIR / f"{safe}.stdout"
106
106
 
107
107
 
108
- def assert_stack_contract_clean(contract: ResolvedStackContract) -> None:
109
- """Conflict gate (v2.77c): red on ANY composition conflict / unclean state.
110
-
111
- Anti-false-green: a command collision, an unproved replace (a layer replacing
112
- another's command with different argv and no ``replace_with_proof`` — exactly a
113
- command conflict today), a semantic weaken (an addon lowering a framework
114
- obligation's severity), an exclusive conflict, a deny, or any future conflict
115
- kind makes the contract NOT clean :class:`StackContractConflictError`. The
116
- composer already records these as ``Conflict`` entries (it refuses last-wins);
117
- this turns that record into a gate. Defensive triple-check (``conflicts`` /
118
- ``is_clean`` / ``strict_ok``) so a flag desync can never sneak to green.
108
+ def assert_stack_contract_clean(
109
+ contract: ResolvedStackContract,
110
+ *,
111
+ replacement_proofs: Any = None,
112
+ ) -> None:
113
+ """Conflict gate (v2.77c) + proof gate (v2.77f): red on ANY unclean state.
114
+
115
+ Anti-false-green: a command collision, an unproved/malformed replace, a semantic
116
+ weaken (an addon lowering a framework obligation's severity), an exclusive conflict,
117
+ a deny, or any future conflict kind makes the contract NOT clean →
118
+ :class:`StackContractConflictError`. The composer records these as ``Conflict``
119
+ entries (it refuses last-wins); this turns that record into a gate. Defensive
120
+ triple-check (``conflicts`` / ``is_clean`` / ``strict_ok``) so a flag desync can never
121
+ sneak to green.
122
+
123
+ Contract Kernel v2.77f — proof-backed replacements: a WELL-FORMED ``replace_with_proof``
124
+ is NOT a conflict; the composer records it as a
125
+ :class:`~codd.stack.replacement_proof.PendingReplacementProof`. Such a contract is NOT
126
+ clean until its behavioral proof has been EXECUTED and PASSED. So:
127
+
128
+ * ``contract.pending_replacement_proofs`` is non-empty AND ``replacement_proofs is
129
+ None`` → RED ("proof not executed"): a call-site that skips the proof gate can never
130
+ accidentally treat a pending replacement as clean (declaration-only is RED).
131
+ * ``replacement_proofs`` present but does not approve EVERY pending proof (matched by
132
+ *fingerprint*, not id) → RED ("proof failed / not approved").
133
+ * every pending proof approved by a passing result → the replacement is clean.
119
134
  """
120
135
  if contract.conflicts or not contract.is_clean or not contract.strict_ok:
121
136
  reasons = (
@@ -124,13 +139,38 @@ def assert_stack_contract_clean(contract: ResolvedStackContract) -> None:
124
139
  )
125
140
  raise StackContractConflictError(
126
141
  f"stack composition conflict ({contract.stack_id}): {reasons}. "
127
- "A command collision / unproved replace / weakened obligation / exclusive "
128
- "conflict is RED — the composer does NOT silently last-wins-merge a "
142
+ "A command collision / unproved-or-malformed replace / weakened obligation / "
143
+ "exclusive conflict is RED — the composer does NOT silently last-wins-merge a "
129
144
  "collision, and the run will not materialize a command plan from a "
130
- "conflicted contract. Resolve the conflict in the stack profiles (or "
131
- "declare an explicit replace_with_proof once that mechanism exists)."
145
+ "conflicted contract. Resolve the conflict in the stack profiles, or declare a "
146
+ "well-formed, proof-backed replace_with_proof."
132
147
  )
133
148
 
149
+ pending = tuple(getattr(contract, "pending_replacement_proofs", ()) or ())
150
+ if pending:
151
+ if replacement_proofs is None:
152
+ raise StackContractConflictError(
153
+ f"stack replacement proof not executed ({contract.stack_id}): the contract "
154
+ f"declares {len(pending)} proof-backed replacement(s) "
155
+ f"({', '.join(p.id for p in pending)}) but the behavioral proof gate was not "
156
+ "run. A replace_with_proof is NOT clean by declaration alone — RED until the "
157
+ "proof is executed and passes (anti-false-green: never accept a replacement on "
158
+ "syntax)."
159
+ )
160
+ if not replacement_proofs.approves_all(pending):
161
+ unapproved = [
162
+ p.id for p in pending if p.fingerprint not in replacement_proofs.approved
163
+ ]
164
+ viol = "; ".join(
165
+ f"{v.id}: {v.reason}" for v in getattr(replacement_proofs, "violations", ())
166
+ )
167
+ raise StackContractConflictError(
168
+ f"stack replacement proof failed ({contract.stack_id}): proof did not approve "
169
+ f"replacement(s) {unapproved} [{viol}]. A proof-backed replacement is GREEN "
170
+ "ONLY when its behavioral subsumption proof passes (the replacement catches "
171
+ "what the original caught) — RED otherwise."
172
+ )
173
+
134
174
 
135
175
  @dataclass(frozen=True)
136
176
  class StackCommandSlot: