codd-dev 2.90.0__tar.gz → 2.92.0__tar.gz

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