codd-dev 2.89.0__tar.gz → 2.91.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 (622) hide show
  1. {codd_dev-2.89.0 → codd_dev-2.91.0}/PKG-INFO +1 -1
  2. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/__init__.py +1 -1
  3. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/cli.py +63 -6
  4. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/greenfield/pipeline.py +165 -5
  5. codd_dev-2.91.0/codd/stack/command_plan.py +385 -0
  6. codd_dev-2.91.0/codd/stack/lock.py +366 -0
  7. {codd_dev-2.89.0 → codd_dev-2.91.0}/pyproject.toml +1 -1
  8. codd_dev-2.89.0/codd/stack/lock.py +0 -133
  9. {codd_dev-2.89.0 → codd_dev-2.91.0}/.gitignore +0 -0
  10. {codd_dev-2.89.0 → codd_dev-2.91.0}/LICENSE +0 -0
  11. {codd_dev-2.89.0 → codd_dev-2.91.0}/README.md +0 -0
  12. {codd_dev-2.89.0 → codd_dev-2.91.0}/bench_fixture/README.md +0 -0
  13. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/__main__.py +0 -0
  14. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/_git_helper.py +0 -0
  15. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/action_outcome.py +0 -0
  16. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/ai_invoke.py +0 -0
  17. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/ai_patch.py +0 -0
  18. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/artifact_contract.py +0 -0
  19. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/artifact_ids.py +0 -0
  20. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/artifacts/catalog.yaml +0 -0
  21. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/ask_user_question_adapter.py +0 -0
  22. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/assembler.py +0 -0
  23. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/bridge.py +0 -0
  24. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/brownfield/__init__.py +0 -0
  25. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/brownfield/pipeline.py +0 -0
  26. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/capability_completeness.py +0 -0
  27. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/claude_cli.py +0 -0
  28. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/clustering.py +0 -0
  29. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/coherence_adapters.py +0 -0
  30. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/coherence_engine.py +0 -0
  31. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/confidence.py +0 -0
  32. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/config.py +0 -0
  33. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/config_schema.py +0 -0
  34. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/contracts.py +0 -0
  35. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/contracts_registry/__init__.py +0 -0
  36. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/contracts_registry/__main__.py +0 -0
  37. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/contracts_registry/certify.py +0 -0
  38. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/contracts_registry/generate_matrix.py +0 -0
  39. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/contracts_registry/registry.py +0 -0
  40. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/coverage_auditor.py +0 -0
  41. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/coverage_execution_coherence.py +0 -0
  42. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/coverage_metrics.py +0 -0
  43. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/__init__.py +0 -0
  44. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/auto_repair.py +0 -0
  45. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/builder.py +0 -0
  46. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/checks/__init__.py +0 -0
  47. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
  48. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/checks/artifact_contract_check.py +0 -0
  49. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/checks/ci_health.py +0 -0
  50. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/checks/dependency_freshness.py +0 -0
  51. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/checks/depends_on_consistency.py +0 -0
  52. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/checks/deployment_completeness.py +0 -0
  53. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/checks/edge_validity.py +0 -0
  54. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/checks/environment_coverage.py +0 -0
  55. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/checks/implementation_coverage.py +0 -0
  56. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/checks/node_completeness.py +0 -0
  57. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/checks/opt_out.py +0 -0
  58. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/checks/task_completion.py +0 -0
  59. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/checks/transitive_closure.py +0 -0
  60. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/checks/ui_coherence.py +0 -0
  61. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/checks/user_journey_coherence.py +0 -0
  62. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/coverage_axes.py +0 -0
  63. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/defaults/cli.yaml +0 -0
  64. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
  65. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/defaults/csharp.yaml +0 -0
  66. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/defaults/elixir.yaml +0 -0
  67. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/defaults/generic.yaml +0 -0
  68. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/defaults/iot.yaml +0 -0
  69. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/defaults/java.yaml +0 -0
  70. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/defaults/kotlin.yaml +0 -0
  71. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/defaults/mobile.yaml +0 -0
  72. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/defaults/ruby.yaml +0 -0
  73. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/defaults/rust.yaml +0 -0
  74. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/defaults/scala.yaml +0 -0
  75. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/defaults/swift.yaml +0 -0
  76. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
  77. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/defaults/web.yaml +0 -0
  78. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/extractor.py +0 -0
  79. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/impact.py +0 -0
  80. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dag/runner.py +0 -0
  81. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/defaults.py +0 -0
  82. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/defaults.yaml +0 -0
  83. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/dependency_lock_coherence.py +0 -0
  84. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deploy_targets/__init__.py +0 -0
  85. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deploy_targets/app_service.py +0 -0
  86. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deploy_targets/base.py +0 -0
  87. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deploy_targets/docker_compose.py +0 -0
  88. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deployer.py +0 -0
  89. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deployment/__init__.py +0 -0
  90. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deployment/checks/__init__.py +0 -0
  91. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
  92. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
  93. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
  94. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
  95. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deployment/extractor.py +0 -0
  96. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deployment/providers/__init__.py +0 -0
  97. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deployment/providers/ai_command.py +0 -0
  98. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deployment/providers/ai_command_factory.py +0 -0
  99. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deployment/providers/codex_app_server.py +0 -0
  100. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deployment/providers/llm_consideration.py +0 -0
  101. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deployment/providers/schema/__init__.py +0 -0
  102. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deployment/providers/schema/prisma.py +0 -0
  103. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deployment/providers/target/__init__.py +0 -0
  104. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deployment/providers/target/docker_compose.py +0 -0
  105. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deployment/providers/verification/__init__.py +0 -0
  106. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
  107. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
  108. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
  109. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
  110. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
  111. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deployment/providers/verification/curl.py +0 -0
  112. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
  113. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
  114. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deployment/providers/verification/playwright.py +0 -0
  115. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deployment/providers/verification/pytest_http.py +0 -0
  116. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/deployment/providers/verification/vitest.py +0 -0
  117. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/design_md.py +0 -0
  118. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/diff/__init__.py +0 -0
  119. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/diff/apply.py +0 -0
  120. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/diff/engine.py +0 -0
  121. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/diff/persistence.py +0 -0
  122. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/diff/templates/diff_prompt.md +0 -0
  123. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/discovery.py +0 -0
  124. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/drift.py +0 -0
  125. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/e2e_contract_coherence.py +0 -0
  126. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/e2e_extractor.py +0 -0
  127. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/e2e_generator.py +0 -0
  128. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/e2e_harness.py +0 -0
  129. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/e2e_runner.py +0 -0
  130. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/elicit/__init__.py +0 -0
  131. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/elicit/apply.py +0 -0
  132. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/elicit/engine.py +0 -0
  133. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/elicit/finding.py +0 -0
  134. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/elicit/formatters/__init__.py +0 -0
  135. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/elicit/formatters/base.py +0 -0
  136. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/elicit/formatters/interactive.py +0 -0
  137. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/elicit/formatters/json_fmt.py +0 -0
  138. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/elicit/formatters/md.py +0 -0
  139. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/elicit/lexicon_loader.py +0 -0
  140. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/elicit/persistence.py +0 -0
  141. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
  142. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/env_refs.py +0 -0
  143. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/extract_ai.py +0 -0
  144. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/extract_paths.py +0 -0
  145. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/extractor.py +0 -0
  146. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/fix/__init__.py +0 -0
  147. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/fix/candidate_selector.py +0 -0
  148. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/fix/design_updater.py +0 -0
  149. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/fix/impl_propagation.py +0 -0
  150. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/fix/interactive_prompt.py +0 -0
  151. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/fix/phenomenon_fixer.py +0 -0
  152. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/fix/phenomenon_parser.py +0 -0
  153. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/fix/risk_classifier.py +0 -0
  154. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/fix/templates/clarification_question.txt +0 -0
  155. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/fix/templates/design_update.txt +0 -0
  156. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/fix/templates/impl_update.txt +0 -0
  157. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
  158. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/fix/templates/risk_assessment.txt +0 -0
  159. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/fix/templates_loader.py +0 -0
  160. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/fixer.py +0 -0
  161. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/fixup_drift.py +0 -0
  162. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/fixup_drift_strategies/__init__.py +0 -0
  163. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
  164. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
  165. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
  166. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/frontmatter.py +0 -0
  167. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/generator.py +0 -0
  168. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/git_evidence.py +0 -0
  169. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/graph.py +0 -0
  170. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/greenfield/__init__.py +0 -0
  171. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/hitl_session.py +0 -0
  172. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/hooks/__init__.py +0 -0
  173. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/hooks/pre-commit +0 -0
  174. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
  175. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
  176. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/hooks/recipes/codex_hook.sh +0 -0
  177. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
  178. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
  179. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/iac_nfr.py +0 -0
  180. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/implement_oracle.py +0 -0
  181. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/implement_oracle_scope.py +0 -0
  182. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/implement_oracle_types.py +0 -0
  183. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/implementer/__init__.py +0 -0
  184. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/implementer/chunked_runner.py +0 -0
  185. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/implementer/typecheck_loop.py +0 -0
  186. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/implementer.py +0 -0
  187. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/import_coherence.py +0 -0
  188. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/inheritance.py +0 -0
  189. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/init/__init__.py +0 -0
  190. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/init/lexicon_suggest.py +0 -0
  191. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/init/llm_lexicon_suggester.py +0 -0
  192. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/init/stack_detector.py +0 -0
  193. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/knowledge_fetcher.py +0 -0
  194. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/languages/__init__.py +0 -0
  195. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/languages/adapters/__init__.py +0 -0
  196. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/languages/adapters/implement_oracle.py +0 -0
  197. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/languages/adapters/oracle_go.py +0 -0
  198. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/languages/adapters/oracle_python.py +0 -0
  199. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/languages/adapters/oracle_typescript.py +0 -0
  200. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/languages/adapters/runner_report.py +0 -0
  201. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/languages/builtin_adapters.py +0 -0
  202. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/languages/compat.py +0 -0
  203. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/languages/contract.py +0 -0
  204. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/languages/loader.py +0 -0
  205. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/languages/oracle_executor.py +0 -0
  206. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/languages/path_planner.py +0 -0
  207. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/languages/profile.py +0 -0
  208. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/languages/profiles/go.yaml +0 -0
  209. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/languages/profiles/python.yaml +0 -0
  210. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/languages/profiles/typescript.yaml +0 -0
  211. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/languages/registry.py +0 -0
  212. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/languages/verify_executor.py +0 -0
  213. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/languages/verify_plan.py +0 -0
  214. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/lexicon.py +0 -0
  215. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/lexicon_cli/__init__.py +0 -0
  216. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
  217. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/lexicon_cli/formatters/html.py +0 -0
  218. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
  219. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/lexicon_cli/formatters/md.py +0 -0
  220. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/lexicon_cli/inspector.py +0 -0
  221. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/lexicon_cli/manager.py +0 -0
  222. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/lexicon_cli/reporter.py +0 -0
  223. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/lexicon_cli/threshold.py +0 -0
  224. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/llm/__init__.py +0 -0
  225. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/llm/approval.py +0 -0
  226. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/llm/best_practice_augmenter.py +0 -0
  227. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/llm/criteria_expander.py +0 -0
  228. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/llm/design_doc_extractor.py +0 -0
  229. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/llm/impl_step_deriver.py +0 -0
  230. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/llm/means_catalog_loader.py +0 -0
  231. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/llm/parser.py +0 -0
  232. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/llm/plan_deriver.py +0 -0
  233. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/llm/prompt_builder.py +0 -0
  234. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/llm/strategy_validator.py +0 -0
  235. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
  236. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
  237. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
  238. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
  239. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
  240. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/llm/templates/meta_instruction.md +0 -0
  241. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/llm/templates/plan_derive_meta.md +0 -0
  242. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
  243. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/mcp_server.py +0 -0
  244. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/measure.py +0 -0
  245. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/operational_e2e_audit.py +0 -0
  246. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/operations_derive.py +0 -0
  247. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/parsing/__init__.py +0 -0
  248. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/parsing/_shared.py +0 -0
  249. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/parsing/api_specs.py +0 -0
  250. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/parsing/extractor_registry.py +0 -0
  251. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/parsing/filesystem_routes.py +0 -0
  252. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/parsing/iac.py +0 -0
  253. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/parsing/python_ast.py +0 -0
  254. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/parsing/regex_strategies.py +0 -0
  255. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/parsing/schemas.py +0 -0
  256. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/parsing/tests_builddeps.py +0 -0
  257. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/parsing/treesitter.py +0 -0
  258. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/planner.py +0 -0
  259. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/policy.py +0 -0
  260. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/preflight/__init__.py +0 -0
  261. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/preflight/defaults/cli.yaml +0 -0
  262. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/preflight/defaults/generic.yaml +0 -0
  263. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/preflight/defaults/iot.yaml +0 -0
  264. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/preflight/defaults/mobile.yaml +0 -0
  265. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/preflight/defaults/web.yaml +0 -0
  266. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/project_types.py +0 -0
  267. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/propagate.py +0 -0
  268. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/propagation_common.py +0 -0
  269. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/propagator.py +0 -0
  270. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/reconciliation_ledger.py +0 -0
  271. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/reference_resolution.py +0 -0
  272. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/registry.py +0 -0
  273. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/repair/__init__.py +0 -0
  274. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/repair/approval_repair.py +0 -0
  275. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/repair/auto_scope_guard.py +0 -0
  276. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/repair/engine.py +0 -0
  277. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/repair/git_patcher.py +0 -0
  278. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/repair/history.py +0 -0
  279. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/repair/llm_repair_engine.py +0 -0
  280. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/repair/loop.py +0 -0
  281. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/repair/primary_picker.py +0 -0
  282. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/repair/proof_breaks.py +0 -0
  283. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/repair/repair_result.py +0 -0
  284. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/repair/repairability_classifier.py +0 -0
  285. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/repair/schema.py +0 -0
  286. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/repair/templates/analyze_meta.md +0 -0
  287. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/repair/templates/propose_meta.md +0 -0
  288. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
  289. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/repair/templates/repairability_meta.md +0 -0
  290. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/repair/test_failure_attribution.py +0 -0
  291. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/repair/verify_runner.py +0 -0
  292. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/repair_slice.py +0 -0
  293. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/require.py +0 -0
  294. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/require_plugins.py +0 -0
  295. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/require_propagate.py +0 -0
  296. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
  297. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
  298. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
  299. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
  300. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/required_artifacts/defaults/web.yaml +0 -0
  301. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/required_artifacts_deriver.py +0 -0
  302. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
  303. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
  304. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
  305. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
  306. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
  307. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/requirement_completeness_auditor.py +0 -0
  308. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/requirement_reconciliation.py +0 -0
  309. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/requirements_meta.py +0 -0
  310. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/restoration_report.py +0 -0
  311. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/restore.py +0 -0
  312. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/routes_extractor.py +0 -0
  313. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/runtime_smoke/__init__.py +0 -0
  314. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/runtime_smoke/checks.py +0 -0
  315. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/runtime_smoke/config.py +0 -0
  316. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/runtime_smoke/report.py +0 -0
  317. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/runtime_smoke/runner.py +0 -0
  318. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/scanner.py +0 -0
  319. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/schema_refs.py +0 -0
  320. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/screen_flow_validator.py +0 -0
  321. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/screen_transition_extractor.py +0 -0
  322. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/screen_transitions/defaults.yaml +0 -0
  323. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/skills_cli/__init__.py +0 -0
  324. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/skills_cli/discovery.py +0 -0
  325. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/skills_cli/manager.py +0 -0
  326. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/skills_cli/paths.py +0 -0
  327. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/stack/__init__.py +0 -0
  328. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/stack/adapters/__init__.py +0 -0
  329. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/stack/adapters/_base.py +0 -0
  330. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/stack/adapters/nextjs.py +0 -0
  331. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/stack/adapters/playwright.py +0 -0
  332. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/stack/compose.py +0 -0
  333. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/stack/loader.py +0 -0
  334. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/stack/obligations.py +0 -0
  335. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/stack/profile.py +0 -0
  336. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/stack/profiles/addons/playwright.yaml +0 -0
  337. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/stack/profiles/addons/prisma.yaml +0 -0
  338. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/stack/profiles/frameworks/nextjs.yaml +0 -0
  339. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/stack/project.py +0 -0
  340. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/stack/registry.py +0 -0
  341. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/stack/resolve.py +0 -0
  342. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/surface_reconciliation.py +0 -0
  343. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/synth.py +0 -0
  344. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/templates/codd.yaml.tmpl +0 -0
  345. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/templates/conventions.yaml.tmpl +0 -0
  346. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
  347. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/templates/doc_links.yaml.tmpl +0 -0
  348. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
  349. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
  350. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
  351. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
  352. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
  353. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/templates/extracted/system-context.md.j2 +0 -0
  354. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/templates/gitignore.tmpl +0 -0
  355. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/templates/lexicon_questions.md +0 -0
  356. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/templates/lexicon_schema.yaml +0 -0
  357. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/templates/overrides.yaml.tmpl +0 -0
  358. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/test_detection.py +0 -0
  359. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/test_import_coherence.py +0 -0
  360. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/traceability.py +0 -0
  361. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/validator.py +0 -0
  362. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/vb_marker_authenticity.py +0 -0
  363. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/vb_rerun_scope.py +0 -0
  364. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/verifiable_behavior_audit.py +0 -0
  365. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/watch/__init__.py +0 -0
  366. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/watch/events.py +0 -0
  367. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/watch/propagation_log.py +0 -0
  368. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/watch/propagation_pipeline.py +0 -0
  369. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/watch/test_runner.py +0 -0
  370. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/watch/watcher.py +0 -0
  371. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd/wiring.py +0 -0
  372. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
  373. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
  374. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
  375. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
  376. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
  377. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
  378. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
  379. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
  380. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
  381. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
  382. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
  383. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
  384. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
  385. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
  386. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
  387. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
  388. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
  389. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
  390. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
  391. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
  392. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
  393. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
  394. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
  395. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
  396. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
  397. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
  398. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
  399. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
  400. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
  401. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
  402. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
  403. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
  404. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
  405. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
  406. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
  407. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
  408. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
  409. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
  410. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
  411. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
  412. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
  413. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
  414. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
  415. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
  416. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
  417. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
  418. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
  419. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
  420. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
  421. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
  422. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
  423. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
  424. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
  425. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
  426. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
  427. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
  428. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
  429. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
  430. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
  431. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
  432. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
  433. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
  434. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
  435. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
  436. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
  437. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
  438. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
  439. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
  440. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
  441. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
  442. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
  443. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
  444. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
  445. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
  446. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
  447. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
  448. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
  449. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
  450. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
  451. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
  452. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
  453. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
  454. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
  455. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
  456. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
  457. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
  458. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
  459. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
  460. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
  461. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
  462. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
  463. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
  464. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
  465. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
  466. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
  467. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
  468. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
  469. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
  470. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
  471. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
  472. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
  473. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
  474. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
  475. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
  476. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
  477. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
  478. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
  479. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
  480. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
  481. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
  482. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
  483. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
  484. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
  485. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
  486. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
  487. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
  488. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
  489. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
  490. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
  491. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
  492. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
  493. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
  494. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
  495. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
  496. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
  497. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
  498. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
  499. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
  500. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
  501. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
  502. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
  503. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
  504. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
  505. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
  506. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
  507. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
  508. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
  509. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
  510. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
  511. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
  512. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
  513. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
  514. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
  515. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
  516. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
  517. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
  518. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
  519. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
  520. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
  521. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
  522. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
  523. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
  524. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
  525. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
  526. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
  527. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
  528. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
  529. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
  530. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
  531. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
  532. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
  533. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
  534. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
  535. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
  536. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
  537. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
  538. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
  539. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
  540. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
  541. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
  542. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
  543. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
  544. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
  545. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
  546. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
  547. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
  548. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
  549. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
  550. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
  551. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
  552. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
  553. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
  554. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
  555. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
  556. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
  557. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
  558. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
  559. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
  560. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
  561. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
  562. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
  563. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
  564. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
  565. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
  566. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
  567. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
  568. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
  569. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
  570. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
  571. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
  572. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
  573. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
  574. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
  575. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
  576. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
  577. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
  578. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
  579. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
  580. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
  581. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
  582. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
  583. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
  584. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
  585. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
  586. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
  587. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
  588. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
  589. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
  590. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
  591. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
  592. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
  593. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
  594. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
  595. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
  596. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
  597. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
  598. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
  599. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
  600. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
  601. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
  602. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
  603. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
  604. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
  605. {codd_dev-2.89.0 → codd_dev-2.91.0}/codd_plugins/stack_map.yaml +0 -0
  606. {codd_dev-2.89.0 → codd_dev-2.91.0}/docs/cookbook/cdp_browser/README.md +0 -0
  607. {codd_dev-2.89.0 → codd_dev-2.91.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
  608. {codd_dev-2.89.0 → codd_dev-2.91.0}/docs/requirements/README.md +0 -0
  609. {codd_dev-2.89.0 → codd_dev-2.91.0}/dogfood/README.md +0 -0
  610. {codd_dev-2.89.0 → codd_dev-2.91.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
  611. {codd_dev-2.89.0 → codd_dev-2.91.0}/examples/README.md +0 -0
  612. {codd_dev-2.89.0 → codd_dev-2.91.0}/skills/codd-assemble/SKILL.md +0 -0
  613. {codd_dev-2.89.0 → codd_dev-2.91.0}/skills/codd-evolve/SKILL.md +0 -0
  614. {codd_dev-2.89.0 → codd_dev-2.91.0}/skills/codd-generate/SKILL.md +0 -0
  615. {codd_dev-2.89.0 → codd_dev-2.91.0}/skills/codd-greenfield/SKILL.md +0 -0
  616. {codd_dev-2.89.0 → codd_dev-2.91.0}/skills/codd-impact/SKILL.md +0 -0
  617. {codd_dev-2.89.0 → codd_dev-2.91.0}/skills/codd-init/SKILL.md +0 -0
  618. {codd_dev-2.89.0 → codd_dev-2.91.0}/skills/codd-propagate/SKILL.md +0 -0
  619. {codd_dev-2.89.0 → codd_dev-2.91.0}/skills/codd-restore/SKILL.md +0 -0
  620. {codd_dev-2.89.0 → codd_dev-2.91.0}/skills/codd-scan/SKILL.md +0 -0
  621. {codd_dev-2.89.0 → codd_dev-2.91.0}/skills/codd-validate/SKILL.md +0 -0
  622. {codd_dev-2.89.0 → codd_dev-2.91.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.89.0
3
+ Version: 2.91.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.89.0"
3
+ __version__ = "2.91.0"
@@ -5023,11 +5023,13 @@ def verify(
5023
5023
  if not runtime:
5024
5024
  return
5025
5025
 
5026
- # Stack contract intake (Contract Kernel v2.77a) — bring the project's declared
5027
- # framework-stack contract into the live verify run's trace, mirroring the
5028
- # greenfield intake. INTAKE ONLY: no obligation is enforced and NO verdict
5029
- # changes (that is v2.77b-e). A project with no `stack:` block is unaffected; a
5030
- # declared-but-broken stack fails HONESTLY (anti-false-green), never a silent skip.
5026
+ # Stack contract intake + lock enforcement (Contract Kernel v2.77a/v2.77b) —
5027
+ # bring the project's declared framework-stack contract into the live verify
5028
+ # run's trace (v2.77a, mirroring the greenfield intake), then ENFORCE the stack
5029
+ # lock as a gate (v2.77b): a stack project whose committed lock has drifted from
5030
+ # the resolved contract or that has no committed lock at all — is RED. A
5031
+ # project with no `stack:` block is unaffected; a declared-but-broken stack
5032
+ # fails HONESTLY (anti-false-green), never a silent skip.
5031
5033
  _intake_stack_contract_for_verify(Path(path).resolve())
5032
5034
 
5033
5035
  verify_kwargs: dict[str, Any] = {"path": path, "prefer_standalone": True}
@@ -7598,7 +7600,7 @@ def _load_optional_project_config(project_root: Path) -> dict[str, Any]:
7598
7600
  return {}
7599
7601
 
7600
7602
 
7601
- def _intake_stack_contract_for_verify(project_root: Path) -> None:
7603
+ def _intake_stack_contract_for_verify(project_root: Path, *, stack_command_executor=None) -> None:
7602
7604
  """Resolve the project's declared stack contract into the verify run trace.
7603
7605
 
7604
7606
  Contract Kernel v2.77a (intake only) — the verify-path mirror of the greenfield
@@ -7607,6 +7609,11 @@ def _intake_stack_contract_for_verify(project_root: Path) -> None:
7607
7609
  the run trace), WITHOUT enforcing any obligation or changing the verify verdict
7608
7610
  (obligation enforcement is v2.77b-e).
7609
7611
 
7612
+ ``stack_command_executor`` is the v2.77c materialization seam (default: the real
7613
+ subprocess executor): an injectable executor that invokes each composed stack
7614
+ command slot (exit-code only). Tests pass a recording/sentinel executor so the
7615
+ declared slots are provably invoked without real Next.js/Playwright.
7616
+
7610
7617
  * No ``stack:`` block → no-op (the opt-in framework layer is unused; the vast
7611
7618
  majority of projects — emits a single trace line, no behaviour change).
7612
7619
  * A declared stack → its ``stack_contract_hash`` is echoed to the run trace.
@@ -7627,6 +7634,15 @@ def _intake_stack_contract_for_verify(project_root: Path) -> None:
7627
7634
  raise SystemExit(1) from exc
7628
7635
 
7629
7636
  if contract is None:
7637
+ # No `stack:` block → byte-identical, UNLESS a committed lock still exists
7638
+ # (a removed stack declaration on a still-pinned project = RED; closes the
7639
+ # "drop stack: to dodge the gate" bypass — v2.77b anti-false-green).
7640
+ from codd.stack.lock import orphan_stack_lock
7641
+
7642
+ orphan = orphan_stack_lock(project_root)
7643
+ if orphan is not None and orphan.red:
7644
+ click.echo(f"[verify] stack lock gate: {orphan.message}", err=True)
7645
+ raise SystemExit(1)
7630
7646
  return
7631
7647
  trace = stack_contract_trace(contract)
7632
7648
  click.echo(
@@ -7634,6 +7650,47 @@ def _intake_stack_contract_for_verify(project_root: Path) -> None:
7634
7650
  f"stack_contract_hash={trace['stack_contract_hash']}"
7635
7651
  )
7636
7652
 
7653
+ # Stack lock ENFORCEMENT (Contract Kernel v2.77b) — verify is always an
7654
+ # enforcement context (it never CREATES a project), so it uses the strictly
7655
+ # READ-ONLY gate: a stack project with no committed lock, or a lock that has
7656
+ # drifted from (or cannot be parsed against) the resolved contract, is RED
7657
+ # (honest non-zero exit). The gate never writes or refreshes the lock, so a
7658
+ # drift cannot be silenced on the verify path.
7659
+ from codd.stack.lock import enforce_stack_lock
7660
+
7661
+ gate = enforce_stack_lock(contract, project_root)
7662
+ click.echo(f"[verify] stack lock gate: {gate.message}", err=gate.red)
7663
+ if gate.red:
7664
+ raise SystemExit(1)
7665
+
7666
+ # Stack command MATERIALIZATION (Contract Kernel v2.77c) — the verify-path mirror
7667
+ # of the greenfield pipeline's :meth:`_materialize_stack_commands`. (1) CONFLICT
7668
+ # GATE: a composition conflict (command collision / unproved replace / weakened
7669
+ # obligation / exclusive / deny) is RED (honest non-zero exit) — the composer
7670
+ # already refuses a silent last-wins merge by recording a Conflict; this makes it
7671
+ # a gate. (2) PLAN + EXECUTE: build a deterministic, contract-driven command plan
7672
+ # (NO framework literal) and INVOKE each composed slot by exit code, so a declared
7673
+ # framework_build/e2e_test is genuinely run on verify (not silently skipped while
7674
+ # the language verify greens alone). Exit-code ONLY here; command AUTHENTICITY is
7675
+ # v2.77d and the obligation-checker gate is v2.77e (out of lane).
7676
+ from codd.stack.command_plan import (
7677
+ StackCommandMaterializationError,
7678
+ StackContractConflictError,
7679
+ materialize_stack_command_plan,
7680
+ )
7681
+
7682
+ try:
7683
+ plan, _result = materialize_stack_command_plan(
7684
+ contract, project_root, executor=stack_command_executor
7685
+ )
7686
+ except (StackContractConflictError, StackCommandMaterializationError) as exc:
7687
+ click.echo(f"[verify] stack command materialization: {exc}", err=True)
7688
+ raise SystemExit(1) from exc
7689
+ click.echo(
7690
+ f"[verify] stack command materialization: {len(plan.slots)} slot(s) invoked "
7691
+ f"({', '.join(plan.command_ids)})"
7692
+ )
7693
+
7637
7694
 
7638
7695
  def _run_verify_once(
7639
7696
  path: str,
@@ -313,6 +313,11 @@ CiScaffoldRunner = Callable[..., str]
313
313
  PropagateRunner = Callable[..., str]
314
314
  CheckRunner = Callable[[Path], str]
315
315
  Notifier = Callable[[str, str], bool]
316
+ #: Injectable seam for the v2.77c stack-command materialization executor (a slot →
317
+ #: exit-code outcome). Default (None) uses the real subprocess executor in
318
+ #: ``codd.stack.command_plan``; tests inject a recording/sentinel executor so the
319
+ #: declared stack command slots are provably invoked without real Next.js/Playwright.
320
+ StackCommandExecutor = Callable[..., Any]
316
321
 
317
322
 
318
323
  class GreenfieldPipeline:
@@ -351,6 +356,7 @@ class GreenfieldPipeline:
351
356
  propagate_runner: PropagateRunner | None = None,
352
357
  check_runner: CheckRunner | None = None,
353
358
  notifier: Notifier | None = None,
359
+ stack_command_executor: StackCommandExecutor | None = None,
354
360
  echo: Callable[[str], None] = print,
355
361
  ) -> None:
356
362
  self.project_name = project_name
@@ -380,6 +386,7 @@ class GreenfieldPipeline:
380
386
  self.propagate_runner = propagate_runner
381
387
  self.check_runner = check_runner
382
388
  self.notifier = notifier
389
+ self.stack_command_executor = stack_command_executor
383
390
  self.echo = echo
384
391
 
385
392
  def _restore_session_options(self, session: dict[str, Any]) -> None:
@@ -452,14 +459,80 @@ class GreenfieldPipeline:
452
459
  # failed GreenfieldResult instead of raising to the caller. Its own
453
460
  # pseudo-stage name (not a real STAGES entry) so the failure is attributed
454
461
  # honestly to intake, not to ``init``.
462
+ # Whether THIS run is a genuine first generation (the project is being
463
+ # created now) vs a re-run/resume of an already-progressed project. This is
464
+ # the ONLY context in which the stack-lock gate may bootstrap a missing lock
465
+ # (anti-gaming). It is read from the ON-DISK session INDEPENDENTLY of the
466
+ # ``resume`` flag — because a re-run WITHOUT ``--resume`` builds a fresh
467
+ # in-memory ``session`` (all-pending), which must NOT be mistaken for a first
468
+ # generation on an already-built project (GPT-consult leak: "absence of
469
+ # session ≠ first generation"). Fail-closed: any persisted completed stage ⇒
470
+ # not first-gen, so a deleted lock on a built project is RED, never silently
471
+ # re-bootstrapped to green.
472
+ on_disk = load_session(project_root)
473
+ first_generation = on_disk is None or not any(
474
+ rec.get("status") in _COMPLETE_STATUSES
475
+ for rec in on_disk.get("stages", {}).values()
476
+ )
477
+
455
478
  try:
456
- self._intake_stack_contract(project_root, session)
479
+ contract = self._intake_stack_contract(project_root, session)
457
480
  except StageError as exc:
458
481
  return self._fail(
459
482
  project_root, session, options, "stack_intake",
460
483
  {"status": STATUS_PENDING, "detail": ""}, str(exc),
461
484
  )
462
485
 
486
+ # Stack lock ENFORCEMENT (Contract Kernel v2.77b) — turn the already-live
487
+ # stack contract into a red/green GATE. For stack-declared projects
488
+ # (contract is not None): drift / missing-in-resume = RED (anti-false-green);
489
+ # a first-generation missing lock is bootstrapped once (never overwritten —
490
+ # anti-gaming). For projects with NO stack block: byte-identical UNLESS a
491
+ # committed lock still exists (a removed declaration on a still-pinned
492
+ # project = RED, closing the "drop stack: to dodge the gate" bypass).
493
+ # Routed through _fail like intake so the autopilot reports it honestly.
494
+ try:
495
+ if contract is not None:
496
+ self._enforce_stack_lock(project_root, session, contract, first_generation)
497
+ else:
498
+ from codd.stack.lock import orphan_stack_lock
499
+
500
+ orphan = orphan_stack_lock(project_root)
501
+ if orphan is not None and orphan.red:
502
+ self.echo(f"[greenfield] stack lock gate: {orphan.message}")
503
+ raise StageError(orphan.message)
504
+ except StageError as exc:
505
+ return self._fail(
506
+ project_root, session, options, "stack_lock",
507
+ {"status": STATUS_PENDING, "detail": ""}, str(exc),
508
+ )
509
+
510
+ # Stack command MATERIALIZATION (Contract Kernel v2.77c) — connect the
511
+ # composed stack commands (and thus the stack obligations) to the run's
512
+ # ACTUAL verify/build/test command plan. Two parts (both RED-routed through
513
+ # _fail, like intake/lock):
514
+ # 1. CONFLICT GATE — a composition conflict (command collision / unproved
515
+ # replace / weakened obligation / exclusive / deny) is RED. The composer
516
+ # already records these (it refuses last-wins); this makes that a gate.
517
+ # 2. PLAN + EXECUTE — build a deterministic, contract-driven command plan
518
+ # from contract.commands (NO framework literal) and INVOKE each slot by
519
+ # exit code, so a declared framework_build/e2e_test is genuinely run (not
520
+ # silently skipped while the language verify greens alone — the false
521
+ # green this step closes). Exit-code ONLY here; command AUTHENTICITY
522
+ # (no-op/"build":"true"/observed-no-tests) is v2.77d and the obligation-
523
+ # checker gate is v2.77e — both deliberately out of lane.
524
+ # Only for stack-declared projects (contract is not None) — a non-stack run
525
+ # never reaches here, so it is byte-identical (no plan, no execution, no new
526
+ # trace keys).
527
+ try:
528
+ if contract is not None:
529
+ self._materialize_stack_commands(project_root, session, contract)
530
+ except StageError as exc:
531
+ return self._fail(
532
+ project_root, session, options, "stack_commands",
533
+ {"status": STATUS_PENDING, "detail": ""}, str(exc),
534
+ )
535
+
463
536
  runners: dict[str, Callable[[Path, dict[str, Any], dict[str, Any]], None]] = {
464
537
  "init": self._stage_init,
465
538
  "elicit": self._stage_elicit,
@@ -544,7 +617,7 @@ class GreenfieldPipeline:
544
617
 
545
618
  # ── stack contract intake (Contract Kernel v2.77a, intake only) ──
546
619
 
547
- def _intake_stack_contract(self, project_root: Path, session: dict[str, Any]) -> None:
620
+ def _intake_stack_contract(self, project_root: Path, session: dict[str, Any]):
548
621
  """Resolve the project's declared stack contract into the live run record + trace.
549
622
 
550
623
  See the call site in :meth:`run`. INTAKE ONLY — proves the framework-stack
@@ -554,10 +627,11 @@ class GreenfieldPipeline:
554
627
 
555
628
  * No ``stack:`` block → no-op: nothing is added to the record and only a
556
629
  single debug ``self.echo`` is emitted, so a non-stack project (the vast
557
- majority) is behaviour-preserving.
630
+ majority) is behaviour-preserving. Returns ``None``.
558
631
  * A declared stack → its :func:`stack_contract_trace` payload (incl.
559
632
  ``stack_contract_hash``) is written to ``session["stack_contract"]`` and
560
- echoed to the run trace.
633
+ echoed to the run trace. Returns the resolved ``ResolvedStackContract`` so
634
+ the v2.77b lock-enforcement gate (run after intake) can pin it.
561
635
  * A declared-but-BROKEN stack → :class:`StageError` (honest error), never a
562
636
  silent skip (anti-false-green / no-silent-fallback).
563
637
  """
@@ -577,7 +651,7 @@ class GreenfieldPipeline:
577
651
  if contract is None:
578
652
  # The opt-in framework layer is unused — byte-identical behaviour.
579
653
  self.echo("[greenfield] stack contract intake: no `stack:` block (framework layer opt-out)")
580
- return
654
+ return None
581
655
 
582
656
  trace = stack_contract_trace(contract)
583
657
  session["stack_contract"] = dict(trace)
@@ -586,6 +660,92 @@ class GreenfieldPipeline:
586
660
  f"{trace['resolved_stack_id']} "
587
661
  f"stack_contract_hash={trace['stack_contract_hash']}"
588
662
  )
663
+ return contract
664
+
665
+ # ── stack lock enforcement (Contract Kernel v2.77b) ──
666
+
667
+ def _enforce_stack_lock(self, project_root: Path, session: dict[str, Any], contract, first_generation: bool) -> None:
668
+ """Enforce the project's stack lock as a red/green gate (v2.77b).
669
+
670
+ Only called for stack-declared projects (``contract is not None``); non-stack
671
+ projects never reach here, so they are byte-identical (no lock gate at all).
672
+
673
+ Design B′ (split read-only gate vs. creation-path bootstrap):
674
+
675
+ * genuine FIRST GENERATION (``first_generation`` True — no prior completed
676
+ stage) → :func:`bootstrap_stack_lock` writes the first lock (exclusive
677
+ create) and immediately enforces it read-only; ``generated`` is traced.
678
+ * otherwise (RESUME / already-progressed project) → read-only
679
+ :func:`enforce_stack_lock`: a missing lock is RED (an already-progressed
680
+ stack project with no committed pin is unverifiable; a deleted lock cannot
681
+ be silently regenerated), drift is RED, a valid lock is GREEN.
682
+
683
+ Anti-gaming (exit gate 3): the read-only gate NEVER writes/refreshes a lock;
684
+ ``bootstrap_stack_lock`` writes only when the lock is ABSENT (exclusive
685
+ create) on this creation path, so a drift cannot be silenced by regenerating
686
+ the lock. See :func:`enforce_stack_lock` / :func:`bootstrap_stack_lock`.
687
+ """
688
+ from codd.stack.lock import bootstrap_stack_lock, enforce_stack_lock
689
+
690
+ if first_generation:
691
+ gate = bootstrap_stack_lock(contract, project_root)
692
+ else:
693
+ gate = enforce_stack_lock(contract, project_root)
694
+ # Record the lock verdict in the run trace (observable, like the intake hash).
695
+ record = session.get("stack_contract")
696
+ if isinstance(record, dict):
697
+ record["stack_lock_status"] = gate.status
698
+ record["stack_lock_path"] = gate.lock_path
699
+ self.echo(f"[greenfield] stack lock gate: {gate.message}")
700
+ if gate.red:
701
+ raise StageError(gate.message)
702
+
703
+ # ── stack command materialization (Contract Kernel v2.77c) ──
704
+
705
+ def _materialize_stack_commands(self, project_root: Path, session: dict[str, Any], contract) -> None:
706
+ """Conflict-gate + materialize the composed stack commands into the run plan (v2.77c).
707
+
708
+ See the call site in :meth:`run`. Only invoked for stack-declared projects.
709
+
710
+ 1. CONFLICT GATE — :func:`assert_stack_contract_clean` (inside
711
+ :func:`stack_command_plan`) raises :class:`StackContractConflictError` on
712
+ ANY composition conflict (command collision / unproved replace / weakened
713
+ obligation / exclusive / deny). That is RED — the composer already refuses
714
+ a silent last-wins merge by recording a ``Conflict``; this makes it a gate.
715
+ 2. MATERIALIZE — build a deterministic, contract-driven command plan and
716
+ INVOKE each composed slot by exit code (via the injectable
717
+ ``stack_command_executor`` seam). A failing slot raises
718
+ :class:`StackCommandMaterializationError`. Both domain errors become a
719
+ :class:`StageError` so the autopilot reports them honestly (the run does
720
+ NOT advance to the stage loop with a conflicted/failing stack plan).
721
+
722
+ The materialized plan + executed slot ids are recorded in the run trace
723
+ (observable, like the intake hash + lock verdict) so "the declared stack
724
+ command slots were invoked" is provable. Exit-code only — authenticity is
725
+ v2.77d, the obligation-checker gate is v2.77e.
726
+ """
727
+ from codd.stack.command_plan import (
728
+ StackCommandMaterializationError,
729
+ StackContractConflictError,
730
+ materialize_stack_command_plan,
731
+ )
732
+
733
+ try:
734
+ plan, result = materialize_stack_command_plan(
735
+ contract, project_root, executor=self.stack_command_executor
736
+ )
737
+ except (StackContractConflictError, StackCommandMaterializationError) as exc:
738
+ self.echo(f"[greenfield] stack command materialization: {exc}")
739
+ raise StageError(str(exc)) from exc
740
+
741
+ record = session.get("stack_contract")
742
+ if isinstance(record, dict):
743
+ record["stack_command_plan"] = plan.to_record()
744
+ record["stack_commands_executed"] = list(result.executed_slot_ids)
745
+ self.echo(
746
+ "[greenfield] stack command materialization: "
747
+ f"{len(plan.slots)} slot(s) invoked ({', '.join(plan.command_ids)})"
748
+ )
589
749
 
590
750
  # ── option resolution ───────────────────────────────────
591
751