codd-dev 2.28.0__tar.gz → 2.30.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 (572) hide show
  1. {codd_dev-2.28.0 → codd_dev-2.30.0}/PKG-INFO +1 -1
  2. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/__init__.py +1 -1
  3. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/defaults.yaml +7 -4
  4. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/e2e_generator.py +11 -0
  5. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/generator.py +1 -0
  6. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/greenfield/pipeline.py +248 -33
  7. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/implementer.py +4 -3
  8. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/project_types.py +77 -0
  9. codd_dev-2.30.0/codd/vb_marker_authenticity.py +693 -0
  10. codd_dev-2.30.0/codd/vb_rerun_scope.py +225 -0
  11. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/verifiable_behavior_audit.py +52 -1
  12. {codd_dev-2.28.0 → codd_dev-2.30.0}/pyproject.toml +1 -1
  13. {codd_dev-2.28.0 → codd_dev-2.30.0}/.gitignore +0 -0
  14. {codd_dev-2.28.0 → codd_dev-2.30.0}/LICENSE +0 -0
  15. {codd_dev-2.28.0 → codd_dev-2.30.0}/README.md +0 -0
  16. {codd_dev-2.28.0 → codd_dev-2.30.0}/bench_fixture/README.md +0 -0
  17. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/__main__.py +0 -0
  18. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/_git_helper.py +0 -0
  19. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/action_outcome.py +0 -0
  20. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/ai_invoke.py +0 -0
  21. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/ai_patch.py +0 -0
  22. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/artifact_contract.py +0 -0
  23. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/artifact_ids.py +0 -0
  24. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/artifacts/catalog.yaml +0 -0
  25. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/ask_user_question_adapter.py +0 -0
  26. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/assembler.py +0 -0
  27. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/bridge.py +0 -0
  28. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/brownfield/__init__.py +0 -0
  29. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/brownfield/pipeline.py +0 -0
  30. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/capability_completeness.py +0 -0
  31. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/claude_cli.py +0 -0
  32. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/cli.py +0 -0
  33. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/clustering.py +0 -0
  34. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/coherence_adapters.py +0 -0
  35. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/coherence_engine.py +0 -0
  36. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/confidence.py +0 -0
  37. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/config.py +0 -0
  38. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/config_schema.py +0 -0
  39. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/contracts.py +0 -0
  40. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/coverage_auditor.py +0 -0
  41. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/coverage_metrics.py +0 -0
  42. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/__init__.py +0 -0
  43. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/auto_repair.py +0 -0
  44. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/builder.py +0 -0
  45. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/__init__.py +0 -0
  46. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
  47. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/artifact_contract_check.py +0 -0
  48. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/ci_health.py +0 -0
  49. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/dependency_freshness.py +0 -0
  50. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/depends_on_consistency.py +0 -0
  51. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/deployment_completeness.py +0 -0
  52. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/edge_validity.py +0 -0
  53. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/environment_coverage.py +0 -0
  54. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/implementation_coverage.py +0 -0
  55. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/node_completeness.py +0 -0
  56. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/opt_out.py +0 -0
  57. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/task_completion.py +0 -0
  58. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/transitive_closure.py +0 -0
  59. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/ui_coherence.py +0 -0
  60. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/checks/user_journey_coherence.py +0 -0
  61. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/coverage_axes.py +0 -0
  62. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/defaults/cli.yaml +0 -0
  63. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
  64. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/defaults/csharp.yaml +0 -0
  65. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/defaults/elixir.yaml +0 -0
  66. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/defaults/generic.yaml +0 -0
  67. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/defaults/iot.yaml +0 -0
  68. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/defaults/java.yaml +0 -0
  69. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/defaults/kotlin.yaml +0 -0
  70. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/defaults/mobile.yaml +0 -0
  71. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/defaults/ruby.yaml +0 -0
  72. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/defaults/rust.yaml +0 -0
  73. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/defaults/scala.yaml +0 -0
  74. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/defaults/swift.yaml +0 -0
  75. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
  76. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/defaults/web.yaml +0 -0
  77. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/extractor.py +0 -0
  78. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/impact.py +0 -0
  79. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dag/runner.py +0 -0
  80. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/defaults.py +0 -0
  81. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/dependency_lock_coherence.py +0 -0
  82. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deploy_targets/__init__.py +0 -0
  83. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deploy_targets/app_service.py +0 -0
  84. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deploy_targets/base.py +0 -0
  85. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deploy_targets/docker_compose.py +0 -0
  86. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployer.py +0 -0
  87. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/__init__.py +0 -0
  88. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/checks/__init__.py +0 -0
  89. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
  90. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
  91. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
  92. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
  93. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/extractor.py +0 -0
  94. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/__init__.py +0 -0
  95. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/ai_command.py +0 -0
  96. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/ai_command_factory.py +0 -0
  97. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/codex_app_server.py +0 -0
  98. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/llm_consideration.py +0 -0
  99. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/schema/__init__.py +0 -0
  100. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/schema/prisma.py +0 -0
  101. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/target/__init__.py +0 -0
  102. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/target/docker_compose.py +0 -0
  103. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/verification/__init__.py +0 -0
  104. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
  105. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
  106. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
  107. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
  108. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
  109. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/verification/curl.py +0 -0
  110. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
  111. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
  112. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/verification/playwright.py +0 -0
  113. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/deployment/providers/verification/vitest.py +0 -0
  114. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/design_md.py +0 -0
  115. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/diff/__init__.py +0 -0
  116. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/diff/apply.py +0 -0
  117. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/diff/engine.py +0 -0
  118. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/diff/persistence.py +0 -0
  119. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/diff/templates/diff_prompt.md +0 -0
  120. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/discovery.py +0 -0
  121. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/drift.py +0 -0
  122. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/e2e_contract_coherence.py +0 -0
  123. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/e2e_extractor.py +0 -0
  124. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/e2e_runner.py +0 -0
  125. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/elicit/__init__.py +0 -0
  126. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/elicit/apply.py +0 -0
  127. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/elicit/engine.py +0 -0
  128. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/elicit/finding.py +0 -0
  129. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/elicit/formatters/__init__.py +0 -0
  130. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/elicit/formatters/base.py +0 -0
  131. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/elicit/formatters/interactive.py +0 -0
  132. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/elicit/formatters/json_fmt.py +0 -0
  133. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/elicit/formatters/md.py +0 -0
  134. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/elicit/lexicon_loader.py +0 -0
  135. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/elicit/persistence.py +0 -0
  136. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
  137. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/env_refs.py +0 -0
  138. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/extract_ai.py +0 -0
  139. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/extract_paths.py +0 -0
  140. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/extractor.py +0 -0
  141. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fix/__init__.py +0 -0
  142. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fix/candidate_selector.py +0 -0
  143. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fix/design_updater.py +0 -0
  144. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fix/impl_propagation.py +0 -0
  145. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fix/interactive_prompt.py +0 -0
  146. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fix/phenomenon_fixer.py +0 -0
  147. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fix/phenomenon_parser.py +0 -0
  148. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fix/risk_classifier.py +0 -0
  149. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fix/templates/clarification_question.txt +0 -0
  150. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fix/templates/design_update.txt +0 -0
  151. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fix/templates/impl_update.txt +0 -0
  152. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
  153. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fix/templates/risk_assessment.txt +0 -0
  154. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fix/templates_loader.py +0 -0
  155. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fixer.py +0 -0
  156. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fixup_drift.py +0 -0
  157. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fixup_drift_strategies/__init__.py +0 -0
  158. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
  159. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
  160. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
  161. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/frontmatter.py +0 -0
  162. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/git_evidence.py +0 -0
  163. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/graph.py +0 -0
  164. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/greenfield/__init__.py +0 -0
  165. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/hitl_session.py +0 -0
  166. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/hooks/__init__.py +0 -0
  167. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/hooks/pre-commit +0 -0
  168. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
  169. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
  170. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/hooks/recipes/codex_hook.sh +0 -0
  171. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
  172. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
  173. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/iac_nfr.py +0 -0
  174. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/implement_oracle.py +0 -0
  175. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/implement_oracle_scope.py +0 -0
  176. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/implementer/__init__.py +0 -0
  177. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/implementer/chunked_runner.py +0 -0
  178. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/implementer/typecheck_loop.py +0 -0
  179. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/import_coherence.py +0 -0
  180. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/inheritance.py +0 -0
  181. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/init/__init__.py +0 -0
  182. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/init/lexicon_suggest.py +0 -0
  183. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/init/llm_lexicon_suggester.py +0 -0
  184. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/init/stack_detector.py +0 -0
  185. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/knowledge_fetcher.py +0 -0
  186. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/lexicon.py +0 -0
  187. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/lexicon_cli/__init__.py +0 -0
  188. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
  189. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/lexicon_cli/formatters/html.py +0 -0
  190. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
  191. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/lexicon_cli/formatters/md.py +0 -0
  192. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/lexicon_cli/inspector.py +0 -0
  193. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/lexicon_cli/manager.py +0 -0
  194. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/lexicon_cli/reporter.py +0 -0
  195. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/lexicon_cli/threshold.py +0 -0
  196. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/__init__.py +0 -0
  197. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/approval.py +0 -0
  198. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/best_practice_augmenter.py +0 -0
  199. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/criteria_expander.py +0 -0
  200. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/design_doc_extractor.py +0 -0
  201. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/impl_step_deriver.py +0 -0
  202. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/means_catalog_loader.py +0 -0
  203. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/parser.py +0 -0
  204. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/plan_deriver.py +0 -0
  205. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/prompt_builder.py +0 -0
  206. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/strategy_validator.py +0 -0
  207. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
  208. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
  209. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
  210. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
  211. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
  212. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/templates/meta_instruction.md +0 -0
  213. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/templates/plan_derive_meta.md +0 -0
  214. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
  215. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/mcp_server.py +0 -0
  216. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/measure.py +0 -0
  217. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/operational_e2e_audit.py +0 -0
  218. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/operations_derive.py +0 -0
  219. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/parsing/__init__.py +0 -0
  220. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/parsing/_shared.py +0 -0
  221. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/parsing/api_specs.py +0 -0
  222. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/parsing/filesystem_routes.py +0 -0
  223. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/parsing/iac.py +0 -0
  224. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/parsing/python_ast.py +0 -0
  225. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/parsing/schemas.py +0 -0
  226. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/parsing/tests_builddeps.py +0 -0
  227. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/parsing/treesitter.py +0 -0
  228. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/planner.py +0 -0
  229. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/policy.py +0 -0
  230. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/preflight/__init__.py +0 -0
  231. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/preflight/defaults/cli.yaml +0 -0
  232. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/preflight/defaults/generic.yaml +0 -0
  233. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/preflight/defaults/iot.yaml +0 -0
  234. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/preflight/defaults/mobile.yaml +0 -0
  235. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/preflight/defaults/web.yaml +0 -0
  236. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/propagate.py +0 -0
  237. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/propagation_common.py +0 -0
  238. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/propagator.py +0 -0
  239. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/reconciliation_ledger.py +0 -0
  240. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/registry.py +0 -0
  241. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/__init__.py +0 -0
  242. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/approval_repair.py +0 -0
  243. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/auto_scope_guard.py +0 -0
  244. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/engine.py +0 -0
  245. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/git_patcher.py +0 -0
  246. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/history.py +0 -0
  247. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/llm_repair_engine.py +0 -0
  248. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/loop.py +0 -0
  249. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/primary_picker.py +0 -0
  250. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/proof_breaks.py +0 -0
  251. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/repair_result.py +0 -0
  252. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/repairability_classifier.py +0 -0
  253. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/schema.py +0 -0
  254. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/templates/analyze_meta.md +0 -0
  255. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/templates/propose_meta.md +0 -0
  256. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
  257. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/templates/repairability_meta.md +0 -0
  258. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/test_failure_attribution.py +0 -0
  259. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair/verify_runner.py +0 -0
  260. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/repair_slice.py +0 -0
  261. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/require.py +0 -0
  262. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/require_plugins.py +0 -0
  263. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/require_propagate.py +0 -0
  264. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
  265. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
  266. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
  267. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
  268. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/required_artifacts/defaults/web.yaml +0 -0
  269. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/required_artifacts_deriver.py +0 -0
  270. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
  271. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
  272. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
  273. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
  274. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
  275. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/requirement_completeness_auditor.py +0 -0
  276. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/requirement_reconciliation.py +0 -0
  277. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/requirements_meta.py +0 -0
  278. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/restoration_report.py +0 -0
  279. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/restore.py +0 -0
  280. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/routes_extractor.py +0 -0
  281. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/runtime_smoke/__init__.py +0 -0
  282. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/runtime_smoke/checks.py +0 -0
  283. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/runtime_smoke/config.py +0 -0
  284. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/runtime_smoke/report.py +0 -0
  285. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/runtime_smoke/runner.py +0 -0
  286. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/scanner.py +0 -0
  287. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/schema_refs.py +0 -0
  288. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/screen_flow_validator.py +0 -0
  289. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/screen_transition_extractor.py +0 -0
  290. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/screen_transitions/defaults.yaml +0 -0
  291. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/skills_cli/__init__.py +0 -0
  292. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/skills_cli/discovery.py +0 -0
  293. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/skills_cli/manager.py +0 -0
  294. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/skills_cli/paths.py +0 -0
  295. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/surface_reconciliation.py +0 -0
  296. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/synth.py +0 -0
  297. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/templates/codd.yaml.tmpl +0 -0
  298. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/templates/conventions.yaml.tmpl +0 -0
  299. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
  300. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/templates/doc_links.yaml.tmpl +0 -0
  301. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
  302. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
  303. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
  304. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
  305. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
  306. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/templates/extracted/system-context.md.j2 +0 -0
  307. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/templates/gitignore.tmpl +0 -0
  308. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/templates/lexicon_questions.md +0 -0
  309. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/templates/lexicon_schema.yaml +0 -0
  310. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/templates/overrides.yaml.tmpl +0 -0
  311. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/test_detection.py +0 -0
  312. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/test_import_coherence.py +0 -0
  313. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/traceability.py +0 -0
  314. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/validator.py +0 -0
  315. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/watch/__init__.py +0 -0
  316. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/watch/events.py +0 -0
  317. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/watch/propagation_log.py +0 -0
  318. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/watch/propagation_pipeline.py +0 -0
  319. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/watch/test_runner.py +0 -0
  320. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/watch/watcher.py +0 -0
  321. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd/wiring.py +0 -0
  322. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
  323. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
  324. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
  325. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
  326. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
  327. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
  328. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
  329. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
  330. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
  331. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
  332. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
  333. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
  334. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
  335. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
  336. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
  337. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
  338. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
  339. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
  340. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
  341. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
  342. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
  343. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
  344. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
  345. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
  346. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
  347. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
  348. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
  349. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
  350. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
  351. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
  352. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
  353. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
  354. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
  355. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
  356. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
  357. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
  358. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
  359. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
  360. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
  361. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
  362. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
  363. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
  364. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
  365. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
  366. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
  367. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
  368. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
  369. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
  370. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
  371. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
  372. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
  373. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
  374. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
  375. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
  376. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
  377. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
  378. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
  379. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
  380. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
  381. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
  382. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
  383. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
  384. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
  385. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
  386. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
  387. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
  388. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
  389. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
  390. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
  391. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
  392. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
  393. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
  394. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
  395. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
  396. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
  397. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
  398. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
  399. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
  400. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
  401. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
  402. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
  403. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
  404. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
  405. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
  406. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
  407. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
  408. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
  409. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
  410. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
  411. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
  412. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
  413. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
  414. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
  415. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
  416. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
  417. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
  418. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
  419. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
  420. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
  421. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
  422. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
  423. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
  424. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
  425. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
  426. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
  427. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
  428. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
  429. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
  430. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
  431. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
  432. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
  433. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
  434. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
  435. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
  436. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
  437. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
  438. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
  439. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
  440. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
  441. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
  442. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
  443. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
  444. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
  445. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
  446. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
  447. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
  448. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
  449. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
  450. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
  451. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
  452. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
  453. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
  454. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
  455. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
  456. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
  457. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
  458. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
  459. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
  460. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
  461. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
  462. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
  463. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
  464. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
  465. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
  466. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
  467. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
  468. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
  469. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
  470. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
  471. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
  472. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
  473. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
  474. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
  475. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
  476. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
  477. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
  478. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
  479. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
  480. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
  481. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
  482. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
  483. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
  484. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
  485. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
  486. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
  487. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
  488. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
  489. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
  490. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
  491. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
  492. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
  493. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
  494. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
  495. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
  496. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
  497. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
  498. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
  499. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
  500. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
  501. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
  502. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
  503. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
  504. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
  505. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
  506. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
  507. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
  508. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
  509. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
  510. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
  511. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
  512. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
  513. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
  514. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
  515. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
  516. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
  517. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
  518. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
  519. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
  520. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
  521. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
  522. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
  523. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
  524. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
  525. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
  526. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
  527. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
  528. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
  529. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
  530. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
  531. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
  532. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
  533. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
  534. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
  535. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
  536. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
  537. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
  538. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
  539. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
  540. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
  541. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
  542. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
  543. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
  544. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
  545. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
  546. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
  547. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
  548. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
  549. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
  550. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
  551. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
  552. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
  553. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
  554. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
  555. {codd_dev-2.28.0 → codd_dev-2.30.0}/codd_plugins/stack_map.yaml +0 -0
  556. {codd_dev-2.28.0 → codd_dev-2.30.0}/docs/cookbook/cdp_browser/README.md +0 -0
  557. {codd_dev-2.28.0 → codd_dev-2.30.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
  558. {codd_dev-2.28.0 → codd_dev-2.30.0}/docs/requirements/README.md +0 -0
  559. {codd_dev-2.28.0 → codd_dev-2.30.0}/dogfood/README.md +0 -0
  560. {codd_dev-2.28.0 → codd_dev-2.30.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
  561. {codd_dev-2.28.0 → codd_dev-2.30.0}/examples/README.md +0 -0
  562. {codd_dev-2.28.0 → codd_dev-2.30.0}/skills/codd-assemble/SKILL.md +0 -0
  563. {codd_dev-2.28.0 → codd_dev-2.30.0}/skills/codd-evolve/SKILL.md +0 -0
  564. {codd_dev-2.28.0 → codd_dev-2.30.0}/skills/codd-generate/SKILL.md +0 -0
  565. {codd_dev-2.28.0 → codd_dev-2.30.0}/skills/codd-greenfield/SKILL.md +0 -0
  566. {codd_dev-2.28.0 → codd_dev-2.30.0}/skills/codd-impact/SKILL.md +0 -0
  567. {codd_dev-2.28.0 → codd_dev-2.30.0}/skills/codd-init/SKILL.md +0 -0
  568. {codd_dev-2.28.0 → codd_dev-2.30.0}/skills/codd-propagate/SKILL.md +0 -0
  569. {codd_dev-2.28.0 → codd_dev-2.30.0}/skills/codd-restore/SKILL.md +0 -0
  570. {codd_dev-2.28.0 → codd_dev-2.30.0}/skills/codd-scan/SKILL.md +0 -0
  571. {codd_dev-2.28.0 → codd_dev-2.30.0}/skills/codd-validate/SKILL.md +0 -0
  572. {codd_dev-2.28.0 → codd_dev-2.30.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.28.0
3
+ Version: 2.30.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.28.0"
3
+ __version__ = "2.30.0"
@@ -171,13 +171,16 @@ implement:
171
171
  # implement task (or a declared harness/profile contract). An orphan (a file no
172
172
  # task owns) sits OUTSIDE the artifact-contract graph -- its repair scope and
173
173
  # write-fence are undecidable, so a non-deterministic SUT can keep mutating it
174
- # invisibly. 'warn' (default) observes + reports orphans after implement but
175
- # never blocks (the check is heuristic; a large behaviour change rolls out as
176
- # warn). 'enforce' makes an orphan a hard stage failure. 'off' disables it. A
174
+ # invisibly. 'warn' observes + reports orphans after implement but never blocks
175
+ # (heuristic; the large behaviour change first rolled out as warn, validated on
176
+ # the dogfood zoo, then promoted). 'enforce' (default, owner-set 2026-06-15)
177
+ # makes an orphan a hard stage failure -- the orphan-artifact invariant. Scaffold
178
+ # /harness-owned files (vitest.config.ts, tsconfig.json, ...) are profile-owned
179
+ # and never flagged. 'off' disables it. A
177
180
  # legitimate helper a task wrote under its OWN output directory is adopted (it
178
181
  # is dir-owned), so the warn list should be small. Only active for stacks with
179
182
  # a declared implement-time oracle + a derivable owner index.
180
- orphan_artifact_gate: warn
183
+ orphan_artifact_gate: enforce
181
184
  # Bounded wall-clock for ONE implement-oracle command run (seconds). tsc on a
182
185
  # fresh build is fast, but a cold first run can compile a large module graph.
183
186
  # Default 600.
@@ -375,6 +375,17 @@ def _render_header_comments(scenario: UserScenario, context: GenerationContext,
375
375
  if scenario.kind == "operational":
376
376
  source_operation = _source_operation_label(scenario)
377
377
  coverage_axis = scenario.coverage_axis or "unspecified"
378
+ # Machine-injection guard (anti-false-coverage): injecting a coverage
379
+ # marker is ONLY safe here because the mapping is HARNESS-OWNED and
380
+ # machine-known — this is a skeleton the harness itself generates for
381
+ # ``operation=<X>`` and the marker names that same operation. NEVER
382
+ # inject ``codd: covers vb=<id>`` into a free-form unit/integration test
383
+ # by guessing the VB from a test name or nearby text: a guessed marker is
384
+ # a false coverage claim the authenticity gate exists to reject. A VB
385
+ # marker may only be authored by the SUT on a test that genuinely proves
386
+ # the behavior, or attached to a harness-generated VB-specific skeleton
387
+ # whose asserting body the SUT fills in (still subject to the
388
+ # assertion-presence gate).
378
389
  lines.extend(
379
390
  [
380
391
  "// Operational E2E policy: run the whole generated suite, collect all failures, then repair after the full campaign finishes.",
@@ -226,6 +226,7 @@ _TEST_DOC_CANONICAL_VB_HEAD = [
226
226
  "- Every verifiable behavior must map to at least one test scenario — if a design document specifies a transition chain (e.g. action → intermediate state → final state), each link in the chain requires a separate assertion.",
227
227
  "- Include a traceability section that lists each verifiable behavior and its corresponding test scenario(s). Flag any behavior that lacks coverage.",
228
228
  "- Write that traceability section as a Markdown table whose FIRST column is a stable verifiable-behavior id of the form `VB-<id>` (e.g. `VB-01`, `VB-AUTH-02`), one row per verifiable behavior. Header wording and language are free; CoDD machine-parses the `VB-` id in the first cell (`codd test audit`), so never merge multiple behaviors into one row and never omit the id column.",
229
+ "- Each VB id must be ATOMIC — name exactly one behavior. Never use range or list shorthand in an id (no `VB-EVAL-02..06`, no `VB-02,03`, no `VB-02〜06`); write one row with a distinct atomic id per behavior instead. A range id cannot be honestly covered by a single test marker, and its members would read as permanently uncovered.",
229
230
  "- Declare each behavior under exactly one stable id; do not split one behavior across two ids or reuse an id for two different behaviors.",
230
231
  "- Treat design-time `operation_flow` records as the authoritative source for operational test obligations. Do not invent E2E-only behavior that is absent from requirements or design; instead flag missing design obligations.",
231
232
  ]
@@ -733,16 +733,29 @@ class GreenfieldPipeline:
733
733
  # — code that does not even typecheck cannot have meaningful VB coverage.
734
734
  self._enforce_implement_oracle_gate(project_root, tasks, options)
735
735
 
736
- # Project-wide VB coverage gate — ONCE, after every implement task has
737
- # run and all covering tests therefore exist. Per-task enforcement was
738
- # disabled in _default_implement_task_runner precisely because the gate
739
- # is project-wide; this is where it belongs. Honors the greenfield
740
- # coverage_gate option (--no-coverage-gate / greenfield.coverage_gate:
741
- # false) — when the owner turned it off, the final gate is skipped too.
736
+ # Project-wide VB coverage + marker-authenticity gate — ONCE, after every
737
+ # implement task has run and all covering tests therefore exist. Per-task
738
+ # enforcement was disabled in _default_implement_task_runner precisely
739
+ # because the gate is project-wide; this is where it belongs. Honors the
740
+ # greenfield coverage_gate option (--no-coverage-gate /
741
+ # greenfield.coverage_gate: false) — when the owner turned it off, the
742
+ # final gate is skipped too. The rerun is wired (was dormant): an
743
+ # uncovered VB drives a bounded, TEST-SCOPED re-implementation (source is
744
+ # never edited by a VB rerun) with gap feedback, and the native oracle is
745
+ # re-asserted after each test edit.
746
+ coverage_on = bool(options.get("coverage_gate", True))
742
747
  _enforce_stage_coverage_gate(
743
748
  project_root,
744
- coverage_gate=bool(options.get("coverage_gate", True)),
749
+ coverage_gate=coverage_on,
745
750
  echo=self.echo,
751
+ rerun=self._make_vb_rerun_callback(project_root, tasks, options) if coverage_on else None,
752
+ rerun_oracle=(
753
+ (lambda: self._enforce_implement_oracle_gate(project_root, tasks, options))
754
+ if coverage_on
755
+ else None
756
+ ),
757
+ scope_resolver=self._make_vb_scope_resolver(project_root, tasks) if coverage_on else None,
758
+ authenticity_profile=self._resolve_layout_profile(project_root) if coverage_on else None,
746
759
  )
747
760
  record["detail"] = f"{len(tasks)} task(s) implemented"
748
761
 
@@ -925,19 +938,52 @@ class GreenfieldPipeline:
925
938
  return None
926
939
 
927
940
  def _oracle_manifest_paths(self, project_root: Path) -> tuple[str, ...]:
928
- """Manifest/config files the write-fence always permits (they are shared).
929
-
930
- A scoped rerun may legitimately touch the build manifest/config even when
931
- no task "owns" it (e.g. adding a dependency the fix needs). Only files
932
- that actually exist are listed, project-relative.
941
+ """Harness-owned shared files the write-fence permits + the orphan gate exempts.
942
+
943
+ Two roles, one list (both legitimate for the same files):
944
+ * **write-fence permit** a scoped rerun may touch shared build
945
+ manifest/config even when no task "owns" it (e.g. adding a dependency
946
+ the fix needs).
947
+ * **orphan-gate escape hatch** (``extra_owned``) — a scaffolded config
948
+ is a generated artifact owned by the HARNESS contract, not a task, so
949
+ it must not be mis-flagged as an unowned orphan.
950
+
951
+ Sources, unioned: (1) the active stack's :class:`LayoutProfile`
952
+ ``harness_owned_scaffold_paths`` (e.g. TS ``vitest.config.ts`` /
953
+ ``tsconfig.json`` / ``package.json`` — the files the scaffolder creates),
954
+ derived language-agnostically from the profile; (2) a small fallback set of
955
+ common lockfiles a manager may have produced that the profile does not
956
+ enumerate. Only files that actually EXIST are returned, project-relative.
933
957
  """
934
- candidates = (
935
- "package.json",
936
- "tsconfig.json",
937
- "package-lock.json",
938
- "pnpm-lock.yaml",
939
- "yarn.lock",
940
- )
958
+ candidates: list[str] = []
959
+
960
+ def _add(rel: str) -> None:
961
+ if rel and rel not in candidates:
962
+ candidates.append(rel)
963
+
964
+ # (1) Profile-declared scaffold contract (language-agnostic, single source).
965
+ try:
966
+ from codd.project_types import resolve_layout_profile
967
+
968
+ config, language, source_dirs, test_dirs = self._layout_inputs(project_root)
969
+ profile = resolve_layout_profile(
970
+ language=language,
971
+ project_name=self._layout_project_name(project_root, config),
972
+ source_dirs=source_dirs,
973
+ test_dirs=test_dirs,
974
+ config=config,
975
+ project_root=project_root,
976
+ )
977
+ if profile is not None:
978
+ for rel in profile.harness_owned_scaffold_paths():
979
+ _add(rel)
980
+ except Exception as exc: # noqa: BLE001 — escape hatch is best-effort; fall back to the static set.
981
+ self.echo(f"[greenfield] implement-oracle: scaffold-path contract unavailable ({exc}).")
982
+
983
+ # (2) Lockfile fallbacks not necessarily enumerated by the profile.
984
+ for name in ("package.json", "tsconfig.json", "package-lock.json", "pnpm-lock.yaml", "yarn.lock"):
985
+ _add(name)
986
+
941
987
  present: list[str] = []
942
988
  for name in candidates:
943
989
  if (project_root / name).is_file():
@@ -1018,6 +1064,91 @@ class GreenfieldPipeline:
1018
1064
  feedback=feedback,
1019
1065
  )
1020
1066
 
1067
+ def _make_vb_rerun_callback(
1068
+ self,
1069
+ project_root: Path,
1070
+ tasks: list[ImplementTaskRef],
1071
+ options: dict[str, Any],
1072
+ ) -> Callable[[str, Any], None]:
1073
+ """A ``rerun(feedback, scope)`` for the VB coverage gate's feedback loop.
1074
+
1075
+ Reuses the oracle's scoped, write-fenced rerun dispatch
1076
+ (:meth:`_rerun_tasks_with_feedback`): a TEST-scoped
1077
+ :class:`~codd.implement_oracle_scope.OracleRerunScope` re-implements ONLY
1078
+ its test tasks, fenced to test files/helpers, so a VB coverage rerun can
1079
+ never rewrite production source.
1080
+ """
1081
+
1082
+ def _rerun(feedback: str, scope: Any = None) -> None:
1083
+ self._rerun_tasks_with_feedback(project_root, tasks, feedback, options, scope=scope)
1084
+
1085
+ return _rerun
1086
+
1087
+ def _make_vb_scope_resolver(
1088
+ self,
1089
+ project_root: Path,
1090
+ tasks: list[ImplementTaskRef],
1091
+ ) -> Callable[[list[str]], Any]:
1092
+ """A resolver mapping uncovered VB source docs → a TEST-scoped rerun scope.
1093
+
1094
+ Delegates to :func:`codd.vb_rerun_scope.derive_vb_rerun_scope` with the
1095
+ pipeline's ``_output_paths_for_task`` so each task's outputs resolve the
1096
+ same way the rerun itself resolves them. A derivation failure degrades to
1097
+ a broad scope (never aborts the gate).
1098
+ """
1099
+ from codd.config import load_project_config
1100
+
1101
+ def _resolve(uncovered_source_docs: list[str]) -> Any:
1102
+ try:
1103
+ config = load_project_config(project_root)
1104
+ except (FileNotFoundError, ValueError):
1105
+ config = {}
1106
+ try:
1107
+ from codd.vb_rerun_scope import derive_vb_rerun_scope
1108
+
1109
+ return derive_vb_rerun_scope(
1110
+ uncovered_source_docs,
1111
+ tasks,
1112
+ config=config,
1113
+ path_resolver=_output_paths_for_task,
1114
+ )
1115
+ except Exception as exc: # noqa: BLE001 — degrade to broad, never abort.
1116
+ self.echo(f"[greenfield] VB rerun: scope derivation failed ({exc}); rerun stays broad.")
1117
+ from codd.implement_oracle_scope import SCOPE_BROAD, OracleRerunScope
1118
+
1119
+ return OracleRerunScope(
1120
+ rung=SCOPE_BROAD, # canonical broad ⇒ is_broad() True ⇒ unfenced
1121
+ task_ids=tuple(task.task_id for task in tasks),
1122
+ allowed_paths=(),
1123
+ detail="VB rerun: scope derivation error — broad fallback",
1124
+ )
1125
+
1126
+ return _resolve
1127
+
1128
+ def _resolve_layout_profile(self, project_root: Path) -> Any:
1129
+ """Resolve the active :class:`~codd.project_types.LayoutProfile` (or None).
1130
+
1131
+ Used by the marker-authenticity gate to obtain the per-language
1132
+ test-block adapter (``profile.test_block_profile()``). Best-effort: any
1133
+ resolution failure returns ``None`` so the gate degrades to its
1134
+ language-agnostic stage-1 (orphan) check rather than aborting.
1135
+ """
1136
+ try:
1137
+ from codd.project_types import resolve_layout_profile
1138
+
1139
+ config, language, source_dirs, test_dirs = self._layout_inputs(project_root)
1140
+ return resolve_layout_profile(
1141
+ language=language,
1142
+ project_name=self._layout_project_name(project_root, config),
1143
+ source_dirs=source_dirs,
1144
+ test_dirs=test_dirs,
1145
+ config=config,
1146
+ project_root=project_root,
1147
+ )
1148
+ except Exception as exc: # noqa: BLE001 — authenticity degrades without a profile.
1149
+ self.echo(f"[greenfield] VB authenticity: layout profile unavailable ({exc}); stage-1 only.")
1150
+ return None
1151
+
1021
1152
  def _default_implement_task_runner(
1022
1153
  self,
1023
1154
  project_root: Path,
@@ -1964,8 +2095,12 @@ def _enforce_stage_coverage_gate(
1964
2095
  *,
1965
2096
  coverage_gate: bool,
1966
2097
  echo: Callable[[str], None],
2098
+ rerun: Callable[[str, Any], None] | None = None,
2099
+ rerun_oracle: Callable[[], None] | None = None,
2100
+ scope_resolver: Callable[[list[str]], Any] | None = None,
2101
+ authenticity_profile: Any = None,
1967
2102
  ) -> None:
1968
- """Project-wide verifiable-behavior coverage gate for the implement STAGE.
2103
+ """Project-wide verifiable-behavior coverage + authenticity gate (implement STAGE).
1969
2104
 
1970
2105
  Runs ONCE after every implement task has completed, so all covering tests
1971
2106
  already exist. This is the correct granularity for the project-wide VB
@@ -1975,20 +2110,35 @@ def _enforce_stage_coverage_gate(
1975
2110
  — an early fixtures/helper task that writes no covering tests would
1976
2111
  otherwise hard-fail against the whole project's VBs.)
1977
2112
 
1978
- No ``rerun`` is wired: by stage end the build is complete, so any remaining
1979
- uncovered VB is a genuine failure of the whole implement stage, not a
1980
- transient gap to re-implement away. The failure is raised as a
1981
- :class:`StageError` carrying the gap list, which the pipeline records on the
1982
- implement stage record and surfaces through the existing checkpoint/resume
1983
- machinery.
1984
-
1985
- Honors the greenfield ``coverage_gate`` option: when it is off
1986
- (``--no-coverage-gate`` / ``greenfield.coverage_gate: false``) the gate is
1987
- skipped entirely. The project-level ``test_coverage.gate`` config is also
1988
- respected (via :func:`run_implement_coverage_gate`).
2113
+ Two gates, both HARD (raise :class:`StageError` on failure):
2114
+
2115
+ 1. **Coverage** (:func:`run_implement_coverage_gate`): every declared VB has a
2116
+ ``covers``/``blocked`` marker. When a ``rerun`` callback is wired, an
2117
+ uncovered gap drives a bounded, TEST-SCOPED re-implementation with gap
2118
+ feedback (the previously-dormant feedback loop, now live) before failing.
2119
+ 2. **Authenticity** (:func:`build_authenticity_report`): each ``covers``
2120
+ marker is a *credible* claim attached to an executable test block that
2121
+ contains an assertion (anti-false-green; "add a marker" cannot be
2122
+ satisfied by marking an empty/skipped test). Gracefully degrades for
2123
+ stacks/files it cannot structurally parse.
2124
+
2125
+ ``rerun(feedback, scope)`` re-implements the scoped TEST tasks under a
2126
+ write-fence (source is never edited by a VB rerun). ``scope_resolver`` maps
2127
+ the uncovered VB source docs to that scope. ``rerun_oracle`` re-runs the
2128
+ native implement-oracle AFTER a VB rerun (a test edit can break a helper
2129
+ symbol; the pipeline order is oracle→VB, so the oracle must be re-asserted).
2130
+
2131
+ Honors the greenfield ``coverage_gate`` option and the project-level
2132
+ ``test_coverage.gate`` config.
1989
2133
  """
1990
2134
  from codd.config import load_project_config
1991
- from codd.verifiable_behavior_audit import run_implement_coverage_gate
2135
+ from codd.verifiable_behavior_audit import (
2136
+ build_vb_coverage_audit,
2137
+ coverage_gate_enabled,
2138
+ coverage_gate_max_retries,
2139
+ format_gap_feedback,
2140
+ run_implement_coverage_gate,
2141
+ )
1992
2142
 
1993
2143
  if not coverage_gate:
1994
2144
  return
@@ -1998,6 +2148,9 @@ def _enforce_stage_coverage_gate(
1998
2148
  except (FileNotFoundError, ValueError):
1999
2149
  config = {}
2000
2150
 
2151
+ if not coverage_gate_enabled(config):
2152
+ return
2153
+
2001
2154
  # Pass the configured test dirs as the audited output paths so the gate
2002
2155
  # treats this as a test-related run (it is — every test the build will ever
2003
2156
  # have now exists) and evaluates the FULL project VB universe in one pass.
@@ -2007,13 +2160,52 @@ def _enforce_stage_coverage_gate(
2007
2160
  else:
2008
2161
  audited_paths = ["tests/"]
2009
2162
 
2163
+ # --- Gate 1: coverage, with the (now-live) TEST-scoped feedback rerun. ---
2164
+ if rerun is not None and scope_resolver is not None:
2165
+ # Drive the bounded feedback loop HERE so each rerun is TEST-scoped (the
2166
+ # scope is recomputed from the current gap) and the native oracle is
2167
+ # re-asserted after each test edit. ``run_implement_coverage_gate`` is
2168
+ # then called once more with rerun=None to produce the final verdict +
2169
+ # gap reporting (no second loop).
2170
+ max_retries = coverage_gate_max_retries(config)
2171
+ report = build_vb_coverage_audit(project_root, config=config)
2172
+ attempt = 0
2173
+ while report.rows and report.uncovered_rows and attempt < max_retries:
2174
+ attempt += 1
2175
+ uncovered_docs = sorted({row.source_doc for row in report.uncovered_rows if row.source_doc})
2176
+ scope = scope_resolver(uncovered_docs)
2177
+ echo(
2178
+ f"Test coverage gate: {len(report.uncovered_rows)} uncovered verifiable behavior(s); "
2179
+ f"re-running TEST tasks with gap feedback (attempt {attempt}/{max_retries})"
2180
+ )
2181
+ try:
2182
+ rerun(format_gap_feedback(report), scope)
2183
+ if rerun_oracle is not None:
2184
+ # A VB test rerun can break test↔helper symbol coherence;
2185
+ # re-assert the native oracle so a type/import break never
2186
+ # rides into verify.
2187
+ rerun_oracle()
2188
+ except Exception as exc: # noqa: BLE001
2189
+ # A rerun that cannot proceed (e.g. a codegen/environment error)
2190
+ # must NOT mask the gate's verdict: log and stop the bounded loop,
2191
+ # then fall through to the final coverage audit, which fails
2192
+ # HONESTLY on whatever VBs are still uncovered. (The oracle gate
2193
+ # treats its rerun failures as hard because they ARE the defect;
2194
+ # here the authority is the coverage audit below, not the rerun.)
2195
+ echo(
2196
+ f"Test coverage gate: re-run attempt {attempt} could not complete ({exc}); "
2197
+ "stopping the feedback loop and evaluating coverage as-is."
2198
+ )
2199
+ break
2200
+ report = build_vb_coverage_audit(project_root, config=config)
2201
+
2010
2202
  passed = run_implement_coverage_gate(
2011
2203
  project_root,
2012
2204
  config=config,
2013
2205
  design_node=None,
2014
2206
  output_paths=audited_paths,
2015
2207
  opt_out=not coverage_gate,
2016
- rerun=None,
2208
+ rerun=None, # the scoped loop (above) already ran; this is the final verdict
2017
2209
  echo=echo,
2018
2210
  echo_error=echo,
2019
2211
  )
@@ -2024,6 +2216,29 @@ def _enforce_stage_coverage_gate(
2024
2216
  "marker after all implement tasks completed (see the gap list above)"
2025
2217
  )
2026
2218
 
2219
+ # --- Gate 2: marker authenticity (anti-false-green). HARD gate. ---
2220
+ from codd.vb_marker_authenticity import build_authenticity_report
2221
+
2222
+ auth = build_authenticity_report(project_root, config=config, profile=authenticity_profile)
2223
+ if auth.degraded_paths:
2224
+ echo(
2225
+ "Test coverage gate: marker-authenticity attachment/assertion checks skipped for "
2226
+ f"{len(auth.degraded_paths)} un-parseable file(s) (stage-1 orphan check still applied): "
2227
+ + ", ".join(auth.degraded_paths)
2228
+ )
2229
+ if not auth.passed:
2230
+ for violation in auth.violations:
2231
+ echo(violation.message)
2232
+ raise StageError(
2233
+ "verifiable-behavior marker-authenticity gate failed for the implement stage: "
2234
+ f"{len(auth.violations)} `codd: covers vb=` marker(s) are not credible coverage claims "
2235
+ "(attached to a skipped/empty test, an orphan id, or a test with no assertion). A "
2236
+ "covers marker must sit on an executable test that asserts the behavior."
2237
+ )
2238
+ echo(
2239
+ f"Test coverage gate: marker authenticity OK ({len(auth.degraded_paths)} file(s) stage-1-only)."
2240
+ )
2241
+
2027
2242
 
2028
2243
  def _default_verify_runner(
2029
2244
  project_root: Path,
@@ -1884,9 +1884,10 @@ def _build_implementation_prompt(
1884
1884
  if _spec_targets_tests(spec, config):
1885
1885
  lines.extend(
1886
1886
  [
1887
- "Verifiable-behavior traceability markers:",
1888
- "- If the design or dependency test documents declare verifiable-behavior ids (a traceability table whose first column is `VB-<id>`), annotate each generated test with a comment marker `codd: covers vb=<id>` for every behavior that test proves (`codd test audit` reconciles these markers).",
1889
- "- If a declared behavior cannot be tested yet, add an explicit `codd: blocked vb=<id> reason=<short_reason>` comment marker instead of leaving it silently uncovered.",
1887
+ "Verifiable-behavior traceability markers (release-blocking — the implement stage gate fails the build on any gap):",
1888
+ "- The design and its dependency test documents declare verifiable behaviors in a traceability table whose first column is `VB-<id>`. Reconcile EVERY declared VB id against the tests you write: for each VB, produce either a real test that PROVES it (carrying a `codd: covers vb=<id>` comment marker) or, if it genuinely cannot be tested yet, an explicit `codd: blocked vb=<id> reason=<short_reason>` marker. Never leave a declared VB silently uncovered.",
1889
+ "- A `codd: covers vb=<id>` marker is a CLAIM that the test proves that behavior. Only attach it to a test that (a) is actually executed — not `it.skip`/`test.todo`/`describe.skip`/`@pytest.mark.skip`/disabled and (b) contains at least one assertion that would FAIL if the behavior were broken. A marker on an empty test, a skipped test, or a smoke test with no assertion is a false coverage claim and the authenticity gate will reject it. If no proving test exists, create or extend a real one FIRST, then mark it — do not add the marker to make the gate pass.",
1890
+ "- One marker per behavior, placed inside the test file (a comment immediately above the proving test). Example (pytest): `# codd: covers vb=VB-07` directly above `def test_rejects_missing_id(): ...` whose body asserts the rejection. Example (vitest): `// codd: covers vb=VB-07` directly above the `it('rejects missing id', () => { expect(...).toThrow(); })`.",
1890
1891
  "",
1891
1892
  "Scoped assertions (precision, not weakening):",
1892
1893
  "- When a test asserts a CONTENT constraint over rendered or serialized output (e.g. \"displayed amounts contain no decimal point\", \"no personal data appears in the response\", \"every listed price shows a currency symbol\"), assert ONLY against the specific values or elements the constraint governs: parse and read the relevant nodes/fields under test (DOM elements, table cells, the parsed JSON values, the matched record), not the whole response body.",
@@ -540,6 +540,83 @@ class LayoutProfile:
540
540
  ),
541
541
  }
542
542
 
543
+ def harness_owned_scaffold_paths(self) -> tuple[str, ...]:
544
+ """Project-relative files the harness SCAFFOLD owns (the contract escape hatch).
545
+
546
+ These are the files :func:`scaffold_layout` creates for this stack —
547
+ topology + config the SUT never "owns" via a task, yet which are
548
+ legitimate generated artifacts (the orphan-artifact invariant's "owned by
549
+ a task OR an explicit harness/profile contract" branch). The orphan-gate
550
+ and the scoped-rerun write-fence consult this list so a scaffold file
551
+ (e.g. TS ``vitest.config.ts`` / ``tsconfig.json``) is never mis-flagged as
552
+ an unowned orphan and never reverted by the fence.
553
+
554
+ Language-agnostic: each path is DERIVED from this profile's own fields
555
+ (the same values the scaffolder uses) + the toolchain manifest/lock
556
+ filenames, so a new stack inherits the contract by populating its profile,
557
+ with no per-language logic in the gate. The list is a STATIC declaration of
558
+ what the scaffolder *can* create (not what is present on disk); callers
559
+ that need only existing files filter by ``is_file()``.
560
+ """
561
+ paths: list[str] = []
562
+
563
+ def _add(rel: str) -> None:
564
+ norm = _norm_rel(rel)
565
+ if norm and norm not in paths:
566
+ paths.append(norm)
567
+
568
+ # Dependency manifest + lockfile(s) the toolchain contract owns
569
+ # (package.json / package-lock.json; pyproject.toml / uv.lock; …).
570
+ toolchain = self.toolchain_dependencies
571
+ if toolchain is not None:
572
+ _add(toolchain.manifest_filename)
573
+ for lock in toolchain.lock_filenames:
574
+ _add(lock)
575
+
576
+ if self.language == "python":
577
+ # _scaffold_python: pyproject + package <__init__>/<__main__> + test <__init__>.
578
+ _add(_PYPROJECT_FILENAME)
579
+ if self.requires_package_init:
580
+ _add(f"{self.package_root}/__init__.py")
581
+ _add(f"{self.package_root}/__main__.py")
582
+ if self.requires_test_init:
583
+ _add(f"{self.test_root}/__init__.py")
584
+ elif self.language in ("typescript", "node"):
585
+ # _scaffold_typescript: tsconfig + vitest config + package.json.
586
+ _add(_TSCONFIG_FILENAME)
587
+ _add(_VITEST_CONFIG_FILENAME)
588
+ _add(_PACKAGE_JSON_FILENAME)
589
+
590
+ return tuple(paths)
591
+
592
+ def test_block_profile(self) -> Any:
593
+ """Resolve this stack's test-structure adapter for the VB authenticity gate.
594
+
595
+ Returns a ``codd.vb_marker_authenticity.TestBlockProfile`` (a per-language
596
+ parser that locates executable test blocks and resolves skip/assertion
597
+ facts) or ``None`` for a stack with no adapter — in which case the
598
+ authenticity gate gracefully degrades to its language-agnostic stage 1
599
+ (orphan-marker) check only. This is the SINGLE registration point for a
600
+ new stack's test parser, mirroring :meth:`harness_owned_scaffold_paths`
601
+ (dispatch on ``self.language``, no per-language logic in the gate). The
602
+ import is lazy so the authenticity module (which imports the VB audit) is
603
+ never pulled in at ``project_types`` import time.
604
+ """
605
+
606
+ try:
607
+ from codd.vb_marker_authenticity import (
608
+ PythonTestBlockProfile,
609
+ TypeScriptTestBlockProfile,
610
+ )
611
+ except Exception: # noqa: BLE001 — adapter is optional; degrade if unavailable.
612
+ return None
613
+
614
+ if self.language == "python":
615
+ return PythonTestBlockProfile()
616
+ if self.language in ("typescript", "node", "javascript"):
617
+ return TypeScriptTestBlockProfile()
618
+ return None
619
+
543
620
 
544
621
  def normalize_package_name(project_name: str | None, *, fallback: str = "app") -> str:
545
622
  """Derive a valid Python package identifier from a project name.