codd-dev 1.34.0__tar.gz → 1.35.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 (224) hide show
  1. codd_dev-1.35.0/PKG-INFO +354 -0
  2. codd_dev-1.35.0/README.md +314 -0
  3. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/cli.py +1209 -905
  4. codd_dev-1.35.0/codd/diff/__init__.py +6 -0
  5. codd_dev-1.35.0/codd/diff/apply.py +225 -0
  6. codd_dev-1.35.0/codd/diff/engine.py +192 -0
  7. codd_dev-1.35.0/codd/diff/persistence.py +101 -0
  8. codd_dev-1.35.0/codd/diff/templates/diff_prompt.md +37 -0
  9. codd_dev-1.35.0/codd/elicit/__init__.py +15 -0
  10. codd_dev-1.35.0/codd/elicit/apply.py +232 -0
  11. codd_dev-1.35.0/codd/elicit/engine.py +259 -0
  12. codd_dev-1.35.0/codd/elicit/finding.py +153 -0
  13. codd_dev-1.35.0/codd/elicit/formatters/__init__.py +8 -0
  14. codd_dev-1.35.0/codd/elicit/formatters/base.py +18 -0
  15. codd_dev-1.35.0/codd/elicit/formatters/interactive.py +102 -0
  16. codd_dev-1.35.0/codd/elicit/formatters/json_fmt.py +31 -0
  17. codd_dev-1.35.0/codd/elicit/formatters/md.py +103 -0
  18. codd_dev-1.35.0/codd/elicit/lexicon_loader.py +156 -0
  19. codd_dev-1.35.0/codd/elicit/persistence.py +153 -0
  20. codd_dev-1.35.0/codd/elicit/templates/elicit_prompt_L0.md +66 -0
  21. codd_dev-1.35.0/codd/repair/proof_breaks.py +220 -0
  22. {codd_dev-1.34.0 → codd_dev-1.35.0}/pyproject.toml +1 -1
  23. codd_dev-1.34.0/PKG-INFO +0 -1141
  24. codd_dev-1.34.0/README.md +0 -1101
  25. {codd_dev-1.34.0 → codd_dev-1.35.0}/.gitignore +0 -0
  26. {codd_dev-1.34.0 → codd_dev-1.35.0}/LICENSE +0 -0
  27. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/__init__.py +0 -0
  28. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/__main__.py +0 -0
  29. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/_git_helper.py +0 -0
  30. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/ask_user_question_adapter.py +0 -0
  31. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/assembler.py +0 -0
  32. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/bridge.py +0 -0
  33. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/clustering.py +0 -0
  34. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/coherence_adapters.py +0 -0
  35. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/coherence_engine.py +0 -0
  36. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/config.py +0 -0
  37. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/contracts.py +0 -0
  38. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/coverage_auditor.py +0 -0
  39. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/coverage_metrics.py +0 -0
  40. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/dag/__init__.py +0 -0
  41. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/dag/builder.py +0 -0
  42. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/dag/checks/__init__.py +0 -0
  43. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/dag/checks/depends_on_consistency.py +0 -0
  44. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/dag/checks/deployment_completeness.py +0 -0
  45. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/dag/checks/edge_validity.py +0 -0
  46. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/dag/checks/environment_coverage.py +0 -0
  47. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/dag/checks/implementation_coverage.py +0 -0
  48. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/dag/checks/node_completeness.py +0 -0
  49. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/dag/checks/task_completion.py +0 -0
  50. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/dag/checks/transitive_closure.py +0 -0
  51. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/dag/checks/user_journey_coherence.py +0 -0
  52. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/dag/coverage_axes.py +0 -0
  53. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/dag/defaults/cli.yaml +0 -0
  54. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/dag/defaults/cpp_embedded.yaml +0 -0
  55. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/dag/defaults/csharp.yaml +0 -0
  56. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/dag/defaults/elixir.yaml +0 -0
  57. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/dag/defaults/generic.yaml +0 -0
  58. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/dag/defaults/iot.yaml +0 -0
  59. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/dag/defaults/java.yaml +0 -0
  60. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/dag/defaults/kotlin.yaml +0 -0
  61. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/dag/defaults/mobile.yaml +0 -0
  62. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/dag/defaults/ruby.yaml +0 -0
  63. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/dag/defaults/rust.yaml +0 -0
  64. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/dag/defaults/scala.yaml +0 -0
  65. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/dag/defaults/swift.yaml +0 -0
  66. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/dag/defaults/test_frameworks.yaml +0 -0
  67. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/dag/defaults/web.yaml +0 -0
  68. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/dag/extractor.py +0 -0
  69. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/dag/runner.py +0 -0
  70. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/defaults.yaml +0 -0
  71. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/deploy_targets/__init__.py +0 -0
  72. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/deploy_targets/app_service.py +0 -0
  73. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/deploy_targets/base.py +0 -0
  74. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/deploy_targets/docker_compose.py +0 -0
  75. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/deployer.py +0 -0
  76. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/deployment/__init__.py +0 -0
  77. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/deployment/checks/__init__.py +0 -0
  78. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/deployment/defaults/deploy_targets.yaml +0 -0
  79. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/deployment/defaults/runtime_capability_inference.yaml +0 -0
  80. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/deployment/defaults/schema_providers.yaml +0 -0
  81. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/deployment/defaults/verification_templates.yaml +0 -0
  82. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/deployment/extractor.py +0 -0
  83. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/deployment/providers/__init__.py +0 -0
  84. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/deployment/providers/ai_command.py +0 -0
  85. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/deployment/providers/llm_consideration.py +0 -0
  86. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/deployment/providers/schema/__init__.py +0 -0
  87. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/deployment/providers/schema/prisma.py +0 -0
  88. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/deployment/providers/target/__init__.py +0 -0
  89. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/deployment/providers/target/docker_compose.py +0 -0
  90. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/deployment/providers/verification/__init__.py +0 -0
  91. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/deployment/providers/verification/assertion_handlers.py +0 -0
  92. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/deployment/providers/verification/cdp_browser.py +0 -0
  93. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/deployment/providers/verification/cdp_engines.py +0 -0
  94. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/deployment/providers/verification/cdp_launchers.py +0 -0
  95. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/deployment/providers/verification/cdp_wire.py +0 -0
  96. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/deployment/providers/verification/curl.py +0 -0
  97. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/deployment/providers/verification/form_strategies.py +0 -0
  98. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/deployment/providers/verification/means_catalog.py +0 -0
  99. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/deployment/providers/verification/playwright.py +0 -0
  100. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/design_md.py +0 -0
  101. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/drift.py +0 -0
  102. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/e2e_extractor.py +0 -0
  103. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/e2e_generator.py +0 -0
  104. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/e2e_runner.py +0 -0
  105. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/env_refs.py +0 -0
  106. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/extract_ai.py +0 -0
  107. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/extractor.py +0 -0
  108. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/fixer.py +0 -0
  109. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/fixup_drift.py +0 -0
  110. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/fixup_drift_strategies/__init__.py +0 -0
  111. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/fixup_drift_strategies/design_token_drift.py +0 -0
  112. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/fixup_drift_strategies/lexicon_violation.py +0 -0
  113. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/fixup_drift_strategies/url_drift.py +0 -0
  114. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/generator.py +0 -0
  115. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/graph.py +0 -0
  116. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/hitl_session.py +0 -0
  117. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/hooks/__init__.py +0 -0
  118. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/hooks/pre-commit +0 -0
  119. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/hooks/recipes/claude_settings_example.json +0 -0
  120. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/hooks/recipes/codex_hook.sh +0 -0
  121. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/hooks/recipes/git_post_commit.sh +0 -0
  122. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/hooks/recipes/git_pre_commit.sh +0 -0
  123. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/implementer/__init__.py +0 -0
  124. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/implementer/chunked_runner.py +0 -0
  125. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/implementer/typecheck_loop.py +0 -0
  126. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/implementer.py +0 -0
  127. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/inheritance.py +0 -0
  128. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/knowledge_fetcher.py +0 -0
  129. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/lexicon.py +0 -0
  130. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/llm/__init__.py +0 -0
  131. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/llm/approval.py +0 -0
  132. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/llm/best_practice_augmenter.py +0 -0
  133. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/llm/criteria_expander.py +0 -0
  134. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/llm/design_doc_extractor.py +0 -0
  135. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/llm/impl_step_deriver.py +0 -0
  136. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/llm/means_catalog_loader.py +0 -0
  137. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/llm/parser.py +0 -0
  138. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/llm/plan_deriver.py +0 -0
  139. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/llm/prompt_builder.py +0 -0
  140. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/llm/strategy_validator.py +0 -0
  141. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/llm/templates/best_practice_augment_meta.md +0 -0
  142. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/llm/templates/criteria_expand_meta.md +0 -0
  143. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/llm/templates/design_doc_extract_meta.md +0 -0
  144. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/llm/templates/impl_step_derive_meta.md +0 -0
  145. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/llm/templates/implementation_step_catalog.yaml +0 -0
  146. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/llm/templates/meta_instruction.md +0 -0
  147. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/llm/templates/plan_derive_meta.md +0 -0
  148. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/llm/templates/verification_means_catalog.yaml +0 -0
  149. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/mcp_server.py +0 -0
  150. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/measure.py +0 -0
  151. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/parsing.py +0 -0
  152. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/planner.py +0 -0
  153. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/policy.py +0 -0
  154. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/preflight/__init__.py +0 -0
  155. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/preflight/defaults/cli.yaml +0 -0
  156. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/preflight/defaults/iot.yaml +0 -0
  157. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/preflight/defaults/mobile.yaml +0 -0
  158. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/preflight/defaults/web.yaml +0 -0
  159. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/propagate.py +0 -0
  160. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/propagator.py +0 -0
  161. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/registry.py +0 -0
  162. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/repair/__init__.py +0 -0
  163. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/repair/approval_repair.py +0 -0
  164. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/repair/engine.py +0 -0
  165. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/repair/git_patcher.py +0 -0
  166. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/repair/history.py +0 -0
  167. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/repair/llm_repair_engine.py +0 -0
  168. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/repair/loop.py +0 -0
  169. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/repair/primary_picker.py +0 -0
  170. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/repair/repair_result.py +0 -0
  171. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/repair/repairability_classifier.py +0 -0
  172. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/repair/schema.py +0 -0
  173. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/repair/templates/analyze_meta.md +0 -0
  174. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/repair/templates/propose_meta.md +0 -0
  175. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/repair/templates/repairability_meta.md +0 -0
  176. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/repair/verify_runner.py +0 -0
  177. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/repair_slice.py +0 -0
  178. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/require.py +0 -0
  179. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/require_plugins.py +0 -0
  180. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/require_propagate.py +0 -0
  181. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/required_artifacts/defaults/cli.yaml +0 -0
  182. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/required_artifacts/defaults/iot.yaml +0 -0
  183. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/required_artifacts/defaults/mobile.yaml +0 -0
  184. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/required_artifacts/defaults/web.yaml +0 -0
  185. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/required_artifacts_deriver.py +0 -0
  186. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/requirement_completeness/defaults/cli.yaml +0 -0
  187. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/requirement_completeness/defaults/iot.yaml +0 -0
  188. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/requirement_completeness/defaults/mobile.yaml +0 -0
  189. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/requirement_completeness/defaults/web.yaml +0 -0
  190. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/requirement_completeness_auditor.py +0 -0
  191. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/restore.py +0 -0
  192. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/routes_extractor.py +0 -0
  193. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/scanner.py +0 -0
  194. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/schema_refs.py +0 -0
  195. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/screen_flow_validator.py +0 -0
  196. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/screen_transition_extractor.py +0 -0
  197. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/screen_transitions/defaults.yaml +0 -0
  198. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/synth.py +0 -0
  199. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/templates/codd.yaml.tmpl +0 -0
  200. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/templates/conventions.yaml.tmpl +0 -0
  201. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/templates/data_dependencies.yaml.tmpl +0 -0
  202. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/templates/doc_links.yaml.tmpl +0 -0
  203. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/templates/extract_ai_prompt_baseline.md +0 -0
  204. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/templates/extracted/api-contract.md.j2 +0 -0
  205. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/templates/extracted/architecture-overview.md.j2 +0 -0
  206. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/templates/extracted/module-detail.md.j2 +0 -0
  207. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/templates/extracted/schema-design.md.j2 +0 -0
  208. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/templates/extracted/system-context.md.j2 +0 -0
  209. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/templates/gitignore.tmpl +0 -0
  210. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/templates/lexicon_questions.md +0 -0
  211. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/templates/lexicon_schema.yaml +0 -0
  212. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/templates/overrides.yaml.tmpl +0 -0
  213. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/traceability.py +0 -0
  214. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/validator.py +0 -0
  215. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/watch/__init__.py +0 -0
  216. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/watch/events.py +0 -0
  217. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/watch/propagation_log.py +0 -0
  218. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/watch/propagation_pipeline.py +0 -0
  219. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/watch/test_runner.py +0 -0
  220. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/watch/watcher.py +0 -0
  221. {codd_dev-1.34.0 → codd_dev-1.35.0}/codd/wiring.py +0 -0
  222. {codd_dev-1.34.0 → codd_dev-1.35.0}/docs/cookbook/cdp_browser/README.md +0 -0
  223. {codd_dev-1.34.0 → codd_dev-1.35.0}/docs/requirements/README.md +0 -0
  224. {codd_dev-1.34.0 → codd_dev-1.35.0}/tests/integration/standalone_repair_skeleton/README.md +0 -0
@@ -0,0 +1,354 @@
1
+ Metadata-Version: 2.4
2
+ Name: codd-dev
3
+ Version: 1.35.0
4
+ Summary: CoDD: Coherence-Driven Development — cross-artifact change impact analysis
5
+ Project-URL: Homepage, https://github.com/yohey-w/codd-dev
6
+ Project-URL: Repository, https://github.com/yohey-w/codd-dev
7
+ Project-URL: Issues, https://github.com/yohey-w/codd-dev/issues
8
+ Author-email: Yohei Watanabe <yohey-w@users.noreply.github.com>
9
+ License-Expression: MIT
10
+ License-File: LICENSE
11
+ Keywords: change-impact,claude-code,dependency-graph,plugin,software-engineering
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Topic :: Software Development :: Quality Assurance
17
+ Requires-Python: >=3.10
18
+ Requires-Dist: click>=8.0
19
+ Requires-Dist: jinja2>=3.1.0
20
+ Requires-Dist: pyyaml>=6.0
21
+ Requires-Dist: tomli>=2.0.1; python_version < '3.11'
22
+ Requires-Dist: watchdog>=4.0.0
23
+ Requires-Dist: websocket-client>=1.8.0
24
+ Provides-Extra: ai
25
+ Provides-Extra: api-parsers
26
+ Requires-Dist: graphql-core>=3.2.0; extra == 'api-parsers'
27
+ Provides-Extra: infra
28
+ Requires-Dist: python-hcl2>=7.0.0; extra == 'infra'
29
+ Provides-Extra: mcp
30
+ Provides-Extra: scan
31
+ Requires-Dist: tree-sitter-java>=0.22; extra == 'scan'
32
+ Requires-Dist: tree-sitter-python>=0.22; extra == 'scan'
33
+ Requires-Dist: tree-sitter-typescript>=0.22; extra == 'scan'
34
+ Requires-Dist: tree-sitter>=0.22; extra == 'scan'
35
+ Provides-Extra: tree-sitter
36
+ Requires-Dist: tree-sitter-python<0.26.0,>=0.25.0; extra == 'tree-sitter'
37
+ Requires-Dist: tree-sitter-typescript<0.24.0,>=0.23.0; extra == 'tree-sitter'
38
+ Requires-Dist: tree-sitter<0.26.0,>=0.25.0; extra == 'tree-sitter'
39
+ Description-Content-Type: text/markdown
40
+
41
+ <p align="center">
42
+ <strong>CoDD - Coherence-Driven Development</strong>
43
+ </p>
44
+
45
+ <p align="center">
46
+ <a href="https://pypi.org/project/codd-dev/"><img src="https://img.shields.io/pypi/v/codd-dev?style=flat-square&color=blue" alt="PyPI"></a>
47
+ <a href="https://pypi.org/project/codd-dev/"><img src="https://img.shields.io/pypi/pyversions/codd-dev?style=flat-square" alt="Python"></a>
48
+ <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green?style=flat-square" alt="License"></a>
49
+ <a href="https://github.com/yohey-w/codd-dev/stargazers"><img src="https://img.shields.io/github/stars/yohey-w/codd-dev?style=flat-square" alt="Stars"></a>
50
+ </p>
51
+
52
+ <p align="center">
53
+ <a href="README_ja.md">日本語</a> | English | <a href="README_zh.md">中文</a>
54
+ </p>
55
+
56
+ ---
57
+
58
+ ## North Star (Vision)
59
+
60
+ **"Write only functional requirements and constraints. Code is generated, repaired, and verified automatically."**
61
+
62
+ CoDD treats **requirements -> design -> implementation -> tests** as one DAG, mechanically verifies the coherence of every node, and lets an LLM repair inconsistencies automatically when they appear. Humans write only **what to build** and **where the boundaries are**.
63
+
64
+ ## Where We Are (v1.34.0)
65
+
66
+ The North Star is far, but **within bounded conditions, CoDD has reached practical use**:
67
+
68
+ - ✅ Dogfooded on a real project (Next.js + Prisma + TypeScript Web app)
69
+ - ✅ `codd verify --auto-repair` completes with `PARTIAL_SUCCESS` on a real LMS project (attempts=4 / applied_patches=4 / unrepairable=2)
70
+ - ✅ DAG completeness with 9 coherence checks operational
71
+ - ⚠️ Single viewport / single persona assumed (Coverage Axis Layer C9 introduced in v1.32.0; axis variety is continuing work)
72
+ - ⚠️ Specification completeness Level 1 (finding holes in requirements) is planned for v1.35.0 `codd elicit`
73
+ - ⚠️ Other domains (Mobile / Desktop / CLI / Embedded / ML) are not yet validated
74
+ - ⚠️ Reducing unrepairable items is continuing improvement
75
+
76
+ ```bash
77
+ pip install codd-dev
78
+ ```
79
+
80
+ ---
81
+
82
+ ## Quick Start (5 min)
83
+
84
+ ### 1. Install
85
+
86
+ ```bash
87
+ pip install codd-dev
88
+ codd --version # 1.34.0 or later
89
+ ```
90
+
91
+ ### 2. Add codd.yaml to your project
92
+
93
+ ```yaml
94
+ # codd.yaml
95
+ codd_required_version: ">=1.34.0"
96
+
97
+ dag:
98
+ design_docs:
99
+ - "docs/design/**/*.md"
100
+ implementations:
101
+ - "src/**/*.{ts,tsx,py}"
102
+ tests:
103
+ - "tests/**/*.{spec,test}.{ts,tsx,py}"
104
+
105
+ repair:
106
+ approval_mode: required # automatic repair requires human approval
107
+ max_attempts: 10
108
+
109
+ llm:
110
+ ai_command: "claude" # any LLM CLI can be invoked (claude / codex / gemini, etc.)
111
+ ```
112
+
113
+ ### 3. Common commands
114
+
115
+ ```bash
116
+ # Coherence verification (checks consistency across requirements, design, implementation, and tests)
117
+ codd dag verify
118
+
119
+ # Verification with auto-repair (when violations are found, an LLM generates and applies patches)
120
+ codd dag verify --auto-repair --max-attempts 10
121
+
122
+ # Confirm User Journey PASS in a real browser (browser control via CDP)
123
+ codd dag run-journey login_to_dashboard --axis viewport=smartphone_se
124
+
125
+ # Derive implementation steps from design docs (input to the implementation phase)
126
+ codd implement run --task M1.2 --enable-typecheck-loop
127
+ ```
128
+
129
+ ### 4. Reading the output
130
+
131
+ `codd dag verify` runs 9 coherence checks:
132
+
133
+ | Check | Role |
134
+ |-------|------|
135
+ | `node_completeness` | Confirms nodes declared in design docs (implementation/test files) exist as physical files |
136
+ | `transitive_closure` | Confirms the dependency chain from requirements -> design -> implementation -> tests is closed |
137
+ | `verification_test_runtime` | Confirms tests for implementations can run and pass |
138
+ | `deployment_completeness` | Confirms the deployment chain (Dockerfile/compose/k8s) is complete |
139
+ | `proof_break_authority` | Confirms critical journeys are not broken |
140
+ | `screen_flow_edges` | Detects isolated nodes in the screen transition graph |
141
+ | `screen_flow_completeness` | Confirms every screen is mapped to requirements |
142
+ | `c8` | Detects uncommitted patches / dirty files |
143
+ | `c9` (`environment_coverage`) | Confirms **target environment coverage** such as viewport, RBAC role, and locale |
144
+
145
+ When violations are found, the deploy gate is blocked. With `--auto-repair`, CoDD enters a loop that asks an LLM to generate patches, applies them, and verifies again.
146
+
147
+ ---
148
+
149
+ ## Typical Use Cases
150
+
151
+ ### Use Case 1: Automating requirements -> design -> implementation
152
+
153
+ Write "functional requirements + constraints" in `docs/requirements/*.md`, then run `codd implement run`:
154
+
155
+ 1. An LLM dynamically derives ImplStep sequences from the requirements (Layer 1)
156
+ 2. Best-practice gaps are filled in (Layer 2, such as logout, Remember Me, and session timeout for login)
157
+ 3. After user approval through a HITL gate, implementation is generated into `src/**`
158
+ 4. If a type checker such as `tsc` fails during generation, CoDD enters the auto-repair loop
159
+
160
+ ### Use Case 2: Auto-Repair (`codd verify --auto-repair`)
161
+
162
+ Run `codd dag verify --auto-repair --max-attempts 10` in CI:
163
+
164
+ 1. 9 coherence checks are executed
165
+ 2. Violations are classified as **repairable (in-task) / pre-existing (baseline) / unrepairable** by a Hybrid Classifier (git diff + LLM)
166
+ 3. Among repairable violations, the most upstream one in the DAG is selected and an LLM generates a patch
167
+ 4. The patch goes through dry-run validation, then is applied and verified again
168
+ 5. If all violations are resolved within `max_attempts`, the status is `SUCCESS`; if some are repaired, `PARTIAL_SUCCESS`; if only unrepairable items remain, `REPAIR_FAILED`
169
+
170
+ Even in `PARTIAL_SUCCESS`, repaired patches are kept and remaining violations are listed transparently in the report.
171
+
172
+ ### Use Case 3: User Journey Coherence (`codd dag run-journey`)
173
+
174
+ Declare a user journey in the frontmatter of `docs/design/auth_design.md`:
175
+
176
+ ```yaml
177
+ user_journeys:
178
+ - name: login_to_dashboard
179
+ criticality: critical
180
+ steps:
181
+ - { action: navigate, target: "/login" }
182
+ - { action: fill, selector: "input[type=email]", value: "user@example.com" }
183
+ - { action: click, selector: "button[type=submit]" }
184
+ - { action: expect_url, value: "/dashboard" }
185
+ ```
186
+
187
+ With `codd dag run-journey login_to_dashboard --axis viewport=smartphone_se`:
188
+
189
+ - `viewport=smartphone_se` (375x667), declared in `project_lexicon.yaml`, is injected into runtime through CDP
190
+ - The journey runs in a real browser (Edge / Chrome)
191
+ - If it fails, C9 `environment_coverage` in `codd dag verify` blocks the deploy gate
192
+
193
+ This structurally prevents incidents such as smartphone-only navigation disappearing unnoticed.
194
+
195
+ ---
196
+
197
+ ## v1.34.0 Key Features
198
+
199
+ | Feature | Role |
200
+ |---------|------|
201
+ | **DAG Completeness** (C1-C8) | 9 coherence checks across requirements, design, implementation, tests, and deployment |
202
+ | **Coverage Axis Layer** (C9) | Verifies **target environment coverage** such as viewport, RBAC role, and locale through a unified abstraction supporting 16+ axes |
203
+ | **LLM Auto-Repair (RepairLoop)** | Violation detection -> LLM patch generation -> apply -> verify again, attempting full resolution within `max_attempts` |
204
+ | **Hybrid Classifier** | Classifies violations as repairable / pre_existing / unrepairable using git diff (Stage 1) + LLM judgment (Stage 2) |
205
+ | **Primary Picker** | Prioritizes the most upstream violation in the DAG as the likely root cause among multiple violations |
206
+ | **PARTIAL_SUCCESS policy** | Returns PARTIAL_SUCCESS when applied_patches, pre_existing, or unrepairable items exist, avoiding release blockage by transparent non-current-task issues |
207
+ | **BestPracticeAugmenter** | Dynamically fills in best practices that are not explicitly written in design docs, such as password reset |
208
+ | **ImplStepDeriver (2-layer)** | Dynamically expands design docs into ImplStep sequences and infers `required_axes` in Layer 2 |
209
+ | **Typecheck Repair Loop** | Runs an auto-repair loop when a type checker such as `tsc --noEmit` fails during implementation |
210
+ | **`codd version --check --strict`** | Detects differences between the project's required CoDD version and the installed version |
211
+
212
+ See [CHANGELOG.md](CHANGELOG.md) for details.
213
+
214
+ ---
215
+
216
+ ## Case Study - A Real-World LMS Web App (Next.js + Prisma + PostgreSQL)
217
+
218
+ Result of running `codd verify --auto-repair --max-attempts 10` on a real-world LMS project (Web only, primarily single viewport):
219
+
220
+ ```text
221
+ status: PARTIAL_SUCCESS
222
+ attempts: 4
223
+ applied_patches: 4
224
+ pre_existing_violations: 1
225
+ unrepairable_violations: 2
226
+ remaining_violations: 3 (skipped + reported)
227
+ smoke proof: 6 checks PASS
228
+ CoDD core changes: 0 lines
229
+ ```
230
+
231
+ Repaired files:
232
+
233
+ - `tests/e2e/environment-coverage.spec.ts`
234
+ - `tests/e2e/login.spec.ts`
235
+
236
+ Skipped violations (explicitly reported as outside CoDD's responsibility):
237
+
238
+ - pre_existing: deployment_completeness chain
239
+ - unrepairable: Dockerfile dry-run patch validation
240
+ - unrepairable: Vitest matcher runtime issue
241
+
242
+ C9 `environment_coverage` verified all axis x variant coverage for viewport (smartphone_se / desktop_1920) and RBAC role (central_admin / tenant_admin / learner), and reached PASS.
243
+
244
+ **Scope of this validation**:
245
+
246
+ - ✅ Auto-repair completes `PARTIAL_SUCCESS` on a Next.js + Prisma + TS stack
247
+ - ✅ Project-specific requirements are absorbed with **0 lines of CoDD core changes** (Generality preserved)
248
+ - ⚠️ Single project / single stack dogfooding only; other domains (Mobile / Desktop / CLI / Embedded / ML / Game) are not validated
249
+ - ⚠️ 2 unrepairable items remained = semi-automated, not fully automated
250
+
251
+ ---
252
+
253
+ ## Architecture - 4-Release Evolution and Next Plans
254
+
255
+ ### Achieved (v1.31.0 - v1.34.0)
256
+
257
+ | Release | Milestone |
258
+ |---------|-----------|
259
+ | v1.31.0 | Inner 100% (internal coherence) - eliminated manual type fixes with the typecheck repair loop |
260
+ | v1.32.0 | Outer 100% (target environment coverage Layer C9) - absorbed viewport/RBAC/locale and related axes through a unified abstraction |
261
+ | v1.33.0 | Caveat-resolution path proven - real CDP run-journey + LLM auto-repair attempt passed |
262
+ | **v1.34.0** | **Full pipeline proven** - auto-repair reached PARTIAL_SUCCESS through dogfooding on a single Next.js Web project |
263
+
264
+ ### Next (v1.35.0 - v2.0.0, Roadmap)
265
+
266
+ | Release | Plan |
267
+ |---------|------|
268
+ | **v1.35.0** | **`codd elicit`** - Discovery Engine that lets an LLM extract axis candidates and spec holes from requirements |
269
+ | v1.36.0 | BABOK lexicon (`@codd/lexicon/babok`) bundle + multi-formatter (md / json / PR comment) |
270
+ | v1.37.0 | **`codd diff`** - brownfield drift detection between requirements and implementation |
271
+ | v1.38.0 | extract -> diff -> elicit pipeline, complete brownfield flow |
272
+ | v1.39.0 | Reduce unrepairable items (RepairLoop strategy generalization) |
273
+ | v1.40.0 | Multi-domain dogfooding (Mobile / CLI / embedded, etc.) |
274
+ | (v2.0.0) | elicit + verify bidirectional loop, closest approach to the "fully automated" North Star |
275
+
276
+ See [CHANGELOG.md](CHANGELOG.md).
277
+
278
+ ---
279
+
280
+ ## North Star Connection: `codd elicit` (v1.35.0)
281
+
282
+ The biggest gap between the North Star ("write only requirements + constraints") and reality has been the assumption that **requirements are complete**. If requirements have holes, so does the implementation, and these surface as pre-demo incidents (e.g., navigation disappearing for central admin on a smartphone viewport).
283
+
284
+ `codd elicit` structurally addresses this:
285
+
286
+ ```bash
287
+ $ codd elicit
288
+ [INFO] Reading docs/requirements/requirements.md (483 lines)
289
+ [INFO] Loading project_lexicon.yaml + @codd/lexicon/babok ...
290
+ [INFO] Generated 27 findings (axis_candidates: 11, spec_holes: 16)
291
+ [OK] findings.md created
292
+ ```
293
+
294
+ ```markdown
295
+ ## f-001 [axis_candidate] locale (severity: high)
296
+ **details**: variants: ja_JP, en_US / source: persona description and Section 3.5
297
+ **approved**: yes
298
+ **note**: en_US is phase 2
299
+
300
+ ## f-002 [spec_hole] If the browser is closed during video playback, is progress lost? (severity: high)
301
+ **approved**: yes
302
+ ```
303
+
304
+ ```bash
305
+ $ codd elicit apply findings.md
306
+ [OK] project_lexicon.yaml updated (11 axis sections appended)
307
+ [OK] docs/requirements/requirements.md updated (TODO appended)
308
+ $ git add -A && git commit -m "feat: apply elicit findings"
309
+ ```
310
+
311
+ Humans only **review extracted requirements** and **approve / reject elicit findings (Yes/No)**. The rest is AI dynamically diverging and converging.
312
+
313
+ ---
314
+
315
+ ## Generality Gate (Absolute Generality Preservation)
316
+
317
+ The following hardcoding is **forbidden** in CoDD core code:
318
+
319
+ - Specific stack names (Next.js / Django / Rails / FastAPI, etc.)
320
+ - Specific framework / library literals
321
+ - Specific domains (Web / Mobile / Desktop / CLI / Backend / Embedded)
322
+ - Specific viewport values (375 / 1920, etc.) or device names (iPhone / Android, etc.)
323
+ - Specific axis types (viewport / locale / a11y) or finding kinds (axis_candidate / spec_hole) hardcoded in core
324
+
325
+ All such knowledge is confined to **`project_lexicon.yaml` (project-specific)** or **lexicon plug-ins (`@codd/lexicon/babok`, etc.)**. CoDD handles them only as generic violation/finding objects.
326
+
327
+ When an LLM proposes a stack-specific optimal patch, that judgment is delegated to **the LLM's knowledge**. CoDD core does not decide it, which prevents overfitting.
328
+
329
+ ---
330
+
331
+ ## Hook Integration
332
+
333
+ CoDD ships hook recipes for editor and Git workflows:
334
+
335
+ - Claude Code `PostToolUse` hook recipe for running CoDD checks after file edits
336
+ - Git `pre-commit` hook recipe for blocking commits when coherence checks fail
337
+
338
+ Recipes live under `codd/hooks/recipes/`.
339
+
340
+ ---
341
+
342
+ ## License
343
+
344
+ MIT License - see [LICENSE](LICENSE).
345
+
346
+ ## Links
347
+
348
+ - [CHANGELOG.md](CHANGELOG.md) - full release notes
349
+ - [GitHub Sponsors](https://github.com/sponsors/yohey-w) - support development
350
+ - [Issues](https://github.com/yohey-w/codd-dev/issues) - bug reports / feature requests
351
+
352
+ ---
353
+
354
+ > When code changes, CoDD traces the impact, detects violations, and produces evidence for merge decisions.
@@ -0,0 +1,314 @@
1
+ <p align="center">
2
+ <strong>CoDD - Coherence-Driven Development</strong>
3
+ </p>
4
+
5
+ <p align="center">
6
+ <a href="https://pypi.org/project/codd-dev/"><img src="https://img.shields.io/pypi/v/codd-dev?style=flat-square&color=blue" alt="PyPI"></a>
7
+ <a href="https://pypi.org/project/codd-dev/"><img src="https://img.shields.io/pypi/pyversions/codd-dev?style=flat-square" alt="Python"></a>
8
+ <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green?style=flat-square" alt="License"></a>
9
+ <a href="https://github.com/yohey-w/codd-dev/stargazers"><img src="https://img.shields.io/github/stars/yohey-w/codd-dev?style=flat-square" alt="Stars"></a>
10
+ </p>
11
+
12
+ <p align="center">
13
+ <a href="README_ja.md">日本語</a> | English | <a href="README_zh.md">中文</a>
14
+ </p>
15
+
16
+ ---
17
+
18
+ ## North Star (Vision)
19
+
20
+ **"Write only functional requirements and constraints. Code is generated, repaired, and verified automatically."**
21
+
22
+ CoDD treats **requirements -> design -> implementation -> tests** as one DAG, mechanically verifies the coherence of every node, and lets an LLM repair inconsistencies automatically when they appear. Humans write only **what to build** and **where the boundaries are**.
23
+
24
+ ## Where We Are (v1.34.0)
25
+
26
+ The North Star is far, but **within bounded conditions, CoDD has reached practical use**:
27
+
28
+ - ✅ Dogfooded on a real project (Next.js + Prisma + TypeScript Web app)
29
+ - ✅ `codd verify --auto-repair` completes with `PARTIAL_SUCCESS` on a real LMS project (attempts=4 / applied_patches=4 / unrepairable=2)
30
+ - ✅ DAG completeness with 9 coherence checks operational
31
+ - ⚠️ Single viewport / single persona assumed (Coverage Axis Layer C9 introduced in v1.32.0; axis variety is continuing work)
32
+ - ⚠️ Specification completeness Level 1 (finding holes in requirements) is planned for v1.35.0 `codd elicit`
33
+ - ⚠️ Other domains (Mobile / Desktop / CLI / Embedded / ML) are not yet validated
34
+ - ⚠️ Reducing unrepairable items is continuing improvement
35
+
36
+ ```bash
37
+ pip install codd-dev
38
+ ```
39
+
40
+ ---
41
+
42
+ ## Quick Start (5 min)
43
+
44
+ ### 1. Install
45
+
46
+ ```bash
47
+ pip install codd-dev
48
+ codd --version # 1.34.0 or later
49
+ ```
50
+
51
+ ### 2. Add codd.yaml to your project
52
+
53
+ ```yaml
54
+ # codd.yaml
55
+ codd_required_version: ">=1.34.0"
56
+
57
+ dag:
58
+ design_docs:
59
+ - "docs/design/**/*.md"
60
+ implementations:
61
+ - "src/**/*.{ts,tsx,py}"
62
+ tests:
63
+ - "tests/**/*.{spec,test}.{ts,tsx,py}"
64
+
65
+ repair:
66
+ approval_mode: required # automatic repair requires human approval
67
+ max_attempts: 10
68
+
69
+ llm:
70
+ ai_command: "claude" # any LLM CLI can be invoked (claude / codex / gemini, etc.)
71
+ ```
72
+
73
+ ### 3. Common commands
74
+
75
+ ```bash
76
+ # Coherence verification (checks consistency across requirements, design, implementation, and tests)
77
+ codd dag verify
78
+
79
+ # Verification with auto-repair (when violations are found, an LLM generates and applies patches)
80
+ codd dag verify --auto-repair --max-attempts 10
81
+
82
+ # Confirm User Journey PASS in a real browser (browser control via CDP)
83
+ codd dag run-journey login_to_dashboard --axis viewport=smartphone_se
84
+
85
+ # Derive implementation steps from design docs (input to the implementation phase)
86
+ codd implement run --task M1.2 --enable-typecheck-loop
87
+ ```
88
+
89
+ ### 4. Reading the output
90
+
91
+ `codd dag verify` runs 9 coherence checks:
92
+
93
+ | Check | Role |
94
+ |-------|------|
95
+ | `node_completeness` | Confirms nodes declared in design docs (implementation/test files) exist as physical files |
96
+ | `transitive_closure` | Confirms the dependency chain from requirements -> design -> implementation -> tests is closed |
97
+ | `verification_test_runtime` | Confirms tests for implementations can run and pass |
98
+ | `deployment_completeness` | Confirms the deployment chain (Dockerfile/compose/k8s) is complete |
99
+ | `proof_break_authority` | Confirms critical journeys are not broken |
100
+ | `screen_flow_edges` | Detects isolated nodes in the screen transition graph |
101
+ | `screen_flow_completeness` | Confirms every screen is mapped to requirements |
102
+ | `c8` | Detects uncommitted patches / dirty files |
103
+ | `c9` (`environment_coverage`) | Confirms **target environment coverage** such as viewport, RBAC role, and locale |
104
+
105
+ When violations are found, the deploy gate is blocked. With `--auto-repair`, CoDD enters a loop that asks an LLM to generate patches, applies them, and verifies again.
106
+
107
+ ---
108
+
109
+ ## Typical Use Cases
110
+
111
+ ### Use Case 1: Automating requirements -> design -> implementation
112
+
113
+ Write "functional requirements + constraints" in `docs/requirements/*.md`, then run `codd implement run`:
114
+
115
+ 1. An LLM dynamically derives ImplStep sequences from the requirements (Layer 1)
116
+ 2. Best-practice gaps are filled in (Layer 2, such as logout, Remember Me, and session timeout for login)
117
+ 3. After user approval through a HITL gate, implementation is generated into `src/**`
118
+ 4. If a type checker such as `tsc` fails during generation, CoDD enters the auto-repair loop
119
+
120
+ ### Use Case 2: Auto-Repair (`codd verify --auto-repair`)
121
+
122
+ Run `codd dag verify --auto-repair --max-attempts 10` in CI:
123
+
124
+ 1. 9 coherence checks are executed
125
+ 2. Violations are classified as **repairable (in-task) / pre-existing (baseline) / unrepairable** by a Hybrid Classifier (git diff + LLM)
126
+ 3. Among repairable violations, the most upstream one in the DAG is selected and an LLM generates a patch
127
+ 4. The patch goes through dry-run validation, then is applied and verified again
128
+ 5. If all violations are resolved within `max_attempts`, the status is `SUCCESS`; if some are repaired, `PARTIAL_SUCCESS`; if only unrepairable items remain, `REPAIR_FAILED`
129
+
130
+ Even in `PARTIAL_SUCCESS`, repaired patches are kept and remaining violations are listed transparently in the report.
131
+
132
+ ### Use Case 3: User Journey Coherence (`codd dag run-journey`)
133
+
134
+ Declare a user journey in the frontmatter of `docs/design/auth_design.md`:
135
+
136
+ ```yaml
137
+ user_journeys:
138
+ - name: login_to_dashboard
139
+ criticality: critical
140
+ steps:
141
+ - { action: navigate, target: "/login" }
142
+ - { action: fill, selector: "input[type=email]", value: "user@example.com" }
143
+ - { action: click, selector: "button[type=submit]" }
144
+ - { action: expect_url, value: "/dashboard" }
145
+ ```
146
+
147
+ With `codd dag run-journey login_to_dashboard --axis viewport=smartphone_se`:
148
+
149
+ - `viewport=smartphone_se` (375x667), declared in `project_lexicon.yaml`, is injected into runtime through CDP
150
+ - The journey runs in a real browser (Edge / Chrome)
151
+ - If it fails, C9 `environment_coverage` in `codd dag verify` blocks the deploy gate
152
+
153
+ This structurally prevents incidents such as smartphone-only navigation disappearing unnoticed.
154
+
155
+ ---
156
+
157
+ ## v1.34.0 Key Features
158
+
159
+ | Feature | Role |
160
+ |---------|------|
161
+ | **DAG Completeness** (C1-C8) | 9 coherence checks across requirements, design, implementation, tests, and deployment |
162
+ | **Coverage Axis Layer** (C9) | Verifies **target environment coverage** such as viewport, RBAC role, and locale through a unified abstraction supporting 16+ axes |
163
+ | **LLM Auto-Repair (RepairLoop)** | Violation detection -> LLM patch generation -> apply -> verify again, attempting full resolution within `max_attempts` |
164
+ | **Hybrid Classifier** | Classifies violations as repairable / pre_existing / unrepairable using git diff (Stage 1) + LLM judgment (Stage 2) |
165
+ | **Primary Picker** | Prioritizes the most upstream violation in the DAG as the likely root cause among multiple violations |
166
+ | **PARTIAL_SUCCESS policy** | Returns PARTIAL_SUCCESS when applied_patches, pre_existing, or unrepairable items exist, avoiding release blockage by transparent non-current-task issues |
167
+ | **BestPracticeAugmenter** | Dynamically fills in best practices that are not explicitly written in design docs, such as password reset |
168
+ | **ImplStepDeriver (2-layer)** | Dynamically expands design docs into ImplStep sequences and infers `required_axes` in Layer 2 |
169
+ | **Typecheck Repair Loop** | Runs an auto-repair loop when a type checker such as `tsc --noEmit` fails during implementation |
170
+ | **`codd version --check --strict`** | Detects differences between the project's required CoDD version and the installed version |
171
+
172
+ See [CHANGELOG.md](CHANGELOG.md) for details.
173
+
174
+ ---
175
+
176
+ ## Case Study - A Real-World LMS Web App (Next.js + Prisma + PostgreSQL)
177
+
178
+ Result of running `codd verify --auto-repair --max-attempts 10` on a real-world LMS project (Web only, primarily single viewport):
179
+
180
+ ```text
181
+ status: PARTIAL_SUCCESS
182
+ attempts: 4
183
+ applied_patches: 4
184
+ pre_existing_violations: 1
185
+ unrepairable_violations: 2
186
+ remaining_violations: 3 (skipped + reported)
187
+ smoke proof: 6 checks PASS
188
+ CoDD core changes: 0 lines
189
+ ```
190
+
191
+ Repaired files:
192
+
193
+ - `tests/e2e/environment-coverage.spec.ts`
194
+ - `tests/e2e/login.spec.ts`
195
+
196
+ Skipped violations (explicitly reported as outside CoDD's responsibility):
197
+
198
+ - pre_existing: deployment_completeness chain
199
+ - unrepairable: Dockerfile dry-run patch validation
200
+ - unrepairable: Vitest matcher runtime issue
201
+
202
+ C9 `environment_coverage` verified all axis x variant coverage for viewport (smartphone_se / desktop_1920) and RBAC role (central_admin / tenant_admin / learner), and reached PASS.
203
+
204
+ **Scope of this validation**:
205
+
206
+ - ✅ Auto-repair completes `PARTIAL_SUCCESS` on a Next.js + Prisma + TS stack
207
+ - ✅ Project-specific requirements are absorbed with **0 lines of CoDD core changes** (Generality preserved)
208
+ - ⚠️ Single project / single stack dogfooding only; other domains (Mobile / Desktop / CLI / Embedded / ML / Game) are not validated
209
+ - ⚠️ 2 unrepairable items remained = semi-automated, not fully automated
210
+
211
+ ---
212
+
213
+ ## Architecture - 4-Release Evolution and Next Plans
214
+
215
+ ### Achieved (v1.31.0 - v1.34.0)
216
+
217
+ | Release | Milestone |
218
+ |---------|-----------|
219
+ | v1.31.0 | Inner 100% (internal coherence) - eliminated manual type fixes with the typecheck repair loop |
220
+ | v1.32.0 | Outer 100% (target environment coverage Layer C9) - absorbed viewport/RBAC/locale and related axes through a unified abstraction |
221
+ | v1.33.0 | Caveat-resolution path proven - real CDP run-journey + LLM auto-repair attempt passed |
222
+ | **v1.34.0** | **Full pipeline proven** - auto-repair reached PARTIAL_SUCCESS through dogfooding on a single Next.js Web project |
223
+
224
+ ### Next (v1.35.0 - v2.0.0, Roadmap)
225
+
226
+ | Release | Plan |
227
+ |---------|------|
228
+ | **v1.35.0** | **`codd elicit`** - Discovery Engine that lets an LLM extract axis candidates and spec holes from requirements |
229
+ | v1.36.0 | BABOK lexicon (`@codd/lexicon/babok`) bundle + multi-formatter (md / json / PR comment) |
230
+ | v1.37.0 | **`codd diff`** - brownfield drift detection between requirements and implementation |
231
+ | v1.38.0 | extract -> diff -> elicit pipeline, complete brownfield flow |
232
+ | v1.39.0 | Reduce unrepairable items (RepairLoop strategy generalization) |
233
+ | v1.40.0 | Multi-domain dogfooding (Mobile / CLI / embedded, etc.) |
234
+ | (v2.0.0) | elicit + verify bidirectional loop, closest approach to the "fully automated" North Star |
235
+
236
+ See [CHANGELOG.md](CHANGELOG.md).
237
+
238
+ ---
239
+
240
+ ## North Star Connection: `codd elicit` (v1.35.0)
241
+
242
+ The biggest gap between the North Star ("write only requirements + constraints") and reality has been the assumption that **requirements are complete**. If requirements have holes, so does the implementation, and these surface as pre-demo incidents (e.g., navigation disappearing for central admin on a smartphone viewport).
243
+
244
+ `codd elicit` structurally addresses this:
245
+
246
+ ```bash
247
+ $ codd elicit
248
+ [INFO] Reading docs/requirements/requirements.md (483 lines)
249
+ [INFO] Loading project_lexicon.yaml + @codd/lexicon/babok ...
250
+ [INFO] Generated 27 findings (axis_candidates: 11, spec_holes: 16)
251
+ [OK] findings.md created
252
+ ```
253
+
254
+ ```markdown
255
+ ## f-001 [axis_candidate] locale (severity: high)
256
+ **details**: variants: ja_JP, en_US / source: persona description and Section 3.5
257
+ **approved**: yes
258
+ **note**: en_US is phase 2
259
+
260
+ ## f-002 [spec_hole] If the browser is closed during video playback, is progress lost? (severity: high)
261
+ **approved**: yes
262
+ ```
263
+
264
+ ```bash
265
+ $ codd elicit apply findings.md
266
+ [OK] project_lexicon.yaml updated (11 axis sections appended)
267
+ [OK] docs/requirements/requirements.md updated (TODO appended)
268
+ $ git add -A && git commit -m "feat: apply elicit findings"
269
+ ```
270
+
271
+ Humans only **review extracted requirements** and **approve / reject elicit findings (Yes/No)**. The rest is AI dynamically diverging and converging.
272
+
273
+ ---
274
+
275
+ ## Generality Gate (Absolute Generality Preservation)
276
+
277
+ The following hardcoding is **forbidden** in CoDD core code:
278
+
279
+ - Specific stack names (Next.js / Django / Rails / FastAPI, etc.)
280
+ - Specific framework / library literals
281
+ - Specific domains (Web / Mobile / Desktop / CLI / Backend / Embedded)
282
+ - Specific viewport values (375 / 1920, etc.) or device names (iPhone / Android, etc.)
283
+ - Specific axis types (viewport / locale / a11y) or finding kinds (axis_candidate / spec_hole) hardcoded in core
284
+
285
+ All such knowledge is confined to **`project_lexicon.yaml` (project-specific)** or **lexicon plug-ins (`@codd/lexicon/babok`, etc.)**. CoDD handles them only as generic violation/finding objects.
286
+
287
+ When an LLM proposes a stack-specific optimal patch, that judgment is delegated to **the LLM's knowledge**. CoDD core does not decide it, which prevents overfitting.
288
+
289
+ ---
290
+
291
+ ## Hook Integration
292
+
293
+ CoDD ships hook recipes for editor and Git workflows:
294
+
295
+ - Claude Code `PostToolUse` hook recipe for running CoDD checks after file edits
296
+ - Git `pre-commit` hook recipe for blocking commits when coherence checks fail
297
+
298
+ Recipes live under `codd/hooks/recipes/`.
299
+
300
+ ---
301
+
302
+ ## License
303
+
304
+ MIT License - see [LICENSE](LICENSE).
305
+
306
+ ## Links
307
+
308
+ - [CHANGELOG.md](CHANGELOG.md) - full release notes
309
+ - [GitHub Sponsors](https://github.com/sponsors/yohey-w) - support development
310
+ - [Issues](https://github.com/yohey-w/codd-dev/issues) - bug reports / feature requests
311
+
312
+ ---
313
+
314
+ > When code changes, CoDD traces the impact, detects violations, and produces evidence for merge decisions.