codd-dev 2.91.0__tar.gz → 2.93.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 (624) hide show
  1. {codd_dev-2.91.0 → codd_dev-2.93.0}/PKG-INFO +1 -1
  2. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/__init__.py +1 -1
  3. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/cli.py +32 -4
  4. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/greenfield/pipeline.py +73 -5
  5. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/languages/adapters/runner_report.py +145 -0
  6. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/languages/builtin_adapters.py +6 -0
  7. codd_dev-2.93.0/codd/stack/command_authenticity.py +734 -0
  8. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/stack/command_plan.py +76 -2
  9. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/stack/compose.py +66 -7
  10. codd_dev-2.93.0/codd/stack/obligations.py +171 -0
  11. codd_dev-2.93.0/codd/stack/project.py +252 -0
  12. {codd_dev-2.91.0 → codd_dev-2.93.0}/pyproject.toml +1 -1
  13. codd_dev-2.91.0/codd/stack/obligations.py +0 -76
  14. codd_dev-2.91.0/codd/stack/project.py +0 -112
  15. {codd_dev-2.91.0 → codd_dev-2.93.0}/.gitignore +0 -0
  16. {codd_dev-2.91.0 → codd_dev-2.93.0}/LICENSE +0 -0
  17. {codd_dev-2.91.0 → codd_dev-2.93.0}/README.md +0 -0
  18. {codd_dev-2.91.0 → codd_dev-2.93.0}/bench_fixture/README.md +0 -0
  19. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/__main__.py +0 -0
  20. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/_git_helper.py +0 -0
  21. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/action_outcome.py +0 -0
  22. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/ai_invoke.py +0 -0
  23. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/ai_patch.py +0 -0
  24. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/artifact_contract.py +0 -0
  25. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/artifact_ids.py +0 -0
  26. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/artifacts/catalog.yaml +0 -0
  27. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/ask_user_question_adapter.py +0 -0
  28. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/assembler.py +0 -0
  29. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/bridge.py +0 -0
  30. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/brownfield/__init__.py +0 -0
  31. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/brownfield/pipeline.py +0 -0
  32. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/capability_completeness.py +0 -0
  33. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/claude_cli.py +0 -0
  34. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/clustering.py +0 -0
  35. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/coherence_adapters.py +0 -0
  36. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/coherence_engine.py +0 -0
  37. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/confidence.py +0 -0
  38. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/config.py +0 -0
  39. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/config_schema.py +0 -0
  40. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/contracts.py +0 -0
  41. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/contracts_registry/__init__.py +0 -0
  42. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/contracts_registry/__main__.py +0 -0
  43. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/contracts_registry/certify.py +0 -0
  44. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/contracts_registry/generate_matrix.py +0 -0
  45. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/contracts_registry/registry.py +0 -0
  46. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/coverage_auditor.py +0 -0
  47. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/coverage_execution_coherence.py +0 -0
  48. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/coverage_metrics.py +0 -0
  49. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/__init__.py +0 -0
  50. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/auto_repair.py +0 -0
  51. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/builder.py +0 -0
  52. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/checks/__init__.py +0 -0
  53. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/checks/_one_to_many_detection.py +0 -0
  54. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/checks/artifact_contract_check.py +0 -0
  55. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/checks/ci_health.py +0 -0
  56. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/checks/dependency_freshness.py +0 -0
  57. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/checks/depends_on_consistency.py +0 -0
  58. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/checks/deployment_completeness.py +0 -0
  59. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/checks/edge_validity.py +0 -0
  60. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/checks/environment_coverage.py +0 -0
  61. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/checks/implementation_coverage.py +0 -0
  62. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/checks/node_completeness.py +0 -0
  63. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/checks/opt_out.py +0 -0
  64. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/checks/task_completion.py +0 -0
  65. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/checks/transitive_closure.py +0 -0
  66. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/checks/ui_coherence.py +0 -0
  67. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/checks/user_journey_coherence.py +0 -0
  68. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/coverage_axes.py +0 -0
  69. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/defaults/cli.yaml +0 -0
  70. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
  71. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/defaults/csharp.yaml +0 -0
  72. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/defaults/elixir.yaml +0 -0
  73. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/defaults/generic.yaml +0 -0
  74. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/defaults/iot.yaml +0 -0
  75. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/defaults/java.yaml +0 -0
  76. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/defaults/kotlin.yaml +0 -0
  77. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/defaults/mobile.yaml +0 -0
  78. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/defaults/ruby.yaml +0 -0
  79. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/defaults/rust.yaml +0 -0
  80. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/defaults/scala.yaml +0 -0
  81. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/defaults/swift.yaml +0 -0
  82. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
  83. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/defaults/web.yaml +0 -0
  84. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/extractor.py +0 -0
  85. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/impact.py +0 -0
  86. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dag/runner.py +0 -0
  87. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/defaults.py +0 -0
  88. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/defaults.yaml +0 -0
  89. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/dependency_lock_coherence.py +0 -0
  90. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deploy_targets/__init__.py +0 -0
  91. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deploy_targets/app_service.py +0 -0
  92. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deploy_targets/base.py +0 -0
  93. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deploy_targets/docker_compose.py +0 -0
  94. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deployer.py +0 -0
  95. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deployment/__init__.py +0 -0
  96. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deployment/checks/__init__.py +0 -0
  97. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
  98. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
  99. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
  100. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
  101. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deployment/extractor.py +0 -0
  102. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deployment/providers/__init__.py +0 -0
  103. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deployment/providers/ai_command.py +0 -0
  104. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deployment/providers/ai_command_factory.py +0 -0
  105. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deployment/providers/codex_app_server.py +0 -0
  106. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deployment/providers/llm_consideration.py +0 -0
  107. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deployment/providers/schema/__init__.py +0 -0
  108. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deployment/providers/schema/prisma.py +0 -0
  109. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deployment/providers/target/__init__.py +0 -0
  110. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deployment/providers/target/docker_compose.py +0 -0
  111. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deployment/providers/verification/__init__.py +0 -0
  112. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
  113. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
  114. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
  115. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
  116. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
  117. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deployment/providers/verification/curl.py +0 -0
  118. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
  119. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
  120. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deployment/providers/verification/playwright.py +0 -0
  121. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deployment/providers/verification/pytest_http.py +0 -0
  122. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/deployment/providers/verification/vitest.py +0 -0
  123. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/design_md.py +0 -0
  124. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/diff/__init__.py +0 -0
  125. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/diff/apply.py +0 -0
  126. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/diff/engine.py +0 -0
  127. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/diff/persistence.py +0 -0
  128. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/diff/templates/diff_prompt.md +0 -0
  129. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/discovery.py +0 -0
  130. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/drift.py +0 -0
  131. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/e2e_contract_coherence.py +0 -0
  132. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/e2e_extractor.py +0 -0
  133. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/e2e_generator.py +0 -0
  134. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/e2e_harness.py +0 -0
  135. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/e2e_runner.py +0 -0
  136. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/elicit/__init__.py +0 -0
  137. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/elicit/apply.py +0 -0
  138. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/elicit/engine.py +0 -0
  139. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/elicit/finding.py +0 -0
  140. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/elicit/formatters/__init__.py +0 -0
  141. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/elicit/formatters/base.py +0 -0
  142. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/elicit/formatters/interactive.py +0 -0
  143. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/elicit/formatters/json_fmt.py +0 -0
  144. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/elicit/formatters/md.py +0 -0
  145. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/elicit/lexicon_loader.py +0 -0
  146. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/elicit/persistence.py +0 -0
  147. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/elicit/templates/elicit_prompt_L0.md +0 -0
  148. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/env_refs.py +0 -0
  149. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/extract_ai.py +0 -0
  150. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/extract_paths.py +0 -0
  151. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/extractor.py +0 -0
  152. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/fix/__init__.py +0 -0
  153. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/fix/candidate_selector.py +0 -0
  154. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/fix/design_updater.py +0 -0
  155. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/fix/impl_propagation.py +0 -0
  156. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/fix/interactive_prompt.py +0 -0
  157. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/fix/phenomenon_fixer.py +0 -0
  158. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/fix/phenomenon_parser.py +0 -0
  159. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/fix/risk_classifier.py +0 -0
  160. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/fix/templates/clarification_question.txt +0 -0
  161. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/fix/templates/design_update.txt +0 -0
  162. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/fix/templates/impl_update.txt +0 -0
  163. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/fix/templates/phenomenon_parse.txt +0 -0
  164. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/fix/templates/risk_assessment.txt +0 -0
  165. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/fix/templates_loader.py +0 -0
  166. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/fixer.py +0 -0
  167. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/fixup_drift.py +0 -0
  168. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/fixup_drift_strategies/__init__.py +0 -0
  169. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
  170. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
  171. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
  172. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/frontmatter.py +0 -0
  173. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/generator.py +0 -0
  174. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/git_evidence.py +0 -0
  175. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/graph.py +0 -0
  176. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/greenfield/__init__.py +0 -0
  177. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/hitl_session.py +0 -0
  178. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/hooks/__init__.py +0 -0
  179. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/hooks/pre-commit +0 -0
  180. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/hooks/recipes/claude_requirements_nudge.json +0 -0
  181. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
  182. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/hooks/recipes/codex_hook.sh +0 -0
  183. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
  184. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
  185. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/iac_nfr.py +0 -0
  186. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/implement_oracle.py +0 -0
  187. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/implement_oracle_scope.py +0 -0
  188. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/implement_oracle_types.py +0 -0
  189. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/implementer/__init__.py +0 -0
  190. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/implementer/chunked_runner.py +0 -0
  191. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/implementer/typecheck_loop.py +0 -0
  192. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/implementer.py +0 -0
  193. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/import_coherence.py +0 -0
  194. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/inheritance.py +0 -0
  195. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/init/__init__.py +0 -0
  196. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/init/lexicon_suggest.py +0 -0
  197. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/init/llm_lexicon_suggester.py +0 -0
  198. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/init/stack_detector.py +0 -0
  199. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/knowledge_fetcher.py +0 -0
  200. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/languages/__init__.py +0 -0
  201. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/languages/adapters/__init__.py +0 -0
  202. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/languages/adapters/implement_oracle.py +0 -0
  203. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/languages/adapters/oracle_go.py +0 -0
  204. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/languages/adapters/oracle_python.py +0 -0
  205. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/languages/adapters/oracle_typescript.py +0 -0
  206. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/languages/compat.py +0 -0
  207. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/languages/contract.py +0 -0
  208. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/languages/loader.py +0 -0
  209. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/languages/oracle_executor.py +0 -0
  210. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/languages/path_planner.py +0 -0
  211. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/languages/profile.py +0 -0
  212. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/languages/profiles/go.yaml +0 -0
  213. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/languages/profiles/python.yaml +0 -0
  214. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/languages/profiles/typescript.yaml +0 -0
  215. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/languages/registry.py +0 -0
  216. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/languages/verify_executor.py +0 -0
  217. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/languages/verify_plan.py +0 -0
  218. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/lexicon.py +0 -0
  219. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/lexicon_cli/__init__.py +0 -0
  220. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/lexicon_cli/formatters/__init__.py +0 -0
  221. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/lexicon_cli/formatters/html.py +0 -0
  222. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/lexicon_cli/formatters/json_fmt.py +0 -0
  223. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/lexicon_cli/formatters/md.py +0 -0
  224. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/lexicon_cli/inspector.py +0 -0
  225. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/lexicon_cli/manager.py +0 -0
  226. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/lexicon_cli/reporter.py +0 -0
  227. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/lexicon_cli/threshold.py +0 -0
  228. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/llm/__init__.py +0 -0
  229. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/llm/approval.py +0 -0
  230. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/llm/best_practice_augmenter.py +0 -0
  231. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/llm/criteria_expander.py +0 -0
  232. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/llm/design_doc_extractor.py +0 -0
  233. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/llm/impl_step_deriver.py +0 -0
  234. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/llm/means_catalog_loader.py +0 -0
  235. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/llm/parser.py +0 -0
  236. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/llm/plan_deriver.py +0 -0
  237. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/llm/prompt_builder.py +0 -0
  238. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/llm/strategy_validator.py +0 -0
  239. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
  240. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
  241. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
  242. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
  243. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
  244. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/llm/templates/meta_instruction.md +0 -0
  245. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/llm/templates/plan_derive_meta.md +0 -0
  246. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
  247. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/mcp_server.py +0 -0
  248. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/measure.py +0 -0
  249. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/operational_e2e_audit.py +0 -0
  250. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/operations_derive.py +0 -0
  251. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/parsing/__init__.py +0 -0
  252. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/parsing/_shared.py +0 -0
  253. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/parsing/api_specs.py +0 -0
  254. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/parsing/extractor_registry.py +0 -0
  255. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/parsing/filesystem_routes.py +0 -0
  256. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/parsing/iac.py +0 -0
  257. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/parsing/python_ast.py +0 -0
  258. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/parsing/regex_strategies.py +0 -0
  259. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/parsing/schemas.py +0 -0
  260. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/parsing/tests_builddeps.py +0 -0
  261. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/parsing/treesitter.py +0 -0
  262. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/planner.py +0 -0
  263. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/policy.py +0 -0
  264. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/preflight/__init__.py +0 -0
  265. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/preflight/defaults/cli.yaml +0 -0
  266. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/preflight/defaults/generic.yaml +0 -0
  267. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/preflight/defaults/iot.yaml +0 -0
  268. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/preflight/defaults/mobile.yaml +0 -0
  269. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/preflight/defaults/web.yaml +0 -0
  270. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/project_types.py +0 -0
  271. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/propagate.py +0 -0
  272. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/propagation_common.py +0 -0
  273. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/propagator.py +0 -0
  274. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/reconciliation_ledger.py +0 -0
  275. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/reference_resolution.py +0 -0
  276. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/registry.py +0 -0
  277. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/repair/__init__.py +0 -0
  278. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/repair/approval_repair.py +0 -0
  279. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/repair/auto_scope_guard.py +0 -0
  280. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/repair/engine.py +0 -0
  281. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/repair/git_patcher.py +0 -0
  282. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/repair/history.py +0 -0
  283. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/repair/llm_repair_engine.py +0 -0
  284. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/repair/loop.py +0 -0
  285. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/repair/primary_picker.py +0 -0
  286. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/repair/proof_breaks.py +0 -0
  287. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/repair/repair_result.py +0 -0
  288. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/repair/repairability_classifier.py +0 -0
  289. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/repair/schema.py +0 -0
  290. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/repair/templates/analyze_meta.md +0 -0
  291. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/repair/templates/propose_meta.md +0 -0
  292. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/repair/templates/repair_strategy_meta.md +0 -0
  293. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/repair/templates/repairability_meta.md +0 -0
  294. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/repair/test_failure_attribution.py +0 -0
  295. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/repair/verify_runner.py +0 -0
  296. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/repair_slice.py +0 -0
  297. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/require.py +0 -0
  298. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/require_plugins.py +0 -0
  299. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/require_propagate.py +0 -0
  300. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
  301. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/required_artifacts/defaults/generic.yaml +0 -0
  302. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
  303. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
  304. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/required_artifacts/defaults/web.yaml +0 -0
  305. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/required_artifacts_deriver.py +0 -0
  306. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
  307. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/requirement_completeness/defaults/generic.yaml +0 -0
  308. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
  309. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
  310. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
  311. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/requirement_completeness_auditor.py +0 -0
  312. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/requirement_reconciliation.py +0 -0
  313. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/requirements_meta.py +0 -0
  314. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/restoration_report.py +0 -0
  315. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/restore.py +0 -0
  316. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/routes_extractor.py +0 -0
  317. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/runtime_smoke/__init__.py +0 -0
  318. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/runtime_smoke/checks.py +0 -0
  319. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/runtime_smoke/config.py +0 -0
  320. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/runtime_smoke/report.py +0 -0
  321. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/runtime_smoke/runner.py +0 -0
  322. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/scanner.py +0 -0
  323. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/schema_refs.py +0 -0
  324. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/screen_flow_validator.py +0 -0
  325. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/screen_transition_extractor.py +0 -0
  326. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/screen_transitions/defaults.yaml +0 -0
  327. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/skills_cli/__init__.py +0 -0
  328. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/skills_cli/discovery.py +0 -0
  329. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/skills_cli/manager.py +0 -0
  330. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/skills_cli/paths.py +0 -0
  331. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/stack/__init__.py +0 -0
  332. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/stack/adapters/__init__.py +0 -0
  333. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/stack/adapters/_base.py +0 -0
  334. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/stack/adapters/nextjs.py +0 -0
  335. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/stack/adapters/playwright.py +0 -0
  336. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/stack/loader.py +0 -0
  337. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/stack/lock.py +0 -0
  338. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/stack/profile.py +0 -0
  339. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/stack/profiles/addons/playwright.yaml +0 -0
  340. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/stack/profiles/addons/prisma.yaml +0 -0
  341. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/stack/profiles/frameworks/nextjs.yaml +0 -0
  342. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/stack/registry.py +0 -0
  343. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/stack/resolve.py +0 -0
  344. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/surface_reconciliation.py +0 -0
  345. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/synth.py +0 -0
  346. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/templates/codd.yaml.tmpl +0 -0
  347. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/templates/conventions.yaml.tmpl +0 -0
  348. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
  349. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/templates/doc_links.yaml.tmpl +0 -0
  350. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
  351. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
  352. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
  353. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
  354. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
  355. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/templates/extracted/system-context.md.j2 +0 -0
  356. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/templates/gitignore.tmpl +0 -0
  357. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/templates/lexicon_questions.md +0 -0
  358. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/templates/lexicon_schema.yaml +0 -0
  359. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/templates/overrides.yaml.tmpl +0 -0
  360. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/test_detection.py +0 -0
  361. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/test_import_coherence.py +0 -0
  362. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/traceability.py +0 -0
  363. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/validator.py +0 -0
  364. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/vb_marker_authenticity.py +0 -0
  365. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/vb_rerun_scope.py +0 -0
  366. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/verifiable_behavior_audit.py +0 -0
  367. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/watch/__init__.py +0 -0
  368. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/watch/events.py +0 -0
  369. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/watch/propagation_log.py +0 -0
  370. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/watch/propagation_pipeline.py +0 -0
  371. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/watch/test_runner.py +0 -0
  372. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/watch/watcher.py +0 -0
  373. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd/wiring.py +0 -0
  374. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ai_governance_eu_act/coverage_matrix.md +0 -0
  375. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ai_governance_eu_act/elicit_extend.md +0 -0
  376. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ai_governance_eu_act/lexicon.yaml +0 -0
  377. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ai_governance_eu_act/manifest.yaml +0 -0
  378. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ai_governance_eu_act/recommended_kinds.yaml +0 -0
  379. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ai_governance_eu_act/severity_rules.yaml +0 -0
  380. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/api_rate_limiting_caching/coverage_matrix.md +0 -0
  381. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/api_rate_limiting_caching/elicit_extend.md +0 -0
  382. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/api_rate_limiting_caching/lexicon.yaml +0 -0
  383. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/api_rate_limiting_caching/manifest.yaml +0 -0
  384. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/api_rate_limiting_caching/recommended_kinds.yaml +0 -0
  385. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/api_rate_limiting_caching/severity_rules.yaml +0 -0
  386. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/api_rest_openapi/coverage_matrix.md +0 -0
  387. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/api_rest_openapi/elicit_extend.md +0 -0
  388. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/api_rest_openapi/lexicon.yaml +0 -0
  389. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/api_rest_openapi/manifest.yaml +0 -0
  390. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/api_rest_openapi/recommended_kinds.yaml +0 -0
  391. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/api_rest_openapi/severity_rules.yaml +0 -0
  392. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/babok/elicit_extend.md +0 -0
  393. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/babok/lexicon.yaml +0 -0
  394. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/babok/manifest.yaml +0 -0
  395. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/babok/recommended_kinds.yaml +0 -0
  396. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/babok/severity_rules.yaml +0 -0
  397. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/backend_event_cloudevents/coverage_matrix.md +0 -0
  398. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/backend_event_cloudevents/elicit_extend.md +0 -0
  399. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/backend_event_cloudevents/lexicon.yaml +0 -0
  400. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/backend_event_cloudevents/manifest.yaml +0 -0
  401. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/backend_event_cloudevents/recommended_kinds.yaml +0 -0
  402. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/backend_event_cloudevents/severity_rules.yaml +0 -0
  403. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/backend_graphql/coverage_matrix.md +0 -0
  404. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/backend_graphql/elicit_extend.md +0 -0
  405. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/backend_graphql/lexicon.yaml +0 -0
  406. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/backend_graphql/manifest.yaml +0 -0
  407. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/backend_graphql/recommended_kinds.yaml +0 -0
  408. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/backend_graphql/severity_rules.yaml +0 -0
  409. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/backend_grpc_proto/coverage_matrix.md +0 -0
  410. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/backend_grpc_proto/elicit_extend.md +0 -0
  411. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/backend_grpc_proto/lexicon.yaml +0 -0
  412. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/backend_grpc_proto/manifest.yaml +0 -0
  413. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/backend_grpc_proto/recommended_kinds.yaml +0 -0
  414. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/backend_grpc_proto/severity_rules.yaml +0 -0
  415. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/compliance_hipaa/coverage_matrix.md +0 -0
  416. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/compliance_hipaa/elicit_extend.md +0 -0
  417. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/compliance_hipaa/lexicon.yaml +0 -0
  418. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/compliance_hipaa/manifest.yaml +0 -0
  419. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/compliance_hipaa/recommended_kinds.yaml +0 -0
  420. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/compliance_hipaa/severity_rules.yaml +0 -0
  421. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/compliance_iso27001/coverage_matrix.md +0 -0
  422. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/compliance_iso27001/elicit_extend.md +0 -0
  423. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/compliance_iso27001/lexicon.yaml +0 -0
  424. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/compliance_iso27001/manifest.yaml +0 -0
  425. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/compliance_iso27001/recommended_kinds.yaml +0 -0
  426. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/compliance_iso27001/severity_rules.yaml +0 -0
  427. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/compliance_pci_dss_4/coverage_matrix.md +0 -0
  428. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/compliance_pci_dss_4/elicit_extend.md +0 -0
  429. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/compliance_pci_dss_4/lexicon.yaml +0 -0
  430. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/compliance_pci_dss_4/manifest.yaml +0 -0
  431. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/compliance_pci_dss_4/recommended_kinds.yaml +0 -0
  432. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/compliance_pci_dss_4/severity_rules.yaml +0 -0
  433. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/data_aggregation_policies/coverage_matrix.md +0 -0
  434. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/data_aggregation_policies/elicit_extend.md +0 -0
  435. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/data_aggregation_policies/lexicon.yaml +0 -0
  436. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/data_aggregation_policies/manifest.yaml +0 -0
  437. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/data_aggregation_policies/recommended_kinds.yaml +0 -0
  438. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/data_aggregation_policies/severity_rules.yaml +0 -0
  439. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/coverage_matrix.md +0 -0
  440. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/elicit_extend.md +0 -0
  441. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/lexicon.yaml +0 -0
  442. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/manifest.yaml +0 -0
  443. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/recommended_kinds.yaml +0 -0
  444. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/data_eventsourcing_es_cqrs/severity_rules.yaml +0 -0
  445. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/data_governance_appi_gdpr/coverage_matrix.md +0 -0
  446. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/data_governance_appi_gdpr/elicit_extend.md +0 -0
  447. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/data_governance_appi_gdpr/lexicon.yaml +0 -0
  448. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/data_governance_appi_gdpr/manifest.yaml +0 -0
  449. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/data_governance_appi_gdpr/recommended_kinds.yaml +0 -0
  450. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/data_governance_appi_gdpr/severity_rules.yaml +0 -0
  451. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/data_nosql_jsonschema/coverage_matrix.md +0 -0
  452. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/data_nosql_jsonschema/elicit_extend.md +0 -0
  453. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/data_nosql_jsonschema/lexicon.yaml +0 -0
  454. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/data_nosql_jsonschema/manifest.yaml +0 -0
  455. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/data_nosql_jsonschema/recommended_kinds.yaml +0 -0
  456. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/data_nosql_jsonschema/severity_rules.yaml +0 -0
  457. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/data_relational_iso_sql/coverage_matrix.md +0 -0
  458. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/data_relational_iso_sql/elicit_extend.md +0 -0
  459. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/data_relational_iso_sql/lexicon.yaml +0 -0
  460. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/data_relational_iso_sql/manifest.yaml +0 -0
  461. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/data_relational_iso_sql/recommended_kinds.yaml +0 -0
  462. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/data_relational_iso_sql/severity_rules.yaml +0 -0
  463. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ddd_domain_driven_design/coverage_matrix.md +0 -0
  464. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ddd_domain_driven_design/elicit_extend.md +0 -0
  465. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ddd_domain_driven_design/lexicon.yaml +0 -0
  466. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ddd_domain_driven_design/manifest.yaml +0 -0
  467. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ddd_domain_driven_design/recommended_kinds.yaml +0 -0
  468. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ddd_domain_driven_design/severity_rules.yaml +0 -0
  469. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/dora_sre_metrics/coverage_matrix.md +0 -0
  470. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/dora_sre_metrics/elicit_extend.md +0 -0
  471. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/dora_sre_metrics/lexicon.yaml +0 -0
  472. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/dora_sre_metrics/manifest.yaml +0 -0
  473. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/dora_sre_metrics/recommended_kinds.yaml +0 -0
  474. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/dora_sre_metrics/severity_rules.yaml +0 -0
  475. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/i18n_unicode_cldr/coverage_matrix.md +0 -0
  476. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/i18n_unicode_cldr/elicit_extend.md +0 -0
  477. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/i18n_unicode_cldr/lexicon.yaml +0 -0
  478. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/i18n_unicode_cldr/manifest.yaml +0 -0
  479. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/i18n_unicode_cldr/recommended_kinds.yaml +0 -0
  480. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/i18n_unicode_cldr/severity_rules.yaml +0 -0
  481. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ml_model_cards/coverage_matrix.md +0 -0
  482. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ml_model_cards/elicit_extend.md +0 -0
  483. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ml_model_cards/lexicon.yaml +0 -0
  484. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ml_model_cards/manifest.yaml +0 -0
  485. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ml_model_cards/recommended_kinds.yaml +0 -0
  486. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ml_model_cards/severity_rules.yaml +0 -0
  487. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/mobile_a11y_native/coverage_matrix.md +0 -0
  488. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/mobile_a11y_native/elicit_extend.md +0 -0
  489. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/mobile_a11y_native/lexicon.yaml +0 -0
  490. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/mobile_a11y_native/manifest.yaml +0 -0
  491. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/mobile_a11y_native/recommended_kinds.yaml +0 -0
  492. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/mobile_a11y_native/severity_rules.yaml +0 -0
  493. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/mobile_android_material3/coverage_matrix.md +0 -0
  494. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/mobile_android_material3/elicit_extend.md +0 -0
  495. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/mobile_android_material3/lexicon.yaml +0 -0
  496. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/mobile_android_material3/manifest.yaml +0 -0
  497. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/mobile_android_material3/recommended_kinds.yaml +0 -0
  498. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/mobile_android_material3/severity_rules.yaml +0 -0
  499. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/mobile_ios_hig/coverage_matrix.md +0 -0
  500. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/mobile_ios_hig/elicit_extend.md +0 -0
  501. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/mobile_ios_hig/lexicon.yaml +0 -0
  502. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/mobile_ios_hig/manifest.yaml +0 -0
  503. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/mobile_ios_hig/recommended_kinds.yaml +0 -0
  504. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/mobile_ios_hig/severity_rules.yaml +0 -0
  505. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/mobile_security_masvs/coverage_matrix.md +0 -0
  506. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/mobile_security_masvs/elicit_extend.md +0 -0
  507. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/mobile_security_masvs/lexicon.yaml +0 -0
  508. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/mobile_security_masvs/manifest.yaml +0 -0
  509. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/mobile_security_masvs/recommended_kinds.yaml +0 -0
  510. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/mobile_security_masvs/severity_rules.yaml +0 -0
  511. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ops_cicd_pipeline/coverage_matrix.md +0 -0
  512. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ops_cicd_pipeline/elicit_extend.md +0 -0
  513. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ops_cicd_pipeline/lexicon.yaml +0 -0
  514. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ops_cicd_pipeline/manifest.yaml +0 -0
  515. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ops_cicd_pipeline/recommended_kinds.yaml +0 -0
  516. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ops_cicd_pipeline/severity_rules.yaml +0 -0
  517. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ops_iac_terraform/coverage_matrix.md +0 -0
  518. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ops_iac_terraform/elicit_extend.md +0 -0
  519. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ops_iac_terraform/lexicon.yaml +0 -0
  520. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ops_iac_terraform/manifest.yaml +0 -0
  521. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ops_iac_terraform/recommended_kinds.yaml +0 -0
  522. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ops_iac_terraform/severity_rules.yaml +0 -0
  523. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ops_kubernetes/coverage_matrix.md +0 -0
  524. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ops_kubernetes/elicit_extend.md +0 -0
  525. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ops_kubernetes/lexicon.yaml +0 -0
  526. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ops_kubernetes/manifest.yaml +0 -0
  527. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ops_kubernetes/recommended_kinds.yaml +0 -0
  528. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ops_kubernetes/severity_rules.yaml +0 -0
  529. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ops_observability_otel/coverage_matrix.md +0 -0
  530. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ops_observability_otel/elicit_extend.md +0 -0
  531. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ops_observability_otel/lexicon.yaml +0 -0
  532. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ops_observability_otel/manifest.yaml +0 -0
  533. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ops_observability_otel/recommended_kinds.yaml +0 -0
  534. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/ops_observability_otel/severity_rules.yaml +0 -0
  535. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/process_iso25010/coverage_matrix.md +0 -0
  536. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/process_iso25010/elicit_extend.md +0 -0
  537. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/process_iso25010/lexicon.yaml +0 -0
  538. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/process_iso25010/manifest.yaml +0 -0
  539. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/process_iso25010/recommended_kinds.yaml +0 -0
  540. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/process_iso25010/severity_rules.yaml +0 -0
  541. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/process_test_iso29119/coverage_matrix.md +0 -0
  542. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/process_test_iso29119/elicit_extend.md +0 -0
  543. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/process_test_iso29119/lexicon.yaml +0 -0
  544. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/process_test_iso29119/manifest.yaml +0 -0
  545. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/process_test_iso29119/recommended_kinds.yaml +0 -0
  546. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/process_test_iso29119/severity_rules.yaml +0 -0
  547. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/twelve_factor_app/coverage_matrix.md +0 -0
  548. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/twelve_factor_app/elicit_extend.md +0 -0
  549. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/twelve_factor_app/lexicon.yaml +0 -0
  550. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/twelve_factor_app/manifest.yaml +0 -0
  551. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/twelve_factor_app/recommended_kinds.yaml +0 -0
  552. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/twelve_factor_app/severity_rules.yaml +0 -0
  553. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/coverage_matrix.md +0 -0
  554. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/elicit_extend.md +0 -0
  555. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/lexicon.yaml +0 -0
  556. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/manifest.yaml +0 -0
  557. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/recommended_kinds.yaml +0 -0
  558. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_a11y_wcag22_aa/severity_rules.yaml +0 -0
  559. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_authn_webauthn/coverage_matrix.md +0 -0
  560. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_authn_webauthn/elicit_extend.md +0 -0
  561. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_authn_webauthn/lexicon.yaml +0 -0
  562. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_authn_webauthn/manifest.yaml +0 -0
  563. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_authn_webauthn/recommended_kinds.yaml +0 -0
  564. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_authn_webauthn/severity_rules.yaml +0 -0
  565. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_browser_compat/coverage_matrix.md +0 -0
  566. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_browser_compat/elicit_extend.md +0 -0
  567. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_browser_compat/lexicon.yaml +0 -0
  568. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_browser_compat/manifest.yaml +0 -0
  569. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_browser_compat/recommended_kinds.yaml +0 -0
  570. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_browser_compat/severity_rules.yaml +0 -0
  571. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_forms_html5/coverage_matrix.md +0 -0
  572. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_forms_html5/elicit_extend.md +0 -0
  573. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_forms_html5/lexicon.yaml +0 -0
  574. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_forms_html5/manifest.yaml +0 -0
  575. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_forms_html5/recommended_kinds.yaml +0 -0
  576. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_forms_html5/severity_rules.yaml +0 -0
  577. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_performance_core_web_vitals/coverage_matrix.md +0 -0
  578. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_performance_core_web_vitals/elicit_extend.md +0 -0
  579. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_performance_core_web_vitals/lexicon.yaml +0 -0
  580. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_performance_core_web_vitals/manifest.yaml +0 -0
  581. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_performance_core_web_vitals/recommended_kinds.yaml +0 -0
  582. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_performance_core_web_vitals/severity_rules.yaml +0 -0
  583. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_pwa_manifest/coverage_matrix.md +0 -0
  584. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_pwa_manifest/elicit_extend.md +0 -0
  585. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_pwa_manifest/lexicon.yaml +0 -0
  586. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_pwa_manifest/manifest.yaml +0 -0
  587. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_pwa_manifest/recommended_kinds.yaml +0 -0
  588. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_pwa_manifest/severity_rules.yaml +0 -0
  589. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_responsive/coverage_matrix.md +0 -0
  590. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_responsive/elicit_extend.md +0 -0
  591. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_responsive/lexicon.yaml +0 -0
  592. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_responsive/manifest.yaml +0 -0
  593. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_responsive/recommended_kinds.yaml +0 -0
  594. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_responsive/severity_rules.yaml +0 -0
  595. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_security_owasp/coverage_matrix.md +0 -0
  596. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_security_owasp/elicit_extend.md +0 -0
  597. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_security_owasp/lexicon.yaml +0 -0
  598. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_security_owasp/manifest.yaml +0 -0
  599. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_security_owasp/recommended_kinds.yaml +0 -0
  600. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_security_owasp/severity_rules.yaml +0 -0
  601. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_seo_schemaorg/coverage_matrix.md +0 -0
  602. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_seo_schemaorg/elicit_extend.md +0 -0
  603. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_seo_schemaorg/lexicon.yaml +0 -0
  604. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_seo_schemaorg/manifest.yaml +0 -0
  605. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_seo_schemaorg/recommended_kinds.yaml +0 -0
  606. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/lexicons/web_seo_schemaorg/severity_rules.yaml +0 -0
  607. {codd_dev-2.91.0 → codd_dev-2.93.0}/codd_plugins/stack_map.yaml +0 -0
  608. {codd_dev-2.91.0 → codd_dev-2.93.0}/docs/cookbook/cdp_browser/README.md +0 -0
  609. {codd_dev-2.91.0 → codd_dev-2.93.0}/docs/cookbook/presentation_aggregation/README.md +0 -0
  610. {codd_dev-2.91.0 → codd_dev-2.93.0}/docs/requirements/README.md +0 -0
  611. {codd_dev-2.91.0 → codd_dev-2.93.0}/dogfood/README.md +0 -0
  612. {codd_dev-2.91.0 → codd_dev-2.93.0}/dogfood/fixtures/flat_py_app/README.md +0 -0
  613. {codd_dev-2.91.0 → codd_dev-2.93.0}/examples/README.md +0 -0
  614. {codd_dev-2.91.0 → codd_dev-2.93.0}/skills/codd-assemble/SKILL.md +0 -0
  615. {codd_dev-2.91.0 → codd_dev-2.93.0}/skills/codd-evolve/SKILL.md +0 -0
  616. {codd_dev-2.91.0 → codd_dev-2.93.0}/skills/codd-generate/SKILL.md +0 -0
  617. {codd_dev-2.91.0 → codd_dev-2.93.0}/skills/codd-greenfield/SKILL.md +0 -0
  618. {codd_dev-2.91.0 → codd_dev-2.93.0}/skills/codd-impact/SKILL.md +0 -0
  619. {codd_dev-2.91.0 → codd_dev-2.93.0}/skills/codd-init/SKILL.md +0 -0
  620. {codd_dev-2.91.0 → codd_dev-2.93.0}/skills/codd-propagate/SKILL.md +0 -0
  621. {codd_dev-2.91.0 → codd_dev-2.93.0}/skills/codd-restore/SKILL.md +0 -0
  622. {codd_dev-2.91.0 → codd_dev-2.93.0}/skills/codd-scan/SKILL.md +0 -0
  623. {codd_dev-2.91.0 → codd_dev-2.93.0}/skills/codd-validate/SKILL.md +0 -0
  624. {codd_dev-2.91.0 → codd_dev-2.93.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.91.0
3
+ Version: 2.93.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.91.0"
3
+ __version__ = "2.93.0"
@@ -7663,7 +7663,7 @@ def _intake_stack_contract_for_verify(project_root: Path, *, stack_command_execu
7663
7663
  if gate.red:
7664
7664
  raise SystemExit(1)
7665
7665
 
7666
- # Stack command MATERIALIZATION (Contract Kernel v2.77c) — the verify-path mirror
7666
+ # Stack command MATERIALIZATION (Contract Kernel v2.77c/d) — the verify-path mirror
7667
7667
  # of the greenfield pipeline's :meth:`_materialize_stack_commands`. (1) CONFLICT
7668
7668
  # GATE: a composition conflict (command collision / unproved replace / weakened
7669
7669
  # obligation / exclusive / deny) is RED (honest non-zero exit) — the composer
@@ -7671,8 +7671,10 @@ def _intake_stack_contract_for_verify(project_root: Path, *, stack_command_execu
7671
7671
  # a gate. (2) PLAN + EXECUTE: build a deterministic, contract-driven command plan
7672
7672
  # (NO framework literal) and INVOKE each composed slot by exit code, so a declared
7673
7673
  # framework_build/e2e_test is genuinely run on verify (not silently skipped while
7674
- # the language verify greens alone). Exit-code ONLY here; command AUTHENTICITY is
7675
- # v2.77d and the obligation-checker gate is v2.77e (out of lane).
7674
+ # the language verify greens alone). (3) AUTHENTICITY (v2.77d): exit 0 is necessary
7675
+ # but NOT sufficient a no-op / observed-no-tests / missing-or-unreadable-report
7676
+ # slot is RED even on exit 0. The obligation-checker gate is v2.77e (out of lane).
7677
+ from codd.stack.command_authenticity import StackCommandAuthenticityError
7676
7678
  from codd.stack.command_plan import (
7677
7679
  StackCommandMaterializationError,
7678
7680
  StackContractConflictError,
@@ -7683,7 +7685,11 @@ def _intake_stack_contract_for_verify(project_root: Path, *, stack_command_execu
7683
7685
  plan, _result = materialize_stack_command_plan(
7684
7686
  contract, project_root, executor=stack_command_executor
7685
7687
  )
7686
- except (StackContractConflictError, StackCommandMaterializationError) as exc:
7688
+ except (
7689
+ StackContractConflictError,
7690
+ StackCommandMaterializationError,
7691
+ StackCommandAuthenticityError,
7692
+ ) as exc:
7687
7693
  click.echo(f"[verify] stack command materialization: {exc}", err=True)
7688
7694
  raise SystemExit(1) from exc
7689
7695
  click.echo(
@@ -7691,6 +7697,28 @@ def _intake_stack_contract_for_verify(project_root: Path, *, stack_command_execu
7691
7697
  f"({', '.join(plan.command_ids)})"
7692
7698
  )
7693
7699
 
7700
+ # Stack obligation CHECKER gate (Contract Kernel v2.77e) — the verify-path mirror of
7701
+ # the greenfield pipeline's :meth:`GreenfieldPipeline._enforce_stack_obligations`.
7702
+ # AFTER materialization (v2.77c) + authenticity (v2.77d), CHECK the composed
7703
+ # framework/addon OBLIGATIONS as a red/green gate: the Next.js ignoreBuildErrors guard
7704
+ # reds a build that would pass with type errors; the Playwright e2e_actually_executed
7705
+ # obligation reds a 0-test run. Anti-false-green: a missing/disabled/faulting checker
7706
+ # or an unenforceable ERROR obligation is RED (honest non-zero exit), never a silent
7707
+ # pass. Uses the ALREADY-RESOLVED ``contract`` from intake (no re-resolution from disk
7708
+ # — avoids a TOCTOU skip) and the SAME current-run evidence the authenticity layer
7709
+ # blessed. A non-stack project never reaches here (byte-identical).
7710
+ from codd.stack.project import StackObligationGateError, enforce_stack_obligation_gate
7711
+
7712
+ try:
7713
+ enforce_stack_obligation_gate(contract, project_root)
7714
+ except StackObligationGateError as exc:
7715
+ click.echo(f"[verify] stack obligation gate: {exc}", err=True)
7716
+ raise SystemExit(1) from exc
7717
+ click.echo(
7718
+ f"[verify] stack obligation gate: {len(contract.obligations)} obligation(s) checked "
7719
+ "— all enforced obligations satisfied"
7720
+ )
7721
+
7694
7722
 
7695
7723
  def _run_verify_once(
7696
7724
  path: str,
@@ -533,6 +533,26 @@ class GreenfieldPipeline:
533
533
  {"status": STATUS_PENDING, "detail": ""}, str(exc),
534
534
  )
535
535
 
536
+ # Stack obligation CHECKER gate (Contract Kernel v2.77e) — turn the framework/
537
+ # addon OBLIGATIONS into a red/green gate, AFTER materialization+authenticity. The
538
+ # composed commands now run (v2.77c) and are authentic (v2.77d); this CHECKS the
539
+ # declared obligations (the Next.js ignoreBuildErrors guard reds a build that would
540
+ # pass with type errors; the Playwright e2e_actually_executed obligation reds a
541
+ # 0-test run). Anti-false-green: a missing/disabled/faulting checker or an
542
+ # unenforceable ERROR obligation is RED, never a silent pass. Uses the ALREADY-
543
+ # RESOLVED contract (no re-resolution from disk — avoids a TOCTOU skip) and the
544
+ # SAME current-run evidence the authenticity layer blessed. Only for stack-declared
545
+ # projects (contract is not None) — a non-stack run is byte-identical (no gate).
546
+ # Routed through _fail like intake/lock/materialization.
547
+ try:
548
+ if contract is not None:
549
+ self._enforce_stack_obligations(project_root, session, contract)
550
+ except StageError as exc:
551
+ return self._fail(
552
+ project_root, session, options, "stack_obligations",
553
+ {"status": STATUS_PENDING, "detail": ""}, str(exc),
554
+ )
555
+
536
556
  runners: dict[str, Callable[[Path, dict[str, Any], dict[str, Any]], None]] = {
537
557
  "init": self._stage_init,
538
558
  "elicit": self._stage_elicit,
@@ -715,15 +735,20 @@ class GreenfieldPipeline:
715
735
  2. MATERIALIZE — build a deterministic, contract-driven command plan and
716
736
  INVOKE each composed slot by exit code (via the injectable
717
737
  ``stack_command_executor`` seam). A failing slot raises
718
- :class:`StackCommandMaterializationError`. Both domain errors become a
738
+ :class:`StackCommandMaterializationError`.
739
+ 3. AUTHENTICITY (v2.77d) — exit 0 is necessary but NOT sufficient: each slot
740
+ must prove it did its job for its kind (a no-op / observed-no-tests /
741
+ missing-or-unreadable-report command is RED even on exit 0), raising
742
+ :class:`StackCommandAuthenticityError`. All three domain errors become a
719
743
  :class:`StageError` so the autopilot reports them honestly (the run does
720
- NOT advance to the stage loop with a conflicted/failing stack plan).
744
+ NOT advance to the stage loop with a conflicted/failing/inauthentic plan).
721
745
 
722
746
  The materialized plan + executed slot ids are recorded in the run trace
723
747
  (observable, like the intake hash + lock verdict) so "the declared stack
724
- command slots were invoked" is provable. Exit-code only — authenticity is
725
- v2.77d, the obligation-checker gate is v2.77e.
748
+ command slots were invoked AND authentic" is provable. The obligation-checker
749
+ gate (``verify_project_stack``) is v2.77e (out of lane here).
726
750
  """
751
+ from codd.stack.command_authenticity import StackCommandAuthenticityError
727
752
  from codd.stack.command_plan import (
728
753
  StackCommandMaterializationError,
729
754
  StackContractConflictError,
@@ -734,7 +759,11 @@ class GreenfieldPipeline:
734
759
  plan, result = materialize_stack_command_plan(
735
760
  contract, project_root, executor=self.stack_command_executor
736
761
  )
737
- except (StackContractConflictError, StackCommandMaterializationError) as exc:
762
+ except (
763
+ StackContractConflictError,
764
+ StackCommandMaterializationError,
765
+ StackCommandAuthenticityError,
766
+ ) as exc:
738
767
  self.echo(f"[greenfield] stack command materialization: {exc}")
739
768
  raise StageError(str(exc)) from exc
740
769
 
@@ -747,6 +776,45 @@ class GreenfieldPipeline:
747
776
  f"{len(plan.slots)} slot(s) invoked ({', '.join(plan.command_ids)})"
748
777
  )
749
778
 
779
+ # ── stack obligation checker gate (Contract Kernel v2.77e) ──
780
+
781
+ def _enforce_stack_obligations(self, project_root: Path, session: dict[str, Any], contract) -> None:
782
+ """Run the composed stack obligation checkers as a red/green gate (v2.77e).
783
+
784
+ See the call site in :meth:`run`. Only invoked for stack-declared projects
785
+ (``contract is not None``); non-stack projects never reach here, so they are
786
+ byte-identical (no obligation gate at all).
787
+
788
+ Uses the ALREADY-RESOLVED ``contract`` (passed in from intake/lock/
789
+ materialization) — NOT a re-resolution from disk — so a stack file that changes
790
+ or is deleted after materialization cannot make this gate silently skip (a
791
+ TOCTOU false-green). :func:`enforce_stack_obligation_gate` invokes every
792
+ obligation's registered checker with ``project_root`` plus the current-run
793
+ evidence (the SAME e2e report the authenticity layer blessed), and raises
794
+ :class:`StackObligationGateError` unless every ERROR obligation was genuinely
795
+ enforced AND satisfied: a blocking violation, an unenforced ERROR obligation
796
+ (no registered checker — unverifiable), or a checker fault (raised / None /
797
+ malformed return) is RED. Translated to :class:`StageError` so the autopilot
798
+ reports it honestly via ``_fail``. The per-obligation verdict counts are
799
+ recorded in the run trace (observable, like the lock verdict + command plan).
800
+ """
801
+ from codd.stack.project import StackObligationGateError, enforce_stack_obligation_gate
802
+
803
+ try:
804
+ result = enforce_stack_obligation_gate(contract, project_root)
805
+ except StackObligationGateError as exc:
806
+ self.echo(f"[greenfield] stack obligation gate: {exc}")
807
+ raise StageError(str(exc)) from exc
808
+
809
+ record = session.get("stack_contract")
810
+ if isinstance(record, dict) and result is not None:
811
+ record["stack_obligations_checked"] = len(contract.obligations)
812
+ record["stack_obligations_unenforced"] = [o.id for o in result.unenforced]
813
+ self.echo(
814
+ "[greenfield] stack obligation gate: "
815
+ f"{len(contract.obligations)} obligation(s) checked — all enforced obligations satisfied"
816
+ )
817
+
750
818
  # ── option resolution ───────────────────────────────────
751
819
 
752
820
  def _resolve_options(self, project_root: Path) -> dict[str, Any]:
@@ -194,6 +194,151 @@ class VitestJsonReportAdapter:
194
194
  )
195
195
 
196
196
 
197
+ @dataclass(frozen=True)
198
+ class PlaywrightJsonReportAdapter:
199
+ """Playwright ``--reporter=json`` adapter (the stack ``playwright_json`` report).
200
+
201
+ ``npx playwright test --reporter=json`` emits a single top-level object whose
202
+ ``suites`` array is a TREE: each suite has nested ``suites`` and ``specs``; each
203
+ *spec* carries a ``title``, a ``file`` (project-relative test file), and a
204
+ ``tests`` array; each *test* carries ``results`` (one per retry/attempt) and an
205
+ overall ``status`` (Playwright's roll-up: ``expected`` / ``unexpected`` /
206
+ ``flaky`` / ``skipped``). A test is a clean PASS only when its overall status is
207
+ ``expected``; ``unexpected`` (a failure), ``flaky`` (passed only on retry — not a
208
+ clean first-run pass) and ``skipped`` (a skip proves nothing — the SAME rule the
209
+ vitest/go adapters and the static authenticity gate apply) are NOT clean. A spec's
210
+ FILE is in ``executed_passed_files`` only when it ran ≥1 test and EVERY test in it
211
+ was clean; any non-clean test taints the whole file into ``executed_failed_files``.
212
+
213
+ Mirrors :class:`VitestJsonReportAdapter`'s contract exactly: it raises
214
+ :class:`RunnerReportUnsupported` on a structurally-unreadable report (missing /
215
+ garbled / not an object / no ``suites`` array) so the authenticity gate degrades
216
+ EXPLICITLY (REPORT_UNREADABLE), never silently treating "nothing parseable" as
217
+ "nothing ran" (a false-green). ``test_level_available`` is True whenever any test
218
+ case was observed, so a TEST-kind stack command can require test-level evidence.
219
+ """
220
+
221
+ def parse(self, report_path: Path, *, project_root: Path) -> RunnerExecution:
222
+ try:
223
+ payload = json.loads(report_path.read_text(encoding="utf-8"))
224
+ except (OSError, json.JSONDecodeError) as exc:
225
+ raise RunnerReportUnsupported(
226
+ f"playwright JSON report unreadable at {report_path}: {exc}"
227
+ ) from exc
228
+ if not isinstance(payload, dict):
229
+ raise RunnerReportUnsupported(
230
+ f"playwright JSON report at {report_path} is not an object"
231
+ )
232
+ suites = payload.get("suites")
233
+ if not isinstance(suites, list):
234
+ raise RunnerReportUnsupported(
235
+ f"playwright JSON report at {report_path} has no suites array"
236
+ )
237
+
238
+ passed_files: set[str] = set()
239
+ failed_files: set[str] = set()
240
+ passed_cases: set[str] = set()
241
+ # Per-file rollup: did the file collect any case, and is every case clean?
242
+ file_any_case: dict[str, bool] = {}
243
+ file_clean: dict[str, bool] = {}
244
+ total_cases = 0
245
+ passed_count = 0
246
+
247
+ for spec in _iter_playwright_specs(suites):
248
+ rel = _relativize(str(spec.get("file") or ""), project_root)
249
+ if rel is None:
250
+ continue
251
+ spec_title = str(spec.get("title") or "").strip()
252
+ tests = spec.get("tests")
253
+ tests = tests if isinstance(tests, list) else []
254
+ file_any_case.setdefault(rel, False)
255
+ file_clean.setdefault(rel, True)
256
+ for test in tests:
257
+ if not isinstance(test, dict):
258
+ continue
259
+ status = str(test.get("status") or "").strip().lower()
260
+ if not status:
261
+ # No roll-up status: fall back to the worst per-result status so a
262
+ # malformed test never sneaks in as a clean pass.
263
+ status = _playwright_results_status(test.get("results"))
264
+ if not status:
265
+ continue
266
+ file_any_case[rel] = True
267
+ total_cases += 1
268
+ if status == "expected":
269
+ passed_count += 1
270
+ name = (test.get("title") or spec_title or "").strip()
271
+ key = f"{rel}::{name}" if name else rel
272
+ passed_cases.add(key)
273
+ else:
274
+ # unexpected / flaky / skipped / timedOut / interrupted — none is a
275
+ # clean pass; the whole file is tainted (a skip proves nothing).
276
+ file_clean[rel] = False
277
+
278
+ for rel, any_case in file_any_case.items():
279
+ if not any_case:
280
+ # A spec file that collected zero cases is not a pass (collected nothing).
281
+ continue
282
+ if file_clean.get(rel, False):
283
+ passed_files.add(rel)
284
+ else:
285
+ failed_files.add(rel)
286
+
287
+ return RunnerExecution(
288
+ executed_passed_files=frozenset(passed_files),
289
+ executed_failed_files=frozenset(failed_files),
290
+ executed_passed_cases=frozenset(passed_cases),
291
+ test_level_available=total_cases > 0,
292
+ total_cases=total_cases,
293
+ passed_cases=passed_count,
294
+ )
295
+
296
+
297
+ def _iter_playwright_specs(suites: list):
298
+ """Yield every ``spec`` mapping in a Playwright suite TREE (recursive).
299
+
300
+ Playwright nests ``suites`` arbitrarily (file suite → describe blocks → …); each
301
+ level may carry ``specs`` and further ``suites``. We walk the whole tree so a test
302
+ nested under any number of ``describe`` blocks is still observed.
303
+ """
304
+ stack = list(suites)
305
+ while stack:
306
+ node = stack.pop()
307
+ if not isinstance(node, dict):
308
+ continue
309
+ specs = node.get("specs")
310
+ if isinstance(specs, list):
311
+ for spec in specs:
312
+ if isinstance(spec, dict):
313
+ yield spec
314
+ child_suites = node.get("suites")
315
+ if isinstance(child_suites, list):
316
+ stack.extend(child_suites)
317
+
318
+
319
+ def _playwright_results_status(results: Any) -> str:
320
+ """Worst-case status across a test's ``results`` (retries), Playwright vocabulary.
321
+
322
+ Used only as a fallback when a test omits its roll-up ``status``. Any non-passed
323
+ result (``failed`` / ``timedOut`` / ``interrupted``) makes the test non-clean; a
324
+ ``skipped`` result is non-clean too; all ``passed`` ⇒ ``expected``. Returns ``""``
325
+ when there is nothing to judge.
326
+ """
327
+ if not isinstance(results, list):
328
+ return ""
329
+ seen = False
330
+ for res in results:
331
+ if not isinstance(res, dict):
332
+ continue
333
+ status = str(res.get("status") or "").strip().lower()
334
+ if not status:
335
+ continue
336
+ seen = True
337
+ if status != "passed":
338
+ return "unexpected"
339
+ return "expected" if seen else ""
340
+
341
+
197
342
  @dataclass(frozen=True)
198
343
  class GoTestJsonReportAdapter:
199
344
  """``go test -json`` (line-delimited JSON) reporter adapter.
@@ -77,11 +77,17 @@ def ensure_builtin_adapters_registered(registry: AdapterRegistry | None = None)
77
77
  # import time, so codd.languages stays free of an adapter/coverage import cycle.
78
78
  from codd.languages.adapters.runner_report import (
79
79
  GoTestJsonReportAdapter,
80
+ PlaywrightJsonReportAdapter,
80
81
  VitestJsonReportAdapter,
81
82
  )
82
83
 
83
84
  _register_once(target, "runner_report", "vitest-json", VitestJsonReportAdapter())
84
85
  _register_once(target, "runner_report", "go-test-json", GoTestJsonReportAdapter())
86
+ # Stack e2e: the Playwright addon declares ``report.adapter: playwright_json`` —
87
+ # register under that EXACT id so a TEST-kind stack command's required report has a
88
+ # resolvable adapter (an unregistered adapter for a required report is RED, never a
89
+ # silent skip; v2.77d authenticity). Underscore spelling matches the profile.
90
+ _register_once(target, "runner_report", "playwright_json", PlaywrightJsonReportAdapter())
85
91
 
86
92
  # Implement-oracle tool-semantics adapters (Contract Kernel oracle dispatch §3).
87
93
  # All three concrete adapters (go-toolchain / python-composite / typescript-tsc)