codd-dev 2.25.0__tar.gz → 2.27.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 (570) hide show
  1. {codd_dev-2.25.0 → codd_dev-2.27.0}/PKG-INFO +1 -1
  2. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/__init__.py +1 -1
  3. codd_dev-2.27.0/codd/dependency_lock_coherence.py +447 -0
  4. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/greenfield/pipeline.py +335 -19
  5. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/implement_oracle.py +199 -8
  6. codd_dev-2.27.0/codd/implement_oracle_scope.py +1106 -0
  7. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/project_types.py +165 -0
  8. {codd_dev-2.25.0 → codd_dev-2.27.0}/pyproject.toml +1 -1
  9. {codd_dev-2.25.0 → codd_dev-2.27.0}/.gitignore +0 -0
  10. {codd_dev-2.25.0 → codd_dev-2.27.0}/LICENSE +0 -0
  11. {codd_dev-2.25.0 → codd_dev-2.27.0}/README.md +0 -0
  12. {codd_dev-2.25.0 → codd_dev-2.27.0}/bench_fixture/README.md +0 -0
  13. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/__main__.py +0 -0
  14. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/_git_helper.py +0 -0
  15. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/action_outcome.py +0 -0
  16. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/ai_invoke.py +0 -0
  17. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/ai_patch.py +0 -0
  18. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/artifact_contract.py +0 -0
  19. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/artifact_ids.py +0 -0
  20. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/artifacts/catalog.yaml +0 -0
  21. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/ask_user_question_adapter.py +0 -0
  22. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/assembler.py +0 -0
  23. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/bridge.py +0 -0
  24. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/brownfield/__init__.py +0 -0
  25. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/brownfield/pipeline.py +0 -0
  26. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/capability_completeness.py +0 -0
  27. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/claude_cli.py +0 -0
  28. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/cli.py +0 -0
  29. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/clustering.py +0 -0
  30. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/coherence_adapters.py +0 -0
  31. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/coherence_engine.py +0 -0
  32. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/confidence.py +0 -0
  33. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/config.py +0 -0
  34. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/config_schema.py +0 -0
  35. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/contracts.py +0 -0
  36. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/coverage_auditor.py +0 -0
  37. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/coverage_metrics.py +0 -0
  38. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/__init__.py +0 -0
  39. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/auto_repair.py +0 -0
  40. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/builder.py +0 -0
  41. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/checks/__init__.py +0 -0
  42. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
  43. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/checks/artifact_contract_check.py +0 -0
  44. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/checks/ci_health.py +0 -0
  45. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/checks/dependency_freshness.py +0 -0
  46. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/checks/depends_on_consistency.py +0 -0
  47. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/checks/deployment_completeness.py +0 -0
  48. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/checks/edge_validity.py +0 -0
  49. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/checks/environment_coverage.py +0 -0
  50. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/checks/implementation_coverage.py +0 -0
  51. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/checks/node_completeness.py +0 -0
  52. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/checks/opt_out.py +0 -0
  53. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/checks/task_completion.py +0 -0
  54. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/checks/transitive_closure.py +0 -0
  55. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/checks/ui_coherence.py +0 -0
  56. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/checks/user_journey_coherence.py +0 -0
  57. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/coverage_axes.py +0 -0
  58. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/defaults/cli.yaml +0 -0
  59. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
  60. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/defaults/csharp.yaml +0 -0
  61. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/defaults/elixir.yaml +0 -0
  62. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/defaults/generic.yaml +0 -0
  63. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/defaults/iot.yaml +0 -0
  64. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/defaults/java.yaml +0 -0
  65. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/defaults/kotlin.yaml +0 -0
  66. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/defaults/mobile.yaml +0 -0
  67. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/defaults/ruby.yaml +0 -0
  68. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/defaults/rust.yaml +0 -0
  69. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/defaults/scala.yaml +0 -0
  70. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/defaults/swift.yaml +0 -0
  71. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
  72. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/defaults/web.yaml +0 -0
  73. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/extractor.py +0 -0
  74. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/impact.py +0 -0
  75. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/dag/runner.py +0 -0
  76. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/defaults.py +0 -0
  77. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/defaults.yaml +0 -0
  78. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deploy_targets/__init__.py +0 -0
  79. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deploy_targets/app_service.py +0 -0
  80. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deploy_targets/base.py +0 -0
  81. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deploy_targets/docker_compose.py +0 -0
  82. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deployer.py +0 -0
  83. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deployment/__init__.py +0 -0
  84. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deployment/checks/__init__.py +0 -0
  85. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
  86. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
  87. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
  88. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
  89. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deployment/extractor.py +0 -0
  90. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deployment/providers/__init__.py +0 -0
  91. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deployment/providers/ai_command.py +0 -0
  92. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deployment/providers/ai_command_factory.py +0 -0
  93. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deployment/providers/codex_app_server.py +0 -0
  94. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deployment/providers/llm_consideration.py +0 -0
  95. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deployment/providers/schema/__init__.py +0 -0
  96. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deployment/providers/schema/prisma.py +0 -0
  97. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deployment/providers/target/__init__.py +0 -0
  98. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deployment/providers/target/docker_compose.py +0 -0
  99. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deployment/providers/verification/__init__.py +0 -0
  100. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
  101. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
  102. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
  103. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
  104. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
  105. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deployment/providers/verification/curl.py +0 -0
  106. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
  107. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
  108. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deployment/providers/verification/playwright.py +0 -0
  109. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/deployment/providers/verification/vitest.py +0 -0
  110. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/design_md.py +0 -0
  111. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/diff/__init__.py +0 -0
  112. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/diff/apply.py +0 -0
  113. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/diff/engine.py +0 -0
  114. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/diff/persistence.py +0 -0
  115. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/diff/templates/diff_prompt.md +0 -0
  116. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/discovery.py +0 -0
  117. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/drift.py +0 -0
  118. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/e2e_contract_coherence.py +0 -0
  119. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/e2e_extractor.py +0 -0
  120. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/e2e_generator.py +0 -0
  121. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/e2e_runner.py +0 -0
  122. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/elicit/__init__.py +0 -0
  123. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/elicit/apply.py +0 -0
  124. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/elicit/engine.py +0 -0
  125. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/elicit/finding.py +0 -0
  126. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/elicit/formatters/__init__.py +0 -0
  127. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/elicit/formatters/base.py +0 -0
  128. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/elicit/formatters/interactive.py +0 -0
  129. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/elicit/formatters/json_fmt.py +0 -0
  130. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/elicit/formatters/md.py +0 -0
  131. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/elicit/lexicon_loader.py +0 -0
  132. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/elicit/persistence.py +0 -0
  133. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
  134. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/env_refs.py +0 -0
  135. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/extract_ai.py +0 -0
  136. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/extract_paths.py +0 -0
  137. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/extractor.py +0 -0
  138. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/fix/__init__.py +0 -0
  139. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/fix/candidate_selector.py +0 -0
  140. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/fix/design_updater.py +0 -0
  141. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/fix/impl_propagation.py +0 -0
  142. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/fix/interactive_prompt.py +0 -0
  143. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/fix/phenomenon_fixer.py +0 -0
  144. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/fix/phenomenon_parser.py +0 -0
  145. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/fix/risk_classifier.py +0 -0
  146. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/fix/templates/clarification_question.txt +0 -0
  147. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/fix/templates/design_update.txt +0 -0
  148. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/fix/templates/impl_update.txt +0 -0
  149. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
  150. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/fix/templates/risk_assessment.txt +0 -0
  151. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/fix/templates_loader.py +0 -0
  152. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/fixer.py +0 -0
  153. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/fixup_drift.py +0 -0
  154. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/fixup_drift_strategies/__init__.py +0 -0
  155. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
  156. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
  157. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
  158. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/frontmatter.py +0 -0
  159. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/generator.py +0 -0
  160. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/git_evidence.py +0 -0
  161. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/graph.py +0 -0
  162. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/greenfield/__init__.py +0 -0
  163. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/hitl_session.py +0 -0
  164. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/hooks/__init__.py +0 -0
  165. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/hooks/pre-commit +0 -0
  166. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
  167. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
  168. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/hooks/recipes/codex_hook.sh +0 -0
  169. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
  170. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
  171. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/iac_nfr.py +0 -0
  172. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/implementer/__init__.py +0 -0
  173. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/implementer/chunked_runner.py +0 -0
  174. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/implementer/typecheck_loop.py +0 -0
  175. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/implementer.py +0 -0
  176. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/import_coherence.py +0 -0
  177. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/inheritance.py +0 -0
  178. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/init/__init__.py +0 -0
  179. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/init/lexicon_suggest.py +0 -0
  180. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/init/llm_lexicon_suggester.py +0 -0
  181. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/init/stack_detector.py +0 -0
  182. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/knowledge_fetcher.py +0 -0
  183. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/lexicon.py +0 -0
  184. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/lexicon_cli/__init__.py +0 -0
  185. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
  186. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/lexicon_cli/formatters/html.py +0 -0
  187. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
  188. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/lexicon_cli/formatters/md.py +0 -0
  189. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/lexicon_cli/inspector.py +0 -0
  190. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/lexicon_cli/manager.py +0 -0
  191. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/lexicon_cli/reporter.py +0 -0
  192. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/lexicon_cli/threshold.py +0 -0
  193. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/llm/__init__.py +0 -0
  194. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/llm/approval.py +0 -0
  195. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/llm/best_practice_augmenter.py +0 -0
  196. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/llm/criteria_expander.py +0 -0
  197. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/llm/design_doc_extractor.py +0 -0
  198. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/llm/impl_step_deriver.py +0 -0
  199. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/llm/means_catalog_loader.py +0 -0
  200. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/llm/parser.py +0 -0
  201. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/llm/plan_deriver.py +0 -0
  202. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/llm/prompt_builder.py +0 -0
  203. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/llm/strategy_validator.py +0 -0
  204. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
  205. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
  206. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
  207. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
  208. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
  209. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/llm/templates/meta_instruction.md +0 -0
  210. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/llm/templates/plan_derive_meta.md +0 -0
  211. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
  212. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/mcp_server.py +0 -0
  213. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/measure.py +0 -0
  214. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/operational_e2e_audit.py +0 -0
  215. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/operations_derive.py +0 -0
  216. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/parsing/__init__.py +0 -0
  217. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/parsing/_shared.py +0 -0
  218. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/parsing/api_specs.py +0 -0
  219. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/parsing/filesystem_routes.py +0 -0
  220. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/parsing/iac.py +0 -0
  221. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/parsing/python_ast.py +0 -0
  222. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/parsing/schemas.py +0 -0
  223. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/parsing/tests_builddeps.py +0 -0
  224. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/parsing/treesitter.py +0 -0
  225. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/planner.py +0 -0
  226. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/policy.py +0 -0
  227. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/preflight/__init__.py +0 -0
  228. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/preflight/defaults/cli.yaml +0 -0
  229. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/preflight/defaults/generic.yaml +0 -0
  230. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/preflight/defaults/iot.yaml +0 -0
  231. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/preflight/defaults/mobile.yaml +0 -0
  232. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/preflight/defaults/web.yaml +0 -0
  233. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/propagate.py +0 -0
  234. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/propagation_common.py +0 -0
  235. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/propagator.py +0 -0
  236. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/reconciliation_ledger.py +0 -0
  237. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/registry.py +0 -0
  238. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/repair/__init__.py +0 -0
  239. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/repair/approval_repair.py +0 -0
  240. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/repair/auto_scope_guard.py +0 -0
  241. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/repair/engine.py +0 -0
  242. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/repair/git_patcher.py +0 -0
  243. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/repair/history.py +0 -0
  244. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/repair/llm_repair_engine.py +0 -0
  245. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/repair/loop.py +0 -0
  246. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/repair/primary_picker.py +0 -0
  247. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/repair/proof_breaks.py +0 -0
  248. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/repair/repair_result.py +0 -0
  249. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/repair/repairability_classifier.py +0 -0
  250. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/repair/schema.py +0 -0
  251. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/repair/templates/analyze_meta.md +0 -0
  252. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/repair/templates/propose_meta.md +0 -0
  253. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
  254. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/repair/templates/repairability_meta.md +0 -0
  255. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/repair/test_failure_attribution.py +0 -0
  256. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/repair/verify_runner.py +0 -0
  257. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/repair_slice.py +0 -0
  258. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/require.py +0 -0
  259. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/require_plugins.py +0 -0
  260. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/require_propagate.py +0 -0
  261. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
  262. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
  263. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
  264. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
  265. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/required_artifacts/defaults/web.yaml +0 -0
  266. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/required_artifacts_deriver.py +0 -0
  267. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
  268. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
  269. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
  270. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
  271. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
  272. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/requirement_completeness_auditor.py +0 -0
  273. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/requirement_reconciliation.py +0 -0
  274. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/requirements_meta.py +0 -0
  275. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/restoration_report.py +0 -0
  276. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/restore.py +0 -0
  277. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/routes_extractor.py +0 -0
  278. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/runtime_smoke/__init__.py +0 -0
  279. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/runtime_smoke/checks.py +0 -0
  280. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/runtime_smoke/config.py +0 -0
  281. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/runtime_smoke/report.py +0 -0
  282. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/runtime_smoke/runner.py +0 -0
  283. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/scanner.py +0 -0
  284. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/schema_refs.py +0 -0
  285. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/screen_flow_validator.py +0 -0
  286. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/screen_transition_extractor.py +0 -0
  287. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/screen_transitions/defaults.yaml +0 -0
  288. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/skills_cli/__init__.py +0 -0
  289. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/skills_cli/discovery.py +0 -0
  290. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/skills_cli/manager.py +0 -0
  291. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/skills_cli/paths.py +0 -0
  292. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/surface_reconciliation.py +0 -0
  293. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/synth.py +0 -0
  294. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/templates/codd.yaml.tmpl +0 -0
  295. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/templates/conventions.yaml.tmpl +0 -0
  296. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
  297. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/templates/doc_links.yaml.tmpl +0 -0
  298. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
  299. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
  300. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
  301. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
  302. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
  303. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/templates/extracted/system-context.md.j2 +0 -0
  304. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/templates/gitignore.tmpl +0 -0
  305. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/templates/lexicon_questions.md +0 -0
  306. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/templates/lexicon_schema.yaml +0 -0
  307. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/templates/overrides.yaml.tmpl +0 -0
  308. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/test_detection.py +0 -0
  309. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/test_import_coherence.py +0 -0
  310. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/traceability.py +0 -0
  311. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/validator.py +0 -0
  312. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/verifiable_behavior_audit.py +0 -0
  313. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/watch/__init__.py +0 -0
  314. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/watch/events.py +0 -0
  315. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/watch/propagation_log.py +0 -0
  316. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/watch/propagation_pipeline.py +0 -0
  317. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/watch/test_runner.py +0 -0
  318. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/watch/watcher.py +0 -0
  319. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd/wiring.py +0 -0
  320. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
  321. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
  322. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
  323. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
  324. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
  325. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
  326. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
  327. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
  328. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
  329. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
  330. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
  331. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
  332. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
  333. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
  334. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
  335. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
  336. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
  337. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
  338. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
  339. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
  340. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
  341. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
  342. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
  343. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
  344. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
  345. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
  346. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
  347. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
  348. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
  349. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
  350. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
  351. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
  352. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
  353. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
  354. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
  355. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
  356. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
  357. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
  358. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
  359. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
  360. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
  361. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
  362. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
  363. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
  364. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
  365. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
  366. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
  367. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
  368. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
  369. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
  370. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
  371. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
  372. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
  373. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
  374. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
  375. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
  376. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
  377. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
  378. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
  379. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
  380. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
  381. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
  382. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
  383. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
  384. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
  385. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
  386. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
  387. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
  388. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
  389. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
  390. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
  391. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
  392. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
  393. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
  394. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
  395. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
  396. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
  397. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
  398. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
  399. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
  400. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
  401. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
  402. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
  403. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
  404. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
  405. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
  406. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
  407. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
  408. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
  409. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
  410. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
  411. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
  412. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
  413. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
  414. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
  415. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
  416. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
  417. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
  418. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
  419. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
  420. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
  421. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
  422. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
  423. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
  424. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
  425. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
  426. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
  427. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
  428. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
  429. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
  430. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
  431. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
  432. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
  433. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
  434. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
  435. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
  436. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
  437. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
  438. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
  439. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
  440. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
  441. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
  442. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
  443. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
  444. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
  445. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
  446. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
  447. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
  448. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
  449. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
  450. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
  451. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
  452. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
  453. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
  454. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
  455. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
  456. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
  457. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
  458. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
  459. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
  460. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
  461. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
  462. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
  463. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
  464. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
  465. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
  466. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
  467. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
  468. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
  469. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
  470. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
  471. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
  472. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
  473. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
  474. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
  475. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
  476. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
  477. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
  478. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
  479. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
  480. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
  481. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
  482. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
  483. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
  484. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
  485. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
  486. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
  487. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
  488. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
  489. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
  490. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
  491. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
  492. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
  493. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
  494. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
  495. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
  496. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
  497. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
  498. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
  499. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
  500. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
  501. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
  502. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
  503. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
  504. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
  505. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
  506. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
  507. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
  508. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
  509. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
  510. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
  511. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
  512. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
  513. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
  514. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
  515. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
  516. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
  517. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
  518. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
  519. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
  520. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
  521. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
  522. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
  523. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
  524. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
  525. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
  526. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
  527. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
  528. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
  529. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
  530. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
  531. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
  532. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
  533. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
  534. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
  535. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
  536. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
  537. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
  538. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
  539. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
  540. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
  541. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
  542. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
  543. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
  544. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
  545. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
  546. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
  547. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
  548. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
  549. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
  550. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
  551. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
  552. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
  553. {codd_dev-2.25.0 → codd_dev-2.27.0}/codd_plugins/stack_map.yaml +0 -0
  554. {codd_dev-2.25.0 → codd_dev-2.27.0}/docs/cookbook/cdp_browser/README.md +0 -0
  555. {codd_dev-2.25.0 → codd_dev-2.27.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
  556. {codd_dev-2.25.0 → codd_dev-2.27.0}/docs/requirements/README.md +0 -0
  557. {codd_dev-2.25.0 → codd_dev-2.27.0}/dogfood/README.md +0 -0
  558. {codd_dev-2.25.0 → codd_dev-2.27.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
  559. {codd_dev-2.25.0 → codd_dev-2.27.0}/examples/README.md +0 -0
  560. {codd_dev-2.25.0 → codd_dev-2.27.0}/skills/codd-assemble/SKILL.md +0 -0
  561. {codd_dev-2.25.0 → codd_dev-2.27.0}/skills/codd-evolve/SKILL.md +0 -0
  562. {codd_dev-2.25.0 → codd_dev-2.27.0}/skills/codd-generate/SKILL.md +0 -0
  563. {codd_dev-2.25.0 → codd_dev-2.27.0}/skills/codd-greenfield/SKILL.md +0 -0
  564. {codd_dev-2.25.0 → codd_dev-2.27.0}/skills/codd-impact/SKILL.md +0 -0
  565. {codd_dev-2.25.0 → codd_dev-2.27.0}/skills/codd-init/SKILL.md +0 -0
  566. {codd_dev-2.25.0 → codd_dev-2.27.0}/skills/codd-propagate/SKILL.md +0 -0
  567. {codd_dev-2.25.0 → codd_dev-2.27.0}/skills/codd-restore/SKILL.md +0 -0
  568. {codd_dev-2.25.0 → codd_dev-2.27.0}/skills/codd-scan/SKILL.md +0 -0
  569. {codd_dev-2.25.0 → codd_dev-2.27.0}/skills/codd-validate/SKILL.md +0 -0
  570. {codd_dev-2.25.0 → codd_dev-2.27.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.25.0
3
+ Version: 2.27.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.25.0"
3
+ __version__ = "2.27.0"
@@ -0,0 +1,447 @@
1
+ """Implement-end manifest↔lock coherence finalization (design:
2
+ /tmp/gpt_result_dep.txt, GPT-5.5 Pro consult 2026-06-15; verdict (b) primary +
3
+ (a) finalization + (c) forbidden).
4
+
5
+ WHAT
6
+ ====
7
+ After the greenfield IMPLEMENT stage (the SUT has finished authoring source,
8
+ tests, AND ``package.json``) and BEFORE verify, this module:
9
+
10
+ 1. RECONCILES the harness-owned test-toolchain dependency versions in the SUT's
11
+ manifest back to the profile's pins (verdict (b): vitest/typescript/
12
+ @types/node are the VERIFIER's tooling, not the app's business deps — the
13
+ harness recovers its OWN property; app/domain deps are never touched).
14
+ 2. REFRESHES the lock deterministically to match the reconciled manifest
15
+ (verdict (a): ``npm install --package-lock-only`` updates ONLY
16
+ ``package-lock.json``, no frozen check, no SUT feedback loop — a harness
17
+ FINALIZATION).
18
+ 3. optionally MATERIALIZES node_modules with a FROZEN install (``npm ci``) so a
19
+ same-process implement-oracle typecheck has its deps against the now-coherent
20
+ lock.
21
+
22
+ WHY (the bug it closes)
23
+ =======================
24
+ verify's install preflight is a FROZEN install (``npm ci`` — see
25
+ ``codd/repair/verify_runner.py`` + ``codd.project_types.node_install_command``).
26
+ That is CORRECT and stays (verdict (c): loosening ``npm ci`` → ``npm install``
27
+ would make verify a repair, not verification). The bug is that the SUT writes
28
+ ``package.json`` with an OLD toolchain dep (``"vitest": "^1.6.0"``) while the
29
+ scaffold/gate install already produced a lock with the LATEST resolution
30
+ (``@vitest/expect@3.2.6``); ``npm ci`` then hard-fails on the lock↔manifest
31
+ mismatch. This module makes the manifest+lock COHERENT before verify, so the
32
+ frozen ``npm ci`` passes HONESTLY.
33
+
34
+ PROFILE-DRIVEN + GENERAL (design section D)
35
+ ===========================================
36
+ This is the language-independent manifest↔lock coherence contract
37
+ (package-lock.json / uv.lock / poetry.lock / Cargo.lock / go.sum). The commands +
38
+ the reconcile RULE come from
39
+ :class:`codd.project_types.ToolchainDependencyProfile` on the stack's
40
+ :class:`~codd.project_types.LayoutProfile`. TS/npm is implemented now; Python/
41
+ Rust/Go are added as a profile entry + a reconcile-adapter entry here — never a
42
+ core edit. A stack whose profile declares ``toolchain_dependencies=None`` (Python
43
+ today) makes the whole finalization a strict NO-OP.
44
+ """
45
+
46
+ from __future__ import annotations
47
+
48
+ import json
49
+ import subprocess
50
+ from collections.abc import Callable, Mapping
51
+ from dataclasses import dataclass, field
52
+ from pathlib import Path
53
+ from typing import Any
54
+
55
+ from codd.project_types import (
56
+ LayoutProfile,
57
+ ToolchainDependency,
58
+ ToolchainDependencyProfile,
59
+ resolve_layout_profile,
60
+ )
61
+
62
+
63
+ __all__ = [
64
+ "DependencyLockResult",
65
+ "finalize_dependency_lock_coherence",
66
+ "reconcile_manifest_toolchain_deps",
67
+ "resolve_toolchain_profile",
68
+ ]
69
+
70
+
71
+ #: Lock refresh + materialize can pull a tree on a cold cache. Bounded; the same
72
+ #: magnitude verify's preflight + the implement-oracle install use (override via
73
+ #: ``implement.lock_refresh_timeout_seconds``).
74
+ DEFAULT_LOCK_REFRESH_TIMEOUT_SECONDS = 900.0
75
+
76
+
77
+ @dataclass
78
+ class DependencyLockResult:
79
+ """Outcome of the implement-end manifest↔lock finalization.
80
+
81
+ ``applied`` is True when the finalization actually ran for a stack that has a
82
+ toolchain profile (even if no dep needed changing — the lock was still
83
+ refreshed). ``skipped`` is True for a NO-OP (no toolchain profile, opted out,
84
+ or no manifest present). ``ok`` is False ONLY on a hard failure (a lock
85
+ refresh that exited non-zero / timed out) — an honest ``environment_build_error``
86
+ the caller surfaces.
87
+ """
88
+
89
+ ok: bool = True
90
+ applied: bool = False
91
+ skipped: bool = False
92
+ reconciled: dict[str, tuple[str | None, str]] = field(default_factory=dict)
93
+ lock_refresh_command: str | None = None
94
+ materialize_command: str | None = None
95
+ detail: str = ""
96
+
97
+ @property
98
+ def reconciled_count(self) -> int:
99
+ return len(self.reconciled)
100
+
101
+
102
+ # ── opt-out + timeout config ─────────────────────────────────
103
+
104
+
105
+ def _opt_out(config: Mapping[str, Any] | None) -> bool:
106
+ """``implement.dependency_lock_coherence: false`` — the explicit opt-out.
107
+
108
+ Default OFF (the finalization runs). Opting out re-opens the npm-ci-vs-lock
109
+ false-fail the contract closes, so it is never the default and never silent.
110
+ """
111
+ section = (config or {}).get("implement") if isinstance(config, Mapping) else None
112
+ if isinstance(section, Mapping) and "dependency_lock_coherence" in section:
113
+ return section["dependency_lock_coherence"] is False
114
+ return False
115
+
116
+
117
+ def _timeout_seconds(config: Mapping[str, Any] | None) -> float:
118
+ section = (config or {}).get("implement") if isinstance(config, Mapping) else None
119
+ if isinstance(section, Mapping):
120
+ raw = section.get("lock_refresh_timeout_seconds")
121
+ try:
122
+ value = float(raw)
123
+ if value > 0:
124
+ return value
125
+ except (TypeError, ValueError):
126
+ pass
127
+ return DEFAULT_LOCK_REFRESH_TIMEOUT_SECONDS
128
+
129
+
130
+ # ── resolution ───────────────────────────────────────────────
131
+
132
+
133
+ def resolve_toolchain_profile(
134
+ project_root: Path,
135
+ *,
136
+ language: str | None,
137
+ project_name: str | None,
138
+ source_dirs: Any = None,
139
+ test_dirs: Any = None,
140
+ config: Mapping[str, Any] | None = None,
141
+ profile: LayoutProfile | None = None,
142
+ ) -> tuple[LayoutProfile, ToolchainDependencyProfile] | None:
143
+ """Resolve the (layout, toolchain) profiles for a stack, or ``None`` (NO-OP).
144
+
145
+ ``None`` when: the gate is opted out, the stack has no layout profile, or the
146
+ profile declares no ``toolchain_dependencies`` (Python today). The caller
147
+ treats ``None`` as "this stack has no manifest↔lock contract — skip silently".
148
+ """
149
+ if _opt_out(config):
150
+ return None
151
+ if profile is None:
152
+ profile = resolve_layout_profile(
153
+ language=language,
154
+ project_name=project_name,
155
+ source_dirs=source_dirs,
156
+ test_dirs=test_dirs,
157
+ config=config,
158
+ project_root=project_root,
159
+ )
160
+ if profile is None or profile.toolchain_dependencies is None:
161
+ return None
162
+ return profile, profile.toolchain_dependencies
163
+
164
+
165
+ # ── manifest reconciliation (npm adapter; the per-ecosystem seam) ──
166
+
167
+
168
+ def reconcile_manifest_toolchain_deps(
169
+ project_root: Path,
170
+ toolchain: ToolchainDependencyProfile,
171
+ ) -> dict[str, tuple[str | None, str]]:
172
+ """Reconcile the SUT manifest's HARNESS-OWNED toolchain dep versions in place.
173
+
174
+ Dispatches on the manifest filename (the per-ecosystem seam). TS/npm
175
+ (``package.json``) is implemented now: every dep in ``toolchain.deps`` is
176
+ written into the dev/prod-deps section with EXACTLY the profile's version
177
+ spec — overriding a SUT-authored version (the incoherence we recover from) and
178
+ ADDING any the SUT omitted (the scaffold's scripts need them). The SUT's app/
179
+ domain deps are NEVER in ``toolchain.deps`` and are left byte-for-byte.
180
+
181
+ Returns ``{name: (old_spec_or_None, new_spec)}`` for every dep that CHANGED
182
+ (added or overridden); an empty dict means the manifest was already coherent.
183
+ A manifest that does not exist, or whose filename has no adapter, is a no-op
184
+ (returns ``{}``) — the caller still refreshes the lock so a stale lock from a
185
+ prior install is reconciled to whatever the manifest actually declares.
186
+ """
187
+ manifest = project_root / toolchain.manifest_filename
188
+ if not manifest.is_file():
189
+ return {}
190
+ if toolchain.manifest_filename == "package.json":
191
+ return _reconcile_package_json(manifest, toolchain)
192
+ # No adapter for this manifest format yet (pyproject.toml / Cargo.toml are
193
+ # DEFERRED): do not guess an edit for a manifest we cannot reason about.
194
+ return {}
195
+
196
+
197
+ def _reconcile_package_json(
198
+ manifest: Path,
199
+ toolchain: ToolchainDependencyProfile,
200
+ ) -> dict[str, tuple[str | None, str]]:
201
+ """npm adapter: force each harness-owned toolchain dep to the profile version.
202
+
203
+ Reads ``package.json`` as JSON (a non-JSON/unreadable manifest is left
204
+ untouched — the verify honesty/parse gates are the backstop). Each toolchain
205
+ dep is written to ``devDependencies`` (``dev=True``) or ``dependencies``,
206
+ de-duplicating: if the SUT placed the same dep in the OTHER section, that
207
+ stale entry is removed so the lock cannot resolve two ranges for one name.
208
+ Re-serializes with 2-space indent + trailing newline (matching the scaffold's
209
+ own ``package.json`` writes), preserving every other field and key order.
210
+ """
211
+ try:
212
+ payload = json.loads(manifest.read_text(encoding="utf-8"))
213
+ except (OSError, json.JSONDecodeError):
214
+ return {}
215
+ if not isinstance(payload, dict):
216
+ return {}
217
+
218
+ changed: dict[str, tuple[str | None, str]] = {}
219
+ for dep in toolchain.deps:
220
+ old = _current_dep_spec(payload, dep.name)
221
+ if _apply_dep(payload, dep):
222
+ changed[dep.name] = (old, dep.version)
223
+
224
+ if changed:
225
+ manifest.write_text(json.dumps(payload, indent=2) + "\n", encoding="utf-8")
226
+ return changed
227
+
228
+
229
+ _DEP_SECTIONS = ("dependencies", "devDependencies")
230
+
231
+
232
+ def _current_dep_spec(payload: dict[str, Any], name: str) -> str | None:
233
+ """The version spec the manifest currently declares for ``name`` (any section)."""
234
+ for section in _DEP_SECTIONS:
235
+ block = payload.get(section)
236
+ if isinstance(block, dict) and name in block:
237
+ return str(block.get(name))
238
+ return None
239
+
240
+
241
+ def _apply_dep(payload: dict[str, Any], dep: ToolchainDependency) -> bool:
242
+ """Write ``dep`` at the profile's version into the correct section.
243
+
244
+ Returns True when the manifest CHANGED (the dep was absent, was at a different
245
+ version, or lived in the wrong section). Removes a same-named entry from the
246
+ other section so one toolchain dep never has two competing ranges.
247
+ """
248
+ target_section = "devDependencies" if dep.dev else "dependencies"
249
+ other_section = "dependencies" if dep.dev else "devDependencies"
250
+
251
+ changed = False
252
+
253
+ # Drop a stale entry in the WRONG section (a SUT that put vitest in
254
+ # dependencies, say) so the refreshed lock resolves a single range.
255
+ other = payload.get(other_section)
256
+ if isinstance(other, dict) and dep.name in other:
257
+ del other[dep.name]
258
+ if not other:
259
+ del payload[other_section]
260
+ changed = True
261
+
262
+ block = payload.get(target_section)
263
+ if not isinstance(block, dict):
264
+ block = {}
265
+ payload[target_section] = block
266
+ if block.get(dep.name) != dep.version:
267
+ block[dep.name] = dep.version
268
+ changed = True
269
+ return changed
270
+
271
+
272
+ # ── lock refresh + materialization (deterministic finalization) ──
273
+
274
+
275
+ def _run(command: str, project_root: Path, timeout: float) -> subprocess.CompletedProcess[str] | None:
276
+ """Run a finalization command from the project root; ``None`` on timeout."""
277
+ try:
278
+ return subprocess.run(
279
+ command,
280
+ shell=True,
281
+ cwd=project_root,
282
+ capture_output=True,
283
+ text=True,
284
+ timeout=timeout,
285
+ )
286
+ except subprocess.TimeoutExpired:
287
+ return None
288
+
289
+
290
+ def _output_tail(stdout: str | None, stderr: str | None, limit: int = 4000) -> str:
291
+ combined = "\n".join(part.strip() for part in (stdout, stderr) if part and part.strip())
292
+ if len(combined) <= limit:
293
+ return combined
294
+ return f"... (truncated) ...\n{combined[-limit:]}"
295
+
296
+
297
+ # ── public entry: the stage-level finalization ──
298
+
299
+
300
+ def finalize_dependency_lock_coherence(
301
+ project_root: Path | str,
302
+ *,
303
+ language: str | None,
304
+ project_name: str | None,
305
+ source_dirs: Any = None,
306
+ test_dirs: Any = None,
307
+ config: Mapping[str, Any] | None = None,
308
+ echo: Callable[[str], None] = print,
309
+ profile: LayoutProfile | None = None,
310
+ ) -> DependencyLockResult:
311
+ """Reconcile harness-owned toolchain deps + refresh the lock, at implement-end.
312
+
313
+ Sequence (TS/npm; profile-driven so other ecosystems slot in):
314
+
315
+ 1. Resolve the stack's toolchain profile. None declared → a NO-OP
316
+ (``skipped=True``) so Python/bash are untouched.
317
+ 2. RECONCILE the manifest's harness-owned toolchain dep versions to the
318
+ profile (verdict (b)). App/domain deps are never touched.
319
+ 3. REFRESH the lock to match the reconciled manifest with the profile's
320
+ deterministic ``lock_refresh_command`` (``npm install
321
+ --package-lock-only`` — verdict (a)). A non-zero/timeout is an honest
322
+ ``environment_build_error`` → ``ok=False``.
323
+ 4. optionally MATERIALIZE node_modules with the FROZEN
324
+ ``materialize_command`` (``npm ci``) so a same-process implement-oracle
325
+ typecheck has its deps against the now-coherent lock. A materialize
326
+ failure here is the SAME honest failure verify would report (the lock is
327
+ coherent, so this should succeed); surfaced as ``ok=False``.
328
+
329
+ verify's OWN install stays a FROZEN ``npm ci`` (verdict (c)) — this function
330
+ never touches that path; it only makes the lock MATCH first.
331
+ """
332
+ root = Path(project_root)
333
+ resolved = resolve_toolchain_profile(
334
+ root,
335
+ language=language,
336
+ project_name=project_name,
337
+ source_dirs=source_dirs,
338
+ test_dirs=test_dirs,
339
+ config=config,
340
+ profile=profile,
341
+ )
342
+ if resolved is None:
343
+ return DependencyLockResult(
344
+ ok=True,
345
+ skipped=True,
346
+ detail=f"no manifest↔lock toolchain contract for language {language!r} (skipped)",
347
+ )
348
+ _profile, toolchain = resolved
349
+
350
+ manifest = root / toolchain.manifest_filename
351
+ if not manifest.is_file():
352
+ # No manifest authored (an unusual node build, or implement produced none):
353
+ # nothing to reconcile and no lock to anchor — skip, never fail.
354
+ return DependencyLockResult(
355
+ ok=True,
356
+ skipped=True,
357
+ detail=f"no {toolchain.manifest_filename} present; manifest↔lock finalization skipped",
358
+ )
359
+
360
+ # 2. Reconcile harness-owned toolchain dep versions (verdict (b)).
361
+ reconciled = reconcile_manifest_toolchain_deps(root, toolchain)
362
+ if reconciled:
363
+ summary = ", ".join(
364
+ f"{name}: {old or '<absent>'} → {new}" for name, (old, new) in sorted(reconciled.items())
365
+ )
366
+ echo(
367
+ f"[greenfield] dependency-lock: reconciled {len(reconciled)} harness-owned "
368
+ f"toolchain dep(s) in {toolchain.manifest_filename} ({summary})"
369
+ )
370
+ else:
371
+ echo(
372
+ f"[greenfield] dependency-lock: toolchain deps in {toolchain.manifest_filename} "
373
+ "already at profile versions"
374
+ )
375
+
376
+ timeout = _timeout_seconds(config)
377
+
378
+ # 3. Refresh the lock to match the reconciled manifest (verdict (a)).
379
+ refresh_cmd = toolchain.lock_refresh_command
380
+ completed = _run(refresh_cmd, root, timeout)
381
+ if completed is None:
382
+ detail = f"lock refresh timed out after {timeout:g}s: {refresh_cmd}"
383
+ echo(f"[greenfield] dependency-lock: {detail}")
384
+ return DependencyLockResult(
385
+ ok=False,
386
+ applied=True,
387
+ reconciled=reconciled,
388
+ lock_refresh_command=refresh_cmd,
389
+ detail=detail,
390
+ )
391
+ if completed.returncode != 0:
392
+ tail = _output_tail(completed.stdout, completed.stderr)
393
+ detail = f"lock refresh failed (exit {completed.returncode}): {refresh_cmd}\n{tail}".rstrip()
394
+ echo(f"[greenfield] dependency-lock: {detail}")
395
+ return DependencyLockResult(
396
+ ok=False,
397
+ applied=True,
398
+ reconciled=reconciled,
399
+ lock_refresh_command=refresh_cmd,
400
+ detail=detail,
401
+ )
402
+ echo(f"[greenfield] dependency-lock: lock refreshed to match manifest ({refresh_cmd})")
403
+
404
+ # 4. Optionally materialize node_modules with a FROZEN install so a
405
+ # same-process implement-oracle typecheck has its deps (verdict: keep frozen).
406
+ materialize_cmd = toolchain.materialize_command
407
+ if materialize_cmd:
408
+ completed = _run(materialize_cmd, root, timeout)
409
+ if completed is None:
410
+ detail = f"dependency materialize timed out after {timeout:g}s: {materialize_cmd}"
411
+ echo(f"[greenfield] dependency-lock: {detail}")
412
+ return DependencyLockResult(
413
+ ok=False,
414
+ applied=True,
415
+ reconciled=reconciled,
416
+ lock_refresh_command=refresh_cmd,
417
+ materialize_command=materialize_cmd,
418
+ detail=detail,
419
+ )
420
+ if completed.returncode != 0:
421
+ tail = _output_tail(completed.stdout, completed.stderr)
422
+ detail = (
423
+ f"dependency materialize failed (exit {completed.returncode}): "
424
+ f"{materialize_cmd}\n{tail}"
425
+ ).rstrip()
426
+ echo(f"[greenfield] dependency-lock: {detail}")
427
+ return DependencyLockResult(
428
+ ok=False,
429
+ applied=True,
430
+ reconciled=reconciled,
431
+ lock_refresh_command=refresh_cmd,
432
+ materialize_command=materialize_cmd,
433
+ detail=detail,
434
+ )
435
+ echo(f"[greenfield] dependency-lock: node_modules materialized (frozen: {materialize_cmd})")
436
+
437
+ return DependencyLockResult(
438
+ ok=True,
439
+ applied=True,
440
+ reconciled=reconciled,
441
+ lock_refresh_command=refresh_cmd,
442
+ materialize_command=materialize_cmd,
443
+ detail=(
444
+ f"reconciled {len(reconciled)} toolchain dep(s); lock refreshed via {refresh_cmd}"
445
+ + (f"; materialized via {materialize_cmd}" if materialize_cmd else "")
446
+ ),
447
+ )