codd-dev 2.25.0__tar.gz → 2.26.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 (569) hide show
  1. {codd_dev-2.25.0 → codd_dev-2.26.0}/PKG-INFO +1 -1
  2. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/__init__.py +1 -1
  3. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/greenfield/pipeline.py +260 -19
  4. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/implement_oracle.py +199 -8
  5. codd_dev-2.26.0/codd/implement_oracle_scope.py +1106 -0
  6. {codd_dev-2.25.0 → codd_dev-2.26.0}/pyproject.toml +1 -1
  7. {codd_dev-2.25.0 → codd_dev-2.26.0}/.gitignore +0 -0
  8. {codd_dev-2.25.0 → codd_dev-2.26.0}/LICENSE +0 -0
  9. {codd_dev-2.25.0 → codd_dev-2.26.0}/README.md +0 -0
  10. {codd_dev-2.25.0 → codd_dev-2.26.0}/bench_fixture/README.md +0 -0
  11. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/__main__.py +0 -0
  12. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/_git_helper.py +0 -0
  13. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/action_outcome.py +0 -0
  14. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/ai_invoke.py +0 -0
  15. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/ai_patch.py +0 -0
  16. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/artifact_contract.py +0 -0
  17. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/artifact_ids.py +0 -0
  18. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/artifacts/catalog.yaml +0 -0
  19. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/ask_user_question_adapter.py +0 -0
  20. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/assembler.py +0 -0
  21. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/bridge.py +0 -0
  22. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/brownfield/__init__.py +0 -0
  23. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/brownfield/pipeline.py +0 -0
  24. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/capability_completeness.py +0 -0
  25. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/claude_cli.py +0 -0
  26. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/cli.py +0 -0
  27. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/clustering.py +0 -0
  28. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/coherence_adapters.py +0 -0
  29. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/coherence_engine.py +0 -0
  30. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/confidence.py +0 -0
  31. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/config.py +0 -0
  32. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/config_schema.py +0 -0
  33. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/contracts.py +0 -0
  34. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/coverage_auditor.py +0 -0
  35. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/coverage_metrics.py +0 -0
  36. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/__init__.py +0 -0
  37. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/auto_repair.py +0 -0
  38. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/builder.py +0 -0
  39. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/__init__.py +0 -0
  40. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
  41. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/artifact_contract_check.py +0 -0
  42. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/ci_health.py +0 -0
  43. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/dependency_freshness.py +0 -0
  44. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/depends_on_consistency.py +0 -0
  45. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/deployment_completeness.py +0 -0
  46. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/edge_validity.py +0 -0
  47. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/environment_coverage.py +0 -0
  48. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/implementation_coverage.py +0 -0
  49. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/node_completeness.py +0 -0
  50. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/opt_out.py +0 -0
  51. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/task_completion.py +0 -0
  52. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/transitive_closure.py +0 -0
  53. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/ui_coherence.py +0 -0
  54. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/checks/user_journey_coherence.py +0 -0
  55. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/coverage_axes.py +0 -0
  56. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/defaults/cli.yaml +0 -0
  57. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
  58. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/defaults/csharp.yaml +0 -0
  59. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/defaults/elixir.yaml +0 -0
  60. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/defaults/generic.yaml +0 -0
  61. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/defaults/iot.yaml +0 -0
  62. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/defaults/java.yaml +0 -0
  63. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/defaults/kotlin.yaml +0 -0
  64. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/defaults/mobile.yaml +0 -0
  65. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/defaults/ruby.yaml +0 -0
  66. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/defaults/rust.yaml +0 -0
  67. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/defaults/scala.yaml +0 -0
  68. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/defaults/swift.yaml +0 -0
  69. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
  70. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/defaults/web.yaml +0 -0
  71. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/extractor.py +0 -0
  72. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/impact.py +0 -0
  73. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/dag/runner.py +0 -0
  74. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/defaults.py +0 -0
  75. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/defaults.yaml +0 -0
  76. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deploy_targets/__init__.py +0 -0
  77. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deploy_targets/app_service.py +0 -0
  78. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deploy_targets/base.py +0 -0
  79. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deploy_targets/docker_compose.py +0 -0
  80. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployer.py +0 -0
  81. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/__init__.py +0 -0
  82. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/checks/__init__.py +0 -0
  83. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
  84. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
  85. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
  86. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
  87. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/extractor.py +0 -0
  88. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/__init__.py +0 -0
  89. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/ai_command.py +0 -0
  90. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/ai_command_factory.py +0 -0
  91. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/codex_app_server.py +0 -0
  92. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/llm_consideration.py +0 -0
  93. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/schema/__init__.py +0 -0
  94. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/schema/prisma.py +0 -0
  95. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/target/__init__.py +0 -0
  96. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/target/docker_compose.py +0 -0
  97. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/verification/__init__.py +0 -0
  98. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
  99. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
  100. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
  101. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
  102. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
  103. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/verification/curl.py +0 -0
  104. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
  105. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
  106. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/verification/playwright.py +0 -0
  107. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/deployment/providers/verification/vitest.py +0 -0
  108. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/design_md.py +0 -0
  109. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/diff/__init__.py +0 -0
  110. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/diff/apply.py +0 -0
  111. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/diff/engine.py +0 -0
  112. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/diff/persistence.py +0 -0
  113. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/diff/templates/diff_prompt.md +0 -0
  114. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/discovery.py +0 -0
  115. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/drift.py +0 -0
  116. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/e2e_contract_coherence.py +0 -0
  117. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/e2e_extractor.py +0 -0
  118. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/e2e_generator.py +0 -0
  119. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/e2e_runner.py +0 -0
  120. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/elicit/__init__.py +0 -0
  121. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/elicit/apply.py +0 -0
  122. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/elicit/engine.py +0 -0
  123. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/elicit/finding.py +0 -0
  124. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/elicit/formatters/__init__.py +0 -0
  125. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/elicit/formatters/base.py +0 -0
  126. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/elicit/formatters/interactive.py +0 -0
  127. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/elicit/formatters/json_fmt.py +0 -0
  128. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/elicit/formatters/md.py +0 -0
  129. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/elicit/lexicon_loader.py +0 -0
  130. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/elicit/persistence.py +0 -0
  131. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
  132. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/env_refs.py +0 -0
  133. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/extract_ai.py +0 -0
  134. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/extract_paths.py +0 -0
  135. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/extractor.py +0 -0
  136. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fix/__init__.py +0 -0
  137. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fix/candidate_selector.py +0 -0
  138. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fix/design_updater.py +0 -0
  139. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fix/impl_propagation.py +0 -0
  140. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fix/interactive_prompt.py +0 -0
  141. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fix/phenomenon_fixer.py +0 -0
  142. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fix/phenomenon_parser.py +0 -0
  143. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fix/risk_classifier.py +0 -0
  144. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fix/templates/clarification_question.txt +0 -0
  145. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fix/templates/design_update.txt +0 -0
  146. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fix/templates/impl_update.txt +0 -0
  147. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
  148. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fix/templates/risk_assessment.txt +0 -0
  149. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fix/templates_loader.py +0 -0
  150. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fixer.py +0 -0
  151. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fixup_drift.py +0 -0
  152. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fixup_drift_strategies/__init__.py +0 -0
  153. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
  154. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
  155. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
  156. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/frontmatter.py +0 -0
  157. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/generator.py +0 -0
  158. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/git_evidence.py +0 -0
  159. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/graph.py +0 -0
  160. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/greenfield/__init__.py +0 -0
  161. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/hitl_session.py +0 -0
  162. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/hooks/__init__.py +0 -0
  163. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/hooks/pre-commit +0 -0
  164. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
  165. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
  166. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/hooks/recipes/codex_hook.sh +0 -0
  167. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
  168. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
  169. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/iac_nfr.py +0 -0
  170. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/implementer/__init__.py +0 -0
  171. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/implementer/chunked_runner.py +0 -0
  172. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/implementer/typecheck_loop.py +0 -0
  173. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/implementer.py +0 -0
  174. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/import_coherence.py +0 -0
  175. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/inheritance.py +0 -0
  176. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/init/__init__.py +0 -0
  177. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/init/lexicon_suggest.py +0 -0
  178. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/init/llm_lexicon_suggester.py +0 -0
  179. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/init/stack_detector.py +0 -0
  180. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/knowledge_fetcher.py +0 -0
  181. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/lexicon.py +0 -0
  182. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/lexicon_cli/__init__.py +0 -0
  183. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
  184. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/lexicon_cli/formatters/html.py +0 -0
  185. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
  186. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/lexicon_cli/formatters/md.py +0 -0
  187. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/lexicon_cli/inspector.py +0 -0
  188. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/lexicon_cli/manager.py +0 -0
  189. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/lexicon_cli/reporter.py +0 -0
  190. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/lexicon_cli/threshold.py +0 -0
  191. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/__init__.py +0 -0
  192. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/approval.py +0 -0
  193. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/best_practice_augmenter.py +0 -0
  194. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/criteria_expander.py +0 -0
  195. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/design_doc_extractor.py +0 -0
  196. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/impl_step_deriver.py +0 -0
  197. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/means_catalog_loader.py +0 -0
  198. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/parser.py +0 -0
  199. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/plan_deriver.py +0 -0
  200. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/prompt_builder.py +0 -0
  201. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/strategy_validator.py +0 -0
  202. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
  203. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
  204. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
  205. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
  206. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
  207. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/templates/meta_instruction.md +0 -0
  208. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/templates/plan_derive_meta.md +0 -0
  209. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
  210. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/mcp_server.py +0 -0
  211. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/measure.py +0 -0
  212. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/operational_e2e_audit.py +0 -0
  213. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/operations_derive.py +0 -0
  214. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/parsing/__init__.py +0 -0
  215. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/parsing/_shared.py +0 -0
  216. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/parsing/api_specs.py +0 -0
  217. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/parsing/filesystem_routes.py +0 -0
  218. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/parsing/iac.py +0 -0
  219. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/parsing/python_ast.py +0 -0
  220. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/parsing/schemas.py +0 -0
  221. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/parsing/tests_builddeps.py +0 -0
  222. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/parsing/treesitter.py +0 -0
  223. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/planner.py +0 -0
  224. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/policy.py +0 -0
  225. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/preflight/__init__.py +0 -0
  226. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/preflight/defaults/cli.yaml +0 -0
  227. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/preflight/defaults/generic.yaml +0 -0
  228. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/preflight/defaults/iot.yaml +0 -0
  229. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/preflight/defaults/mobile.yaml +0 -0
  230. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/preflight/defaults/web.yaml +0 -0
  231. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/project_types.py +0 -0
  232. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/propagate.py +0 -0
  233. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/propagation_common.py +0 -0
  234. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/propagator.py +0 -0
  235. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/reconciliation_ledger.py +0 -0
  236. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/registry.py +0 -0
  237. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/__init__.py +0 -0
  238. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/approval_repair.py +0 -0
  239. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/auto_scope_guard.py +0 -0
  240. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/engine.py +0 -0
  241. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/git_patcher.py +0 -0
  242. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/history.py +0 -0
  243. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/llm_repair_engine.py +0 -0
  244. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/loop.py +0 -0
  245. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/primary_picker.py +0 -0
  246. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/proof_breaks.py +0 -0
  247. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/repair_result.py +0 -0
  248. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/repairability_classifier.py +0 -0
  249. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/schema.py +0 -0
  250. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/templates/analyze_meta.md +0 -0
  251. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/templates/propose_meta.md +0 -0
  252. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
  253. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/templates/repairability_meta.md +0 -0
  254. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/test_failure_attribution.py +0 -0
  255. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair/verify_runner.py +0 -0
  256. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/repair_slice.py +0 -0
  257. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/require.py +0 -0
  258. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/require_plugins.py +0 -0
  259. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/require_propagate.py +0 -0
  260. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
  261. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
  262. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
  263. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
  264. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/required_artifacts/defaults/web.yaml +0 -0
  265. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/required_artifacts_deriver.py +0 -0
  266. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
  267. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
  268. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
  269. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
  270. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
  271. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/requirement_completeness_auditor.py +0 -0
  272. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/requirement_reconciliation.py +0 -0
  273. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/requirements_meta.py +0 -0
  274. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/restoration_report.py +0 -0
  275. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/restore.py +0 -0
  276. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/routes_extractor.py +0 -0
  277. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/runtime_smoke/__init__.py +0 -0
  278. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/runtime_smoke/checks.py +0 -0
  279. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/runtime_smoke/config.py +0 -0
  280. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/runtime_smoke/report.py +0 -0
  281. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/runtime_smoke/runner.py +0 -0
  282. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/scanner.py +0 -0
  283. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/schema_refs.py +0 -0
  284. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/screen_flow_validator.py +0 -0
  285. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/screen_transition_extractor.py +0 -0
  286. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/screen_transitions/defaults.yaml +0 -0
  287. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/skills_cli/__init__.py +0 -0
  288. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/skills_cli/discovery.py +0 -0
  289. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/skills_cli/manager.py +0 -0
  290. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/skills_cli/paths.py +0 -0
  291. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/surface_reconciliation.py +0 -0
  292. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/synth.py +0 -0
  293. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/templates/codd.yaml.tmpl +0 -0
  294. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/templates/conventions.yaml.tmpl +0 -0
  295. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
  296. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/templates/doc_links.yaml.tmpl +0 -0
  297. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
  298. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
  299. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
  300. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
  301. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
  302. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/templates/extracted/system-context.md.j2 +0 -0
  303. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/templates/gitignore.tmpl +0 -0
  304. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/templates/lexicon_questions.md +0 -0
  305. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/templates/lexicon_schema.yaml +0 -0
  306. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/templates/overrides.yaml.tmpl +0 -0
  307. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/test_detection.py +0 -0
  308. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/test_import_coherence.py +0 -0
  309. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/traceability.py +0 -0
  310. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/validator.py +0 -0
  311. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/verifiable_behavior_audit.py +0 -0
  312. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/watch/__init__.py +0 -0
  313. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/watch/events.py +0 -0
  314. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/watch/propagation_log.py +0 -0
  315. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/watch/propagation_pipeline.py +0 -0
  316. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/watch/test_runner.py +0 -0
  317. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/watch/watcher.py +0 -0
  318. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd/wiring.py +0 -0
  319. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
  320. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
  321. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
  322. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
  323. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
  324. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
  325. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
  326. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
  327. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
  328. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
  329. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
  330. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
  331. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
  332. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
  333. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
  334. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
  335. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
  336. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
  337. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
  338. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
  339. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
  340. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
  341. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
  342. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
  343. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
  344. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
  345. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
  346. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
  347. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
  348. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
  349. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
  350. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
  351. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
  352. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
  353. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
  354. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
  355. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
  356. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
  357. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
  358. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
  359. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
  360. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
  361. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
  362. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
  363. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
  364. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
  365. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
  366. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
  367. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
  368. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
  369. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
  370. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
  371. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
  372. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
  373. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
  374. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
  375. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
  376. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
  377. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
  378. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
  379. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
  380. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
  381. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
  382. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
  383. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
  384. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
  385. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
  386. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
  387. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
  388. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
  389. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
  390. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
  391. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
  392. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
  393. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
  394. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
  395. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
  396. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
  397. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
  398. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
  399. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
  400. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
  401. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
  402. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
  403. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
  404. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
  405. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
  406. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
  407. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
  408. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
  409. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
  410. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
  411. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
  412. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
  413. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
  414. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
  415. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
  416. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
  417. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
  418. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
  419. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
  420. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
  421. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
  422. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
  423. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
  424. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
  425. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
  426. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
  427. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
  428. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
  429. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
  430. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
  431. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
  432. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
  433. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
  434. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
  435. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
  436. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
  437. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
  438. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
  439. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
  440. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
  441. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
  442. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
  443. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
  444. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
  445. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
  446. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
  447. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
  448. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
  449. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
  450. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
  451. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
  452. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
  453. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
  454. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
  455. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
  456. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
  457. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
  458. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
  459. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
  460. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
  461. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
  462. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
  463. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
  464. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
  465. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
  466. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
  467. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
  468. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
  469. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
  470. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
  471. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
  472. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
  473. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
  474. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
  475. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
  476. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
  477. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
  478. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
  479. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
  480. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
  481. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
  482. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
  483. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
  484. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
  485. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
  486. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
  487. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
  488. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
  489. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
  490. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
  491. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
  492. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
  493. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
  494. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
  495. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
  496. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
  497. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
  498. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
  499. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
  500. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
  501. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
  502. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
  503. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
  504. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
  505. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
  506. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
  507. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
  508. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
  509. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
  510. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
  511. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
  512. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
  513. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
  514. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
  515. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
  516. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
  517. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
  518. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
  519. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
  520. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
  521. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
  522. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
  523. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
  524. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
  525. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
  526. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
  527. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
  528. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
  529. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
  530. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
  531. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
  532. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
  533. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
  534. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
  535. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
  536. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
  537. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
  538. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
  539. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
  540. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
  541. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
  542. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
  543. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
  544. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
  545. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
  546. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
  547. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
  548. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
  549. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
  550. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
  551. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
  552. {codd_dev-2.25.0 → codd_dev-2.26.0}/codd_plugins/stack_map.yaml +0 -0
  553. {codd_dev-2.25.0 → codd_dev-2.26.0}/docs/cookbook/cdp_browser/README.md +0 -0
  554. {codd_dev-2.25.0 → codd_dev-2.26.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
  555. {codd_dev-2.25.0 → codd_dev-2.26.0}/docs/requirements/README.md +0 -0
  556. {codd_dev-2.25.0 → codd_dev-2.26.0}/dogfood/README.md +0 -0
  557. {codd_dev-2.25.0 → codd_dev-2.26.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
  558. {codd_dev-2.25.0 → codd_dev-2.26.0}/examples/README.md +0 -0
  559. {codd_dev-2.25.0 → codd_dev-2.26.0}/skills/codd-assemble/SKILL.md +0 -0
  560. {codd_dev-2.25.0 → codd_dev-2.26.0}/skills/codd-evolve/SKILL.md +0 -0
  561. {codd_dev-2.25.0 → codd_dev-2.26.0}/skills/codd-generate/SKILL.md +0 -0
  562. {codd_dev-2.25.0 → codd_dev-2.26.0}/skills/codd-greenfield/SKILL.md +0 -0
  563. {codd_dev-2.25.0 → codd_dev-2.26.0}/skills/codd-impact/SKILL.md +0 -0
  564. {codd_dev-2.25.0 → codd_dev-2.26.0}/skills/codd-init/SKILL.md +0 -0
  565. {codd_dev-2.25.0 → codd_dev-2.26.0}/skills/codd-propagate/SKILL.md +0 -0
  566. {codd_dev-2.25.0 → codd_dev-2.26.0}/skills/codd-restore/SKILL.md +0 -0
  567. {codd_dev-2.25.0 → codd_dev-2.26.0}/skills/codd-scan/SKILL.md +0 -0
  568. {codd_dev-2.25.0 → codd_dev-2.26.0}/skills/codd-validate/SKILL.md +0 -0
  569. {codd_dev-2.25.0 → codd_dev-2.26.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.26.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.26.0"
@@ -741,14 +741,16 @@ class GreenfieldPipeline:
741
741
  Ensures the stack topology is scaffolded first (idempotent — the same
742
742
  ``_ensure_test_runner`` verify uses), so the oracle's config (tsconfig)
743
743
  exists to certify and run against AT implement-time. Then runs the gate
744
- with a ``rerun(feedback)`` callback that re-invokes implementation for
745
- every task carrying the normalized oracle feedback (the cross-file
746
- incoherence is not localized to one task, so the whole build is
747
- regenerated under the feedback — the same broad-rerun shape the VB
748
- coverage gate uses). A non-passing final result is a StageError; an
749
- uncertifiable oracle scope (OracleScopeError) propagates as a hard
750
- failure. The whole gate is a NO-OP for a stack without a declared
751
- implement-time oracle.
744
+ with a SCOPED ``rerun(feedback, scope)`` callback: on an oracle failure
745
+ the gate derives the both-ends-of-the-broken-edge scope and re-implements
746
+ ONLY the owning tasks (under a write-fence), escalating
747
+ narrow→expanded→broad only when the diagnostic signature fails to move
748
+ (see ``codd.implement_oracle_scope`` + ``run_implement_oracle_gate``).
749
+ ``scope is None`` ⇒ the broad fallback (re-implement every task the
750
+ legacy shape the VB coverage gate uses). A non-passing final result is a
751
+ StageError; an uncertifiable oracle scope (OracleScopeError) propagates
752
+ as a hard failure. The whole gate is a NO-OP for a stack without a
753
+ declared implement-time oracle.
752
754
  """
753
755
  from codd.implement_oracle import (
754
756
  OracleScopeError,
@@ -776,8 +778,14 @@ class GreenfieldPipeline:
776
778
  # clobbering, so verify's re-scaffold is a no-op.
777
779
  self._ensure_test_runner(project_root)
778
780
 
779
- def _rerun(feedback: str) -> None:
780
- self._rerun_tasks_with_feedback(project_root, tasks, feedback, options)
781
+ # The path→owning-task index for the SCOPED rerun: declared task outputs
782
+ # UNION the config-derived output paths. Built once; the gate consults it
783
+ # to localize each rerun to the diagnostics' owners.
784
+ scope_index = self._build_oracle_scope_index(project_root, tasks, config)
785
+ manifest_paths = self._oracle_manifest_paths(project_root)
786
+
787
+ def _rerun(feedback: str, scope: Any = None) -> None:
788
+ self._rerun_tasks_with_feedback(project_root, tasks, feedback, options, scope=scope)
781
789
 
782
790
  try:
783
791
  result = run_implement_oracle_gate(
@@ -789,6 +797,8 @@ class GreenfieldPipeline:
789
797
  config=config,
790
798
  rerun=_rerun,
791
799
  echo=self.echo,
800
+ scope_index=scope_index,
801
+ manifest_paths=manifest_paths,
792
802
  )
793
803
  except OracleScopeError as exc:
794
804
  raise StageError(str(exc)) from exc
@@ -802,29 +812,122 @@ class GreenfieldPipeline:
802
812
  f"{result.category_counts()}. {result.detail}"
803
813
  )
804
814
 
815
+ def _build_oracle_scope_index(
816
+ self,
817
+ project_root: Path,
818
+ tasks: list[ImplementTaskRef],
819
+ config: dict[str, Any],
820
+ ) -> Any:
821
+ """Build the path→owning-task index used to scope an oracle rerun.
822
+
823
+ Unions each task's DECLARED ``output_paths`` with its CONFIG-derived
824
+ output paths (``_output_paths_for_task`` — the same resolution the rerun
825
+ itself uses), so a diagnostic on any owned file/dir maps back to the task
826
+ that wrote it. A failure to build the index degrades the gate to the
827
+ broad rerun (``None`` → ``scope_index`` unset), never aborts.
828
+ """
829
+ try:
830
+ from codd.implement_oracle_scope import build_path_owner_index
831
+
832
+ config_output_paths: dict[str, list[str]] = {}
833
+ for task in tasks:
834
+ try:
835
+ config_output_paths[task.task_id] = (
836
+ list(task.output_paths)
837
+ if task.output_paths
838
+ else _output_paths_for_task(config, task)
839
+ )
840
+ except Exception: # noqa: BLE001 — a task whose paths fail just falls to broad.
841
+ config_output_paths[task.task_id] = list(task.output_paths or ())
842
+ return build_path_owner_index(
843
+ tasks,
844
+ project_root=project_root,
845
+ config=config,
846
+ config_output_paths=config_output_paths,
847
+ )
848
+ except Exception as exc: # noqa: BLE001 — index build is best-effort.
849
+ self.echo(f"[greenfield] implement-oracle: scope index unavailable ({exc}); rerun stays broad.")
850
+ return None
851
+
852
+ def _oracle_manifest_paths(self, project_root: Path) -> tuple[str, ...]:
853
+ """Manifest/config files the write-fence always permits (they are shared).
854
+
855
+ A scoped rerun may legitimately touch the build manifest/config even when
856
+ no task "owns" it (e.g. adding a dependency the fix needs). Only files
857
+ that actually exist are listed, project-relative.
858
+ """
859
+ candidates = (
860
+ "package.json",
861
+ "tsconfig.json",
862
+ "package-lock.json",
863
+ "pnpm-lock.yaml",
864
+ "yarn.lock",
865
+ )
866
+ present: list[str] = []
867
+ for name in candidates:
868
+ if (project_root / name).is_file():
869
+ present.append(name)
870
+ return tuple(present)
871
+
805
872
  def _rerun_tasks_with_feedback(
806
873
  self,
807
874
  project_root: Path,
808
875
  tasks: list[ImplementTaskRef],
809
876
  feedback: str,
810
877
  options: dict[str, Any],
878
+ *,
879
+ scope: Any = None,
811
880
  ) -> None:
812
- """Re-invoke implementation for every task carrying ``feedback``.
813
-
814
- Routes through the SAME implement path the stage uses
815
- (``implement_tasks`` with the resolved output paths), threading the
816
- normalized oracle feedback so the SUT regenerates coherent files. Uses
817
- the configured implement-task runner only when it is the default
818
- (feedback-aware path); a custom injected runner has no feedback channel,
819
- so this falls back to ``implement_tasks`` directly.
881
+ """Re-invoke implementation under ``feedback`` SCOPED when ``scope`` set.
882
+
883
+ ``scope is None`` (or a broad scope) → re-implement EVERY task (the
884
+ legacy broad rerun). A scoped :class:`~codd.implement_oracle_scope.OracleRerunScope`
885
+ re-implement ONLY its ``task_ids``, under a WRITE-FENCE: out-of-scope
886
+ files the SUT writes during the scoped rerun are reverted afterwards (an
887
+ out-of-scope CREATE is removed, an out-of-scope MODIFY is restored), so a
888
+ "targeted" rerun cannot silently regenerate the whole tree. The fence is
889
+ OFF for a broad rerun (broad legitimately rewrites everything).
890
+
891
+ Routes through the SAME implement path the stage uses (``implement_tasks``
892
+ with the resolved output paths), threading the normalized oracle feedback
893
+ so the SUT regenerates coherent files.
820
894
  """
821
895
  from codd.config import load_project_config
822
- from codd.implementer import implement_tasks
823
896
 
824
897
  try:
825
898
  config = load_project_config(project_root)
826
899
  except (FileNotFoundError, ValueError):
827
900
  config = {}
901
+
902
+ scoped = scope is not None and not bool(getattr(scope, "is_broad", lambda: False)())
903
+ if not scoped:
904
+ self._reimplement_tasks(project_root, tasks, feedback, config)
905
+ return
906
+
907
+ # Scoped rerun: only the scope's tasks, fenced to its allowed paths.
908
+ target_ids = set(getattr(scope, "task_ids", ()) or ())
909
+ scoped_tasks = [task for task in tasks if task.task_id in target_ids]
910
+ if not scoped_tasks:
911
+ # Nothing resolvable in this scope (defensive) → broad, never a no-op.
912
+ self.echo("[greenfield] implement-oracle: scoped task set empty — re-running broad.")
913
+ self._reimplement_tasks(project_root, tasks, feedback, config)
914
+ return
915
+
916
+ allowed = tuple(getattr(scope, "allowed_paths", ()) or ())
917
+ with _OracleWriteFence(project_root, allowed_paths=allowed, echo=self.echo) as fence:
918
+ self._reimplement_tasks(project_root, scoped_tasks, feedback, config)
919
+ fence.enforce()
920
+
921
+ def _reimplement_tasks(
922
+ self,
923
+ project_root: Path,
924
+ tasks: list[ImplementTaskRef],
925
+ feedback: str,
926
+ config: dict[str, Any],
927
+ ) -> None:
928
+ """Re-run ``implement_tasks`` for each given task carrying ``feedback``."""
929
+ from codd.implementer import implement_tasks
930
+
828
931
  for task in tasks:
829
932
  output_paths = (
830
933
  list(task.output_paths)
@@ -1253,6 +1356,144 @@ def _default_generate_wave_runner(project_root: Path, wave: int, *, ai_command:
1253
1356
  return f"{generated} generated, {len(results) - generated} skipped"
1254
1357
 
1255
1358
 
1359
+ #: Directories never snapshotted/fenced — vendored deps, VCS, the codd cache,
1360
+ #: build output. A write here is not a SUT source-write the fence governs.
1361
+ _FENCE_EXCLUDE_DIRS = frozenset(
1362
+ {"node_modules", ".git", ".codd", ".hg", ".svn", "dist", "build", "__pycache__", ".pytest_cache"}
1363
+ )
1364
+ #: Source/test file suffixes the fence tracks. Restricting to code keeps the
1365
+ #: snapshot cheap and avoids fighting tooling that touches caches/logs.
1366
+ _FENCE_TRACKED_SUFFIXES = frozenset(
1367
+ {".ts", ".tsx", ".mts", ".cts", ".js", ".jsx", ".mjs", ".cjs", ".py", ".json"}
1368
+ )
1369
+
1370
+
1371
+ class _OracleWriteFence:
1372
+ """Restrict a SCOPED oracle rerun's writes to the scope's ``allowed_paths``.
1373
+
1374
+ Re-implementing only the scoped tasks does NOT stop the SUT from writing
1375
+ OUT-of-scope files (the design's #1 implementation note). The fence snapshots
1376
+ the tracked source/test tree on entry; on :meth:`enforce` it reverts every
1377
+ out-of-scope change made during the rerun — an out-of-scope CREATE is deleted,
1378
+ an out-of-scope MODIFY is restored to its pre-rerun bytes. In-scope writes
1379
+ (under an allowed file/dir, or a manifest/config) pass untouched. This makes
1380
+ a "targeted" rerun genuinely local: it cannot silently regenerate the tree.
1381
+
1382
+ ``allowed_paths`` entries are matched as exact files OR directory prefixes
1383
+ (a task that owns ``src/`` may write any file under ``src/``). An EMPTY
1384
+ allow-set means "no fence" (the broad rerun's signal) and the caller does not
1385
+ construct a fence in that case.
1386
+ """
1387
+
1388
+ def __init__(self, project_root: Path, *, allowed_paths: tuple[str, ...], echo: Callable[[str], str]):
1389
+ self._root = Path(project_root).resolve()
1390
+ self._allowed_files, self._allowed_dirs = self._split_allowed(allowed_paths)
1391
+ self._echo = echo
1392
+ self._snapshot: dict[str, bytes] = {}
1393
+
1394
+ def __enter__(self) -> "_OracleWriteFence":
1395
+ self._snapshot = self._capture()
1396
+ return self
1397
+
1398
+ def __exit__(self, *_exc: Any) -> None:
1399
+ # The fence does not suppress exceptions; enforce() is called explicitly
1400
+ # by the caller on the SUCCESS path so a failing rerun's exception still
1401
+ # propagates with the tree left for the caller's error handling.
1402
+ return None
1403
+
1404
+ def enforce(self) -> None:
1405
+ """Revert every out-of-scope create/modify made since entry."""
1406
+ current = self._capture()
1407
+ reverted_modified: list[str] = []
1408
+ reverted_created: list[str] = []
1409
+
1410
+ # Reverts for modified/created files.
1411
+ for rel, content in current.items():
1412
+ if self._is_allowed(rel):
1413
+ continue
1414
+ if rel in self._snapshot:
1415
+ if self._snapshot[rel] != content:
1416
+ self._restore(rel, self._snapshot[rel])
1417
+ reverted_modified.append(rel)
1418
+ else:
1419
+ self._remove(rel)
1420
+ reverted_created.append(rel)
1421
+
1422
+ # Re-create any tracked file the scoped rerun DELETED out of scope (a
1423
+ # deletion is also an out-of-scope mutation we must undo).
1424
+ reverted_deleted: list[str] = []
1425
+ for rel, content in self._snapshot.items():
1426
+ if rel in current or self._is_allowed(rel):
1427
+ continue
1428
+ self._restore(rel, content)
1429
+ reverted_deleted.append(rel)
1430
+
1431
+ total = len(reverted_modified) + len(reverted_created) + len(reverted_deleted)
1432
+ if total:
1433
+ self._echo(
1434
+ "[greenfield] implement-oracle: write-fence reverted "
1435
+ f"{total} out-of-scope change(s) "
1436
+ f"(modified={len(reverted_modified)}, created={len(reverted_created)}, "
1437
+ f"deleted={len(reverted_deleted)}); the scoped rerun is kept local."
1438
+ )
1439
+
1440
+ # ── internals ──
1441
+ @staticmethod
1442
+ def _split_allowed(allowed_paths: tuple[str, ...]) -> tuple[set[str], list[str]]:
1443
+ files: set[str] = set()
1444
+ dirs: list[str] = []
1445
+ for raw in allowed_paths:
1446
+ norm = str(raw).strip().replace("\\", "/").strip("/")
1447
+ if not norm:
1448
+ continue
1449
+ if PurePosixPath(norm).suffix:
1450
+ files.add(norm)
1451
+ else:
1452
+ dirs.append(norm)
1453
+ return files, dirs
1454
+
1455
+ def _is_allowed(self, rel: str) -> bool:
1456
+ if rel in self._allowed_files:
1457
+ return True
1458
+ for directory in self._allowed_dirs:
1459
+ if rel == directory or rel.startswith(directory + "/"):
1460
+ return True
1461
+ return False
1462
+
1463
+ def _capture(self) -> dict[str, bytes]:
1464
+ out: dict[str, bytes] = {}
1465
+ for path in self._iter_tracked_files():
1466
+ try:
1467
+ out[path.relative_to(self._root).as_posix()] = path.read_bytes()
1468
+ except OSError:
1469
+ continue
1470
+ return out
1471
+
1472
+ def _iter_tracked_files(self):
1473
+ import os
1474
+
1475
+ for dirpath, dirnames, filenames in os.walk(self._root):
1476
+ dirnames[:] = [d for d in dirnames if d not in _FENCE_EXCLUDE_DIRS]
1477
+ for name in filenames:
1478
+ if PurePosixPath(name).suffix in _FENCE_TRACKED_SUFFIXES:
1479
+ yield Path(dirpath) / name
1480
+
1481
+ def _restore(self, rel: str, content: bytes) -> None:
1482
+ target = self._root / rel
1483
+ try:
1484
+ target.parent.mkdir(parents=True, exist_ok=True)
1485
+ target.write_bytes(content)
1486
+ except OSError as exc:
1487
+ self._echo(f"[greenfield] implement-oracle: write-fence could not restore {rel} ({exc}).")
1488
+
1489
+ def _remove(self, rel: str) -> None:
1490
+ target = self._root / rel
1491
+ try:
1492
+ target.unlink()
1493
+ except OSError as exc:
1494
+ self._echo(f"[greenfield] implement-oracle: write-fence could not remove {rel} ({exc}).")
1495
+
1496
+
1256
1497
  def _default_task_lister(project_root: Path) -> list[ImplementTaskRef]:
1257
1498
  from codd.implementer import list_implement_tasks
1258
1499
 
@@ -92,6 +92,7 @@ __all__ = [
92
92
  "EVIDENCE_CATEGORIES",
93
93
  "ImplementOracleFinding",
94
94
  "ImplementOracleResult",
95
+ "OracleRerunCallback",
95
96
  "OracleScopeError",
96
97
  "certify_oracle_scope",
97
98
  "normalize_oracle_output",
@@ -197,6 +198,12 @@ class ImplementOracleResult:
197
198
  failed_paths: list[str] = field(default_factory=list)
198
199
  detail: str = ""
199
200
  raw_output: str = ""
201
+ #: Structured diagnostics (code + primary file + symbol/module) for the SCOPED
202
+ #: rerun derivation + the loop-breaking signature. Empty for a pass / for a
203
+ #: non-TS oracle. Kept separate from ``findings`` (the SUT-facing normalized
204
+ #: evidence) because scope derivation needs the per-diagnostic counterpart
205
+ #: keys, not the language-neutral category. See ``codd.implement_oracle_scope``.
206
+ diagnostics: list[Any] = field(default_factory=list)
200
207
 
201
208
  def category_counts(self) -> dict[str, int]:
202
209
  counts: dict[str, int] = {}
@@ -724,6 +731,16 @@ def _run_oracle_command(
724
731
  message=(_output_tail(completed.stdout, completed.stderr) or "non-zero exit, no diagnostics"),
725
732
  )
726
733
  ]
734
+ # Structured diagnostics for the scoped rerun + the loop-breaking signature.
735
+ # Best-effort: a parser failure must never abort the gate (the scope layer
736
+ # degrades to broad on empty diagnostics).
737
+ diagnostics: list[Any] = []
738
+ try:
739
+ from codd.implement_oracle_scope import _parse_ts_diagnostics
740
+
741
+ diagnostics = _parse_ts_diagnostics(full_output, project_root)
742
+ except Exception: # noqa: BLE001 — structured-diag parsing is enrichment only.
743
+ diagnostics = []
727
744
  return ImplementOracleResult(
728
745
  passed=False,
729
746
  executed=True,
@@ -732,6 +749,7 @@ def _run_oracle_command(
732
749
  failed_paths=failed_paths,
733
750
  detail=f"native oracle failed (exit {completed.returncode}); {len(findings)} diagnostic(s)",
734
751
  raw_output=full_output,
752
+ diagnostics=diagnostics,
735
753
  )
736
754
 
737
755
 
@@ -778,6 +796,16 @@ def resolve_implement_oracle(
778
796
  return profile, profile.implement_oracle
779
797
 
780
798
 
799
+ #: The rerun callback the gate invokes to re-implement under the oracle feedback.
800
+ #: ``scope is None`` ⇒ BROAD rerun (re-implement every task — the escalation
801
+ #: fallback, the legacy behaviour). A non-None ``OracleRerunScope`` ⇒ a SCOPED
802
+ #: rerun (re-implement only the scope's tasks, under its write-fence). The second
803
+ #: positional is kept optional in spirit — a callback that ignores it falls back
804
+ #: to broad, preserving back-compat for any plain ``Callable[[str], None]`` only
805
+ #: if it accepts the extra arg; the pipeline's callback consumes the scope.
806
+ OracleRerunCallback = Callable[[str, "Any"], None]
807
+
808
+
781
809
  def run_implement_oracle_gate(
782
810
  project_root: Path | str,
783
811
  *,
@@ -786,9 +814,12 @@ def run_implement_oracle_gate(
786
814
  source_dirs: Any = None,
787
815
  test_dirs: Any = None,
788
816
  config: Mapping[str, Any] | None = None,
789
- rerun: Callable[[str], None] | None = None,
817
+ rerun: OracleRerunCallback | Callable[[str], None] | None = None,
790
818
  echo: Callable[[str], None] = print,
791
819
  profile: LayoutProfile | None = None,
820
+ scope_index: Any = None,
821
+ structured_source: Any = None,
822
+ manifest_paths: Any = None,
792
823
  ) -> ImplementOracleResult:
793
824
  """Run the implement-time native-oracle gate (stage-level, once).
794
825
 
@@ -799,10 +830,26 @@ def run_implement_oracle_gate(
799
830
  install failure is an honest ``environment_build_error`` (no retry).
800
831
  3. CERTIFY the oracle scope covers source + tests (raises
801
832
  :class:`OracleScopeError` on an uncertifiable scope — anti-false-green).
802
- 4. Run the oracle. On failure, normalize the diagnostics and, if a
803
- ``rerun(feedback)`` callback is provided, re-invoke implementation with
804
- the normalized feedback up to a bounded cap, re-running the oracle each
805
- time. Returns the FINAL result (``passed`` True iff the oracle is clean).
833
+ 4. Run the oracle. On failure, derive a SCOPED rerun and re-invoke
834
+ implementation through ``rerun(feedback, scope)`` up to a bounded cap,
835
+ re-running the oracle each time. Returns the FINAL result.
836
+
837
+ SCOPED RERUN + ESCALATION LADDER (the localized-rerun design)
838
+ -------------------------------------------------------------
839
+ A broad rerun (regenerate every task) is correct but slow. When a
840
+ ``scope_index`` (a ``codd.implement_oracle_scope.TaskOutputIndex``, the
841
+ path→owning-task map) is supplied, the gate derives the BOTH-ENDS-OF-THE-
842
+ BROKEN-EDGE scope from the diagnostics and re-implements only those tasks.
843
+ Broad is DEMOTED to a fallback rung. The ladder — driven by the diagnostic
844
+ SIGNATURE (the loop-breaker) — is:
845
+
846
+ narrow edge scope → expanded one-hop scope → broad → fail honestly
847
+
848
+ Escalation triggers: the diagnostics have no determinable owner (→ broad);
849
+ the SAME signature survives a scoped rerun (the scope was too small →
850
+ next rung); or a breadth/fan-out guard fires inside the derivation (→ broad).
851
+ Without a ``scope_index`` the gate behaves exactly as before — a broad rerun
852
+ every attempt — so the change is opt-in via the index.
806
853
 
807
854
  The caller (greenfield ``_stage_implement``) turns a non-passing result into
808
855
  a :class:`StageError`. ``OracleScopeError`` propagates (it is a hard
@@ -839,21 +886,62 @@ def run_implement_oracle_gate(
839
886
  certification = certify_oracle_scope(root, profile, spec)
840
887
  echo(f"[greenfield] implement-oracle: {certification}")
841
888
 
842
- # 4. Run + bounded retry-with-feedback.
889
+ # 4. Run + bounded retry-with-feedback, escalating the rerun scope.
843
890
  max_attempts = _oracle_max_attempts(config)
844
891
  result = _run_oracle_command(root, profile, spec, config)
845
892
  attempt = 1
893
+ rung = _SCOPE_NARROW if scope_index is not None else _SCOPE_BROAD
894
+ last_signature: tuple[Any, ...] | None = None
846
895
  while not result.passed and result.executed and rerun is not None and attempt < max_attempts:
847
896
  # Only retry CURABLE incoherence — an environment/toolchain failure is not
848
897
  # something the SUT can fix in source, so do not burn retries on it.
849
898
  if _only_environment(result):
850
899
  break
900
+
901
+ # Loop-breaker: if the SAME diagnostic signature survived the previous
902
+ # scoped rerun, the scope was too small — escalate the ladder a rung
903
+ # (narrow → expanded → broad). Past broad with no progress → stop and
904
+ # fail honestly (the next loop guard / the final return handle it).
905
+ signature = _diagnostic_signature(result)
906
+ if last_signature is not None and signature == last_signature and scope_index is not None:
907
+ escalated = _next_rung(rung)
908
+ if escalated is None:
909
+ echo(
910
+ "[greenfield] implement-oracle: signature unchanged after broad rerun — "
911
+ "stopping (honest failure)."
912
+ )
913
+ break
914
+ echo(
915
+ f"[greenfield] implement-oracle: signature unchanged after {rung} rerun — "
916
+ f"escalating scope to {escalated}."
917
+ )
918
+ rung = escalated
919
+ last_signature = signature
920
+
921
+ # Derive the scope for this rung (broad when no index, or when the
922
+ # derivation's guards force it). A broad scope is passed as ``None`` so a
923
+ # callback that distinguishes scoped-vs-broad sees the legacy signal.
924
+ scope, forced_broad = _derive_scope_for_rung(
925
+ result=result,
926
+ project_root=root,
927
+ scope_index=scope_index,
928
+ rung=rung,
929
+ structured_source=structured_source,
930
+ manifest_paths=manifest_paths,
931
+ echo=echo,
932
+ )
933
+ if forced_broad and scope_index is not None:
934
+ rung = _SCOPE_BROAD # a forced-broad derivation pins the rung (monotonic ladder)
935
+ scope_label = (
936
+ "broad" if scope is None or getattr(scope, "is_broad", lambda: False)() else getattr(scope, "rung", rung)
937
+ )
851
938
  echo(
852
939
  f"[greenfield] implement-oracle: {result.detail}; "
853
940
  f"re-running implementation with normalized feedback "
854
- f"(attempt {attempt}/{max_attempts - 1}) — categories {result.category_counts()}"
941
+ f"(attempt {attempt}/{max_attempts - 1}, scope={scope_label}) — "
942
+ f"categories {result.category_counts()}"
855
943
  )
856
- rerun(result.feedback_message())
944
+ _invoke_rerun(rerun, result.feedback_message(), scope)
857
945
  attempt += 1
858
946
  result = _run_oracle_command(root, profile, spec, config)
859
947
 
@@ -867,6 +955,109 @@ def run_implement_oracle_gate(
867
955
  return result
868
956
 
869
957
 
958
+ # Ladder-rung constants mirrored here so the gate does not hard-import the scope
959
+ # module at call time when no index is supplied (keeps the no-op path light).
960
+ _SCOPE_NARROW = "narrow"
961
+ _SCOPE_BROAD = "broad"
962
+
963
+
964
+ def _next_rung(rung: str) -> str | None:
965
+ from codd.implement_oracle_scope import next_rung
966
+
967
+ return next_rung(rung)
968
+
969
+
970
+ def _diagnostic_signature(result: ImplementOracleResult) -> tuple[Any, ...]:
971
+ """The result's diagnostic signature (the loop-breaker key); () if none."""
972
+ if not result.diagnostics:
973
+ return ()
974
+ try:
975
+ from codd.implement_oracle_scope import diagnostic_signature
976
+
977
+ return diagnostic_signature(result.diagnostics)
978
+ except Exception: # noqa: BLE001 — signature is a guard; a parse miss ⇒ no guard.
979
+ return ()
980
+
981
+
982
+ def _derive_scope_for_rung(
983
+ *,
984
+ result: ImplementOracleResult,
985
+ project_root: Path,
986
+ scope_index: Any,
987
+ rung: str,
988
+ structured_source: Any,
989
+ manifest_paths: Any,
990
+ echo: Callable[[str], None],
991
+ ) -> tuple[Any, bool]:
992
+ """Derive the rerun scope for ``rung`` → ``(scope, forced_broad)``.
993
+
994
+ ``scope is None`` ⇒ broad (the legacy signal the callback re-runs everything
995
+ on). ``forced_broad`` is True when the derivation itself demanded broad (no
996
+ determinable owner / too-wide / wide-fan-out artifact, or a derivation error)
997
+ so the caller can PIN the ladder rung at broad — the ladder is monotonic, it
998
+ never drops back to a narrower rung once broad was required. With no
999
+ ``scope_index`` (the back-compat path) returns ``(None, False)`` so behaviour
1000
+ is exactly the legacy broad rerun without disturbing the rung bookkeeping.
1001
+ """
1002
+ if scope_index is None:
1003
+ return None, False
1004
+ try:
1005
+ from codd.implement_oracle_scope import derive_oracle_rerun_scope
1006
+
1007
+ decision = derive_oracle_rerun_scope(
1008
+ output=result.raw_output,
1009
+ project_root=project_root,
1010
+ index=scope_index,
1011
+ rung=rung,
1012
+ structured_source=structured_source,
1013
+ manifest_paths=tuple(manifest_paths or ()),
1014
+ )
1015
+ except Exception as exc: # noqa: BLE001 — a derivation failure degrades to broad.
1016
+ echo(f"[greenfield] implement-oracle: scope derivation failed ({exc}); falling back to broad.")
1017
+ return None, True
1018
+ if decision.scope is None or decision.force_broad:
1019
+ if decision.reason:
1020
+ echo(f"[greenfield] implement-oracle: {decision.reason}")
1021
+ return None, True
1022
+ echo(f"[greenfield] implement-oracle: {decision.scope.detail}")
1023
+ return decision.scope, decision.scope.rung == _SCOPE_BROAD
1024
+
1025
+
1026
+ def _invoke_rerun(rerun: Callable[..., None], feedback: str, scope: Any) -> None:
1027
+ """Call the rerun callback, supporting both the scoped ``(feedback, scope)``
1028
+ and the legacy single-arg ``(feedback)`` signatures.
1029
+
1030
+ Arity is decided by INSPECTION (not by catching ``TypeError``): a ``TypeError``
1031
+ raised *inside* a 2-arg callback must propagate, not be silently retried as a
1032
+ 1-arg call. A callback that takes only one positional parameter (and no
1033
+ ``*args``) is invoked with feedback alone (it cannot localize → broad).
1034
+ """
1035
+ if _accepts_scope_arg(rerun):
1036
+ rerun(feedback, scope)
1037
+ else:
1038
+ rerun(feedback)
1039
+
1040
+
1041
+ def _accepts_scope_arg(rerun: Callable[..., None]) -> bool:
1042
+ """True if ``rerun`` accepts a second positional (the scope) — else legacy."""
1043
+ import inspect
1044
+
1045
+ try:
1046
+ sig = inspect.signature(rerun)
1047
+ except (TypeError, ValueError):
1048
+ return True # un-introspectable (builtin/C) — assume the new signature.
1049
+ positional = 0
1050
+ for param in sig.parameters.values():
1051
+ if param.kind in (
1052
+ inspect.Parameter.POSITIONAL_ONLY,
1053
+ inspect.Parameter.POSITIONAL_OR_KEYWORD,
1054
+ ):
1055
+ positional += 1
1056
+ elif param.kind is inspect.Parameter.VAR_POSITIONAL:
1057
+ return True # *args swallows the scope.
1058
+ return positional >= 2
1059
+
1060
+
870
1061
  def _only_environment(result: ImplementOracleResult) -> bool:
871
1062
  """True when every finding is an environment/toolchain failure (not curable by SUT)."""
872
1063
  if not result.findings: