pdd-cli 0.0.237__tar.gz → 0.0.238__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 (676) hide show
  1. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/PKG-INFO +3 -3
  2. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/README.md +8 -3
  3. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_change_orchestrator.py +11 -0
  4. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_sync.py +190 -26
  5. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_sync_runner.py +3 -1
  6. pdd_cli-0.0.238/pdd/ci_drift_heal.py +1413 -0
  7. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/core/duplicate_cli_guard.py +9 -0
  8. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/metadata_sync.py +15 -1
  9. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/pdd_completion.sh +1 -1
  10. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/sync_determine_operation.py +9 -2
  11. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/update_main.py +171 -2
  12. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd_cli.egg-info/PKG-INFO +3 -3
  13. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd_cli.egg-info/SOURCES.txt +1 -0
  14. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pypi_description.rst +2 -2
  15. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pyproject.toml +2 -2
  16. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_change_orchestrator.py +25 -0
  17. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_sync.py +420 -45
  18. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_sync_runner.py +32 -0
  19. pdd_cli-0.0.238/tests/test_auto_heal_workflow.py +128 -0
  20. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_ci_drift_heal.py +459 -9
  21. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_duplicate_cli_guard.py +34 -2
  22. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_sync_determine_operation.py +23 -1
  23. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_update_main.py +421 -13
  24. pdd_cli-0.0.237/pdd/ci_drift_heal.py +0 -1484
  25. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/LICENSE +0 -0
  26. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/__init__.py +0 -0
  27. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/__main__.py +0 -0
  28. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/_keyring_timeout.py +0 -0
  29. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_architecture.py +0 -0
  30. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_architecture_orchestrator.py +0 -0
  31. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_bug.py +0 -0
  32. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_bug_orchestrator.py +0 -0
  33. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_change.py +0 -0
  34. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_checkup.py +0 -0
  35. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_checkup_orchestrator.py +0 -0
  36. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_common.py +0 -0
  37. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_common_worktree.py +0 -0
  38. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_crash.py +0 -0
  39. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_e2e_fix.py +0 -0
  40. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_e2e_fix_orchestrator.py +0 -0
  41. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_fix.py +0 -0
  42. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_langtest.py +0 -0
  43. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_split.py +0 -0
  44. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_split_orchestrator.py +0 -0
  45. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_test.py +0 -0
  46. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_test_generate.py +0 -0
  47. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_test_orchestrator.py +0 -0
  48. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_update.py +0 -0
  49. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_verify.py +0 -0
  50. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/api_key_scanner.py +0 -0
  51. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/architecture_include_validation.py +0 -0
  52. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/architecture_registry.py +0 -0
  53. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/architecture_sync.py +0 -0
  54. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/architecture_sync_helper.py +0 -0
  55. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/auth_service.py +0 -0
  56. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/auto_deps_architecture.py +0 -0
  57. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/auto_deps_main.py +0 -0
  58. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/auto_include.py +0 -0
  59. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/auto_update.py +0 -0
  60. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/bug_main.py +0 -0
  61. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/bug_to_unit_test.py +0 -0
  62. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/change.py +0 -0
  63. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/change_main.py +0 -0
  64. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/checkup_review_loop.py +0 -0
  65. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/ci_detect_changed_modules.py +0 -0
  66. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/ci_validation.py +0 -0
  67. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/cli.py +0 -0
  68. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/cli_detector.py +0 -0
  69. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/cmd_test_main.py +0 -0
  70. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/code_generator.py +0 -0
  71. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/code_generator_main.py +0 -0
  72. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/__init__.py +0 -0
  73. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/analysis.py +0 -0
  74. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/auth.py +0 -0
  75. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/checkup.py +0 -0
  76. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/connect.py +0 -0
  77. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/extracts.py +0 -0
  78. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/firecrawl.py +0 -0
  79. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/fix.py +0 -0
  80. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/generate.py +0 -0
  81. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/maintenance.py +0 -0
  82. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/misc.py +0 -0
  83. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/modify.py +0 -0
  84. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/report.py +0 -0
  85. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/sessions.py +0 -0
  86. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/templates.py +0 -0
  87. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/utility.py +0 -0
  88. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/which.py +0 -0
  89. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/comment_line.py +0 -0
  90. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/config_resolution.py +0 -0
  91. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/conflicts_in_prompts.py +0 -0
  92. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/conflicts_main.py +0 -0
  93. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/construct_paths.py +0 -0
  94. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/content_selector.py +0 -0
  95. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/context_generator.py +0 -0
  96. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/context_generator_main.py +0 -0
  97. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/continue_generation.py +0 -0
  98. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/core/__init__.py +0 -0
  99. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/core/cli.py +0 -0
  100. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/core/cloud.py +0 -0
  101. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/core/dump.py +0 -0
  102. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/core/errors.py +0 -0
  103. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/core/llm_trace.py +0 -0
  104. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/core/remote_session.py +0 -0
  105. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/core/utils.py +0 -0
  106. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/crash_main.py +0 -0
  107. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/data/arena_elo_manifest.json +0 -0
  108. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/data/language_format.csv +0 -0
  109. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/data/llm_model.csv +0 -0
  110. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/detect_change.py +0 -0
  111. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/detect_change_main.py +0 -0
  112. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/docs/prompting_guide.md +0 -0
  113. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/durable_sync_runner.py +0 -0
  114. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/edit_file.py +0 -0
  115. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/embed_retrieve.py +0 -0
  116. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/extracts_prune.py +0 -0
  117. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/failure_classification.py +0 -0
  118. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/find_section.py +0 -0
  119. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/firecrawl_cache.py +0 -0
  120. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/fix_code_loop.py +0 -0
  121. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/fix_code_module_errors.py +0 -0
  122. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/fix_error_loop.py +0 -0
  123. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/fix_errors_from_unit_tests.py +0 -0
  124. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/fix_main.py +0 -0
  125. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/fix_verification_errors.py +0 -0
  126. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/fix_verification_errors_loop.py +0 -0
  127. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/fix_verification_main.py +0 -0
  128. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/generate_model_catalog.py +0 -0
  129. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/generate_output_paths.py +0 -0
  130. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/generate_test.py +0 -0
  131. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/generation_completion.py +0 -0
  132. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/get_comment.py +0 -0
  133. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/get_extension.py +0 -0
  134. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/get_jwt_token.py +0 -0
  135. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/get_language.py +0 -0
  136. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/get_lint_commands.py +0 -0
  137. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/get_run_command.py +0 -0
  138. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/get_test_command.py +0 -0
  139. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/git_update.py +0 -0
  140. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/include_query_extractor.py +0 -0
  141. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/increase_tests.py +0 -0
  142. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/incremental_code_generator.py +0 -0
  143. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/incremental_prd_architecture.py +0 -0
  144. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/insert_includes.py +0 -0
  145. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/install_completion.py +0 -0
  146. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/json_atomic.py +0 -0
  147. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/list_drift_detection.py +0 -0
  148. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/llm_invoke.py +0 -0
  149. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/load_prompt_template.py +0 -0
  150. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/logo_animation.py +0 -0
  151. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/mcp_config.json +0 -0
  152. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/model_tester.py +0 -0
  153. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/one_session_sync.py +0 -0
  154. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/operation_log.py +0 -0
  155. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/path_resolution.py +0 -0
  156. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/pdd_completion.fish +0 -0
  157. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/pdd_completion.zsh +0 -0
  158. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/pddrc_initializer.py +0 -0
  159. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/pin_example_hack.py +0 -0
  160. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/postprocess.py +0 -0
  161. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/postprocess_0.py +0 -0
  162. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/preprocess.py +0 -0
  163. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/preprocess_main.py +0 -0
  164. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/process_csv_change.py +0 -0
  165. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step10_completeness_LLM.prompt +0 -0
  166. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step11_sync_LLM.prompt +0 -0
  167. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step12_deps_LLM.prompt +0 -0
  168. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step13_fix_LLM.prompt +0 -0
  169. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step1_analyze_prd_LLM.prompt +0 -0
  170. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step1b_complexity_LLM.prompt +0 -0
  171. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step2_analyze_LLM.prompt +0 -0
  172. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step2b_codebase_scan_LLM.prompt +0 -0
  173. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step3_research_LLM.prompt +0 -0
  174. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step4_data_model_LLM.prompt +0 -0
  175. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step5_design_LLM.prompt +0 -0
  176. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step5b_completeness_gate_LLM.prompt +0 -0
  177. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step5b_fix_LLM.prompt +0 -0
  178. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step6_research_deps_LLM.prompt +0 -0
  179. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step7_generate_LLM.prompt +0 -0
  180. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step7b_review_LLM.prompt +0 -0
  181. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step8_5_context_docs_LLM.prompt +0 -0
  182. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step8_pddrc_LLM.prompt +0 -0
  183. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step9_prompts_LLM.prompt +0 -0
  184. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step9b_cross_audit_LLM.prompt +0 -0
  185. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_bug_step10_verify_LLM.prompt +0 -0
  186. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_bug_step11_e2e_test_LLM.prompt +0 -0
  187. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_bug_step12_pr_LLM.prompt +0 -0
  188. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_bug_step1_duplicate_LLM.prompt +0 -0
  189. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_bug_step2_docs_LLM.prompt +0 -0
  190. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_bug_step3_triage_LLM.prompt +0 -0
  191. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_bug_step4_api_research_LLM.prompt +0 -0
  192. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_bug_step5_reproduce_LLM.prompt +0 -0
  193. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_bug_step6_root_cause_LLM.prompt +0 -0
  194. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_bug_step7_prompt_classification_LLM.prompt +0 -0
  195. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_bug_step8_test_plan_LLM.prompt +0 -0
  196. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_bug_step9_generate_LLM.prompt +0 -0
  197. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_change_step10_architecture_update_LLM.prompt +0 -0
  198. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_change_step11_identify_issues_LLM.prompt +0 -0
  199. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_change_step12_fix_issues_LLM.prompt +0 -0
  200. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_change_step13_create_pr_LLM.prompt +0 -0
  201. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_change_step1_duplicate_LLM.prompt +0 -0
  202. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_change_step2_docs_LLM.prompt +0 -0
  203. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_change_step3_research_LLM.prompt +0 -0
  204. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_change_step4_clarify_LLM.prompt +0 -0
  205. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_change_step5_docs_change_LLM.prompt +0 -0
  206. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_change_step6_devunits_LLM.prompt +0 -0
  207. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_change_step7_architecture_LLM.prompt +0 -0
  208. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_change_step8_analyze_LLM.prompt +0 -0
  209. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_change_step9_implement_LLM.prompt +0 -0
  210. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_checkup_step1_discover_LLM.prompt +0 -0
  211. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_checkup_step2_deps_LLM.prompt +0 -0
  212. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_checkup_step3_build_LLM.prompt +0 -0
  213. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_checkup_step4_interfaces_LLM.prompt +0 -0
  214. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_checkup_step5_test_LLM.prompt +0 -0
  215. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_checkup_step6_1_fix_LLM.prompt +0 -0
  216. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_checkup_step6_2_regression_tests_LLM.prompt +0 -0
  217. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_checkup_step6_3_e2e_tests_LLM.prompt +0 -0
  218. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_checkup_step7_verify_LLM.prompt +0 -0
  219. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_checkup_step8_create_pr_LLM.prompt +0 -0
  220. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_crash_explore_LLM.prompt +0 -0
  221. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_e2e_fix_step10_ci_validation_LLM.prompt +0 -0
  222. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_e2e_fix_step11_code_cleanup_LLM.prompt +0 -0
  223. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_e2e_fix_step1_unit_tests_LLM.prompt +0 -0
  224. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_e2e_fix_step2_e2e_tests_LLM.prompt +0 -0
  225. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_e2e_fix_step3_root_cause_LLM.prompt +0 -0
  226. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_e2e_fix_step4_fix_e2e_tests_LLM.prompt +0 -0
  227. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_e2e_fix_step5_identify_devunits_LLM.prompt +0 -0
  228. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_e2e_fix_step6_create_unit_tests_LLM.prompt +0 -0
  229. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_e2e_fix_step7_verify_tests_LLM.prompt +0 -0
  230. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_e2e_fix_step8_run_pdd_fix_LLM.prompt +0 -0
  231. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_e2e_fix_step9_verify_all_LLM.prompt +0 -0
  232. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_fix_explore_LLM.prompt +0 -0
  233. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_fix_nonpython_LLM.prompt +0 -0
  234. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_fix_primary_LLM.prompt +0 -0
  235. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_split_step0_intent_LLM.prompt +0 -0
  236. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_split_step1_survey_LLM.prompt +0 -0
  237. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_split_step2_diagnose_LLM.prompt +0 -0
  238. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_split_step3_investigate_LLM.prompt +0 -0
  239. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_split_step4_propose_options_LLM.prompt +0 -0
  240. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_split_step6_extract_LLM.prompt +0 -0
  241. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_split_step6a_phase_extract_LLM.prompt +0 -0
  242. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_split_step7_assess_LLM.prompt +0 -0
  243. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_split_step8_repair_LLM.prompt +0 -0
  244. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_split_step9_refine_check_LLM.prompt +0 -0
  245. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_sync_fix_dry_run_LLM.prompt +0 -0
  246. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_sync_identify_modules_LLM.prompt +0 -0
  247. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_generate_LLM.prompt +0 -0
  248. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step10_validate_LLM.prompt +0 -0
  249. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step11_loop_LLM.prompt +0 -0
  250. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step15_plan_validation_LLM.prompt +0 -0
  251. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step16_run_tests_LLM.prompt +0 -0
  252. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step1_duplicate_LLM.prompt +0 -0
  253. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step2_docs_LLM.prompt +0 -0
  254. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step3_clarify_LLM.prompt +0 -0
  255. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step4_detect_frontend_LLM.prompt +0 -0
  256. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step5_test_plan_LLM.prompt +0 -0
  257. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step5b_enhance_plan_LLM.prompt +0 -0
  258. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step6_coverage_LLM.prompt +0 -0
  259. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step6_generate_tests_LLM.prompt +0 -0
  260. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step7_checklist_LLM.prompt +0 -0
  261. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step7_run_tests_LLM.prompt +0 -0
  262. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step8_fix_iterate_LLM.prompt +0 -0
  263. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step8_manual_test_LLM.prompt +0 -0
  264. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step9_regression_LLM.prompt +0 -0
  265. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step9_submit_pr_LLM.prompt +0 -0
  266. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_update_LLM.prompt +0 -0
  267. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_verify_explore_LLM.prompt +0 -0
  268. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/arrange_graph_layout_LLM.prompt +0 -0
  269. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/auto_include_LLM.prompt +0 -0
  270. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/bug_to_unit_test_LLM.prompt +0 -0
  271. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/change_LLM.prompt +0 -0
  272. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/code_patcher_LLM.prompt +0 -0
  273. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/conflict_LLM.prompt +0 -0
  274. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/continue_generation_LLM.prompt +0 -0
  275. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/core_dump_requirements_LLM.prompt +0 -0
  276. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/cross_issue_reconcile_LLM.prompt +0 -0
  277. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/detect_change_LLM.prompt +0 -0
  278. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/diff_analyzer_LLM.prompt +0 -0
  279. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/example_generator_LLM.prompt +0 -0
  280. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/extract_code_LLM.prompt +0 -0
  281. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/extract_conflict_LLM.prompt +0 -0
  282. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/extract_detect_change_LLM.prompt +0 -0
  283. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/extract_program_code_fix_LLM.prompt +0 -0
  284. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/extract_prompt_change_LLM.prompt +0 -0
  285. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/extract_prompt_split_LLM.prompt +0 -0
  286. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/extract_prompt_update_LLM.prompt +0 -0
  287. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/extract_promptline_LLM.prompt +0 -0
  288. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/extract_unit_code_fix_LLM.prompt +0 -0
  289. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/extract_xml_LLM.prompt +0 -0
  290. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/find_verification_errors_LLM.prompt +0 -0
  291. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/fix_code_module_errors_LLM.prompt +0 -0
  292. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/fix_errors_from_unit_tests_LLM.prompt +0 -0
  293. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/fix_verification_errors_LLM.prompt +0 -0
  294. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/generate_test_LLM.prompt +0 -0
  295. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/generate_test_from_example_LLM.prompt +0 -0
  296. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/include_query_extractor_LLM.prompt +0 -0
  297. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/increase_tests_LLM.prompt +0 -0
  298. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/incremental_prd_architecture_patch_LLM.prompt +0 -0
  299. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/insert_includes_LLM.prompt +0 -0
  300. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/one_session_agent_LLM.prompt +0 -0
  301. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/post_gen_verify_LLM.prompt +0 -0
  302. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/prompt_code_diff_LLM.prompt +0 -0
  303. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/prompt_diff_LLM.prompt +0 -0
  304. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/split_LLM.prompt +0 -0
  305. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/summarize_file_LLM.prompt +0 -0
  306. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/sync_analysis_LLM.prompt +0 -0
  307. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/trace_LLM.prompt +0 -0
  308. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/trim_results_LLM.prompt +0 -0
  309. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/trim_results_start_LLM.prompt +0 -0
  310. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/unfinished_prompt_LLM.prompt +0 -0
  311. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/update_prompt_LLM.prompt +0 -0
  312. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/xml_convertor_LLM.prompt +0 -0
  313. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/provider_manager.py +0 -0
  314. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/pytest_output.py +0 -0
  315. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/python_env_detector.py +0 -0
  316. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/reasoning.py +0 -0
  317. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/remote_session.py +0 -0
  318. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/render_mermaid.py +0 -0
  319. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/__init__.py +0 -0
  320. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/app.py +0 -0
  321. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/click_executor.py +0 -0
  322. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/executor.py +0 -0
  323. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/jobs.py +0 -0
  324. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/models.py +0 -0
  325. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/routes/__init__.py +0 -0
  326. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/routes/architecture.py +0 -0
  327. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/routes/auth.py +0 -0
  328. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/routes/commands.py +0 -0
  329. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/routes/config.py +0 -0
  330. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/routes/extracts.py +0 -0
  331. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/routes/files.py +0 -0
  332. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/routes/prompts.py +0 -0
  333. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/routes/websocket.py +0 -0
  334. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/security.py +0 -0
  335. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/terminal_spawner.py +0 -0
  336. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/token_counter.py +0 -0
  337. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/setup_tool.py +0 -0
  338. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/split.py +0 -0
  339. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/split_main.py +0 -0
  340. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/split_validation.py +0 -0
  341. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/summarize_directory.py +0 -0
  342. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/sync_animation.py +0 -0
  343. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/sync_graph_order_consistency.py +0 -0
  344. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/sync_main.py +0 -0
  345. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/sync_orchestration.py +0 -0
  346. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/sync_order.py +0 -0
  347. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/sync_tui.py +0 -0
  348. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/template_expander.py +0 -0
  349. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/template_registry.py +0 -0
  350. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/templates/architecture/architecture_json.prompt +0 -0
  351. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/templates/architecture/example_nextjs_task_notes.prompt +0 -0
  352. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/templates/architecture/example_python_backend.prompt +0 -0
  353. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/templates/architecture/pdd_path_construction_guide.prompt +0 -0
  354. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/templates/generic/generate_pddrc_YAML.prompt +0 -0
  355. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/templates/generic/generate_prompt.prompt +0 -0
  356. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/test_result.py +0 -0
  357. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/trace.py +0 -0
  358. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/trace_main.py +0 -0
  359. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/track_cost.py +0 -0
  360. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/unfinished_prompt.py +0 -0
  361. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/update_model_costs.py +0 -0
  362. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/update_prompt.py +0 -0
  363. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/user_story_tests.py +0 -0
  364. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/validate_prompt_includes.py +0 -0
  365. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/xml_tagger.py +0 -0
  366. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd_cli.egg-info/dependency_links.txt +0 -0
  367. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd_cli.egg-info/entry_points.txt +0 -0
  368. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd_cli.egg-info/requires.txt +0 -0
  369. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd_cli.egg-info/top_level.txt +0 -0
  370. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/setup.cfg +0 -0
  371. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_739_complete.py +0 -0
  372. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_739_e2e_synthetic.py +0 -0
  373. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_739_fixtures.py +0 -0
  374. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_arch_complexity_prompt.py +0 -0
  375. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_architecture.py +0 -0
  376. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_architecture_orchestrator.py +0 -0
  377. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_bug.py +0 -0
  378. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_bug_orchestrator.py +0 -0
  379. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_bug_orchestrator_1.py +0 -0
  380. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_bug_orchestrator_step_comments.py +0 -0
  381. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_bug_step10_prompt.py +0 -0
  382. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_bug_step11_prompt.py +0 -0
  383. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_bug_step7_prompt.py +0 -0
  384. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_change.py +0 -0
  385. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_checkup.py +0 -0
  386. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_checkup_orchestrator.py +0 -0
  387. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_common.py +0 -0
  388. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_common_issue_813_anthropic_api_key_oauth_shadow.py +0 -0
  389. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_common_worktree.py +0 -0
  390. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_crash.py +0 -0
  391. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_e2e_fix.py +0 -0
  392. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_e2e_fix_orchestrator.py +0 -0
  393. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_e2e_fix_step10_prompt.py +0 -0
  394. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_fix.py +0 -0
  395. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_langtest.py +0 -0
  396. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_split.py +0 -0
  397. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_split_orchestrator.py +0 -0
  398. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_split_real.py +0 -0
  399. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_split_v2.py +0 -0
  400. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_sync_nearest_config.py +0 -0
  401. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_test.py +0 -0
  402. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_test_generate.py +0 -0
  403. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_test_orchestrator.py +0 -0
  404. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_update.py +0 -0
  405. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_verify.py +0 -0
  406. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_api_key_scanner.py +0 -0
  407. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_architecture_include_validation.py +0 -0
  408. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_architecture_registry.py +0 -0
  409. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_architecture_sync.py +0 -0
  410. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_auth_service.py +0 -0
  411. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_auto_deps_architecture.py +0 -0
  412. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_auto_deps_entry_wipe.py +0 -0
  413. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_auto_deps_lock.py +0 -0
  414. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_auto_deps_main.py +0 -0
  415. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_auto_include.py +0 -0
  416. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_auto_update.py +0 -0
  417. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_bug_main.py +0 -0
  418. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_bug_to_unit_test.py +0 -0
  419. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_change.py +0 -0
  420. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_change_call_site_and_retry.py +0 -0
  421. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_change_main.py +0 -0
  422. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_checkup_pr_mode.py +0 -0
  423. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_checkup_review_loop.py +0 -0
  424. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_ci_detect_changed_modules.py +0 -0
  425. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_ci_validation.py +0 -0
  426. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_circular_includes.py +0 -0
  427. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_cli.py +0 -0
  428. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_cli_binary_isolation.py +0 -0
  429. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_cli_detector.py +0 -0
  430. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_cloud_noninteractive_auth.py +0 -0
  431. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_cmd_test_main.py +0 -0
  432. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_code_generator.py +0 -0
  433. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_code_generator_main.py +0 -0
  434. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_code_patcher_prompt_json_example.py +0 -0
  435. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_commands_auth.py +0 -0
  436. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_commands_firecrawl.py +0 -0
  437. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_commands_fix.py +0 -0
  438. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_commands_generate.py +0 -0
  439. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_commands_maintenance.py +0 -0
  440. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_commands_modify.py +0 -0
  441. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_commands_templates.py +0 -0
  442. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_commands_utility.py +0 -0
  443. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_comment_line.py +0 -0
  444. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_conflicts_in_prompts.py +0 -0
  445. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_conflicts_main.py +0 -0
  446. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_construct_paths.py +0 -0
  447. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_content_selector.py +0 -0
  448. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_context_example_isolation.py +0 -0
  449. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_context_generator.py +0 -0
  450. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_context_generator_main.py +0 -0
  451. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_continue_generation.py +0 -0
  452. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_copy_package_data_to_public.py +0 -0
  453. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_core_dump.py +0 -0
  454. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_core_errors.py +0 -0
  455. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_core_utils.py +0 -0
  456. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_crash_main.py +0 -0
  457. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_cross_step_consistency_prompts.py +0 -0
  458. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_detect_change.py +0 -0
  459. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_detect_change_main.py +0 -0
  460. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_discover_associated_documents.py +0 -0
  461. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_durable_sync_runner.py +0 -0
  462. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_auto_deps_pipeline.py +0 -0
  463. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_bug_step9_verification.py +0 -0
  464. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_219_duplicate_includes.py +0 -0
  465. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_295_openai_schema.py +0 -0
  466. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_296_custom_csv.py +0 -0
  467. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_305_false_success.py +0 -0
  468. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_309_oauth_rate_limit.py +0 -0
  469. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_319_json_braces.py +0 -0
  470. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_340_report_core_no_default.py +0 -0
  471. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_342_syspath_isolation.py +0 -0
  472. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_349_sys_modules_pollution.py +0 -0
  473. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_357_step9_keyerror.py +0 -0
  474. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_358_jwt_cache_null.py +0 -0
  475. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_364_cumulative_cost.py +0 -0
  476. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_373_step5_keyerror.py +0 -0
  477. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_375_malformed_json.py +0 -0
  478. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_379_auth_null_expires.py +0 -0
  479. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_383_commit_intermediate_files.py +0 -0
  480. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_399_ssh_url_message.py +0 -0
  481. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_419_cli_unpushed_commits.py +0 -0
  482. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_419_unpushed_commits.py +0 -0
  483. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_426_include_path_validation.py +0 -0
  484. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_429_prompt_files_in_pr.py +0 -0
  485. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_445_worktree_resume.py +0 -0
  486. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_448_change_orchestrator.py +0 -0
  487. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_448_step5_keyerror.py +0 -0
  488. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_449_auth_logout_message.py +0 -0
  489. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_467_false_cached_steps.py +0 -0
  490. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_468_not_a_bug_early_exit.py +0 -0
  491. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_469_cleanup_messages.py +0 -0
  492. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_469_duplicate_unresolved.py +0 -0
  493. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_470_sessions_cleanup_auth_message.py +0 -0
  494. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_481_pagination.py +0 -0
  495. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_485_warning_false_negative.py +0 -0
  496. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_493_update_output_subdir.py +0 -0
  497. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_508_budget_test_cost.py +0 -0
  498. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_508_sync_budget_tracking.py +0 -0
  499. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_509_retry_cost.py +0 -0
  500. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_521_circular_includes.py +0 -0
  501. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_522_include_fingerprint.py +0 -0
  502. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_545_no_changes_to_commit.py +0 -0
  503. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_549_format_double_escaping.py +0 -0
  504. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_549_other_orchestrators.py +0 -0
  505. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_553_circular_includes_non_recursive.py +0 -0
  506. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_557_codex_ndjson.py +0 -0
  507. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_566_code_fence_tags.py +0 -0
  508. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_579_bug_worktree_rerun.py +0 -0
  509. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_579_orchestrator_rerun.py +0 -0
  510. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_594_preamble_imports.py +0 -0
  511. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_604_handler_wiring.py +0 -0
  512. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_620_hallucinated_imports.py +0 -0
  513. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_626_nextjs_rendering_model.py +0 -0
  514. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_686_anthropic_cost_double_count.py +0 -0
  515. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_687_postprocess_model_name.py +0 -0
  516. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_737_step_completion_markers.py +0 -0
  517. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_745_initial_cost_tracking.py +0 -0
  518. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_773_hard_stop.py +0 -0
  519. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_791_e2e_timeout_retry.py +0 -0
  520. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_796_typescript_python_validation.py +0 -0
  521. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_797_typescript_verification.py +0 -0
  522. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_817_step5_degenerate_cli.py +0 -0
  523. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_824_artifact_filtering.py +0 -0
  524. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_825_param_drop.py +0 -0
  525. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_830_workflow_stall.py +0 -0
  526. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_894.py +0 -0
  527. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_902_provider_fallback.py +0 -0
  528. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_903_convergence.py +0 -0
  529. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_openai_required_array.py +0 -0
  530. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_pattern_verification.py +0 -0
  531. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_selective_includes.py +0 -0
  532. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_selective_includes_integration.py +0 -0
  533. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_step11_cleanup_revert.py +0 -0
  534. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_subprocess_issue_399_ssh_url_message.py +0 -0
  535. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_subprocess_issue_541_quiet_flag.py +0 -0
  536. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_subprocess_issue_593_bug_exit_code.py +0 -0
  537. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_embed_retrieve.py +0 -0
  538. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_example_error_detection.py +0 -0
  539. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_explicit_output_paths.py +0 -0
  540. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_extracts_prune.py +0 -0
  541. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_failure_classification.py +0 -0
  542. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_find_prompt_file.py +0 -0
  543. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_find_section.py +0 -0
  544. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_firecrawl_cache.py +0 -0
  545. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_fix_code_loop.py +0 -0
  546. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_fix_code_module_errors.py +0 -0
  547. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_fix_error_loop.py +0 -0
  548. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_fix_error_loop_failure_aware.py +0 -0
  549. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_fix_errors_from_unit_tests.py +0 -0
  550. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_fix_main.py +0 -0
  551. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_fix_main_issue_232.py +0 -0
  552. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_fix_verification_errors.py +0 -0
  553. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_fix_verification_errors_loop.py +0 -0
  554. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_fix_verification_main.py +0 -0
  555. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_generate_model_catalog.py +0 -0
  556. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_generate_output_paths.py +0 -0
  557. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_generate_output_paths_regression.py +0 -0
  558. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_generate_test.py +0 -0
  559. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_generation_completion.py +0 -0
  560. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_get_comment.py +0 -0
  561. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_get_extension.py +0 -0
  562. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_get_jwt_token.py +0 -0
  563. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_get_language.py +0 -0
  564. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_get_lint_commands.py +0 -0
  565. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_get_run_command.py +0 -0
  566. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_get_test_command.py +0 -0
  567. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_git_update.py +0 -0
  568. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_include_query_extractor.py +0 -0
  569. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_increase_tests.py +0 -0
  570. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_incremental_code_generator.py +0 -0
  571. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_incremental_prd_architecture.py +0 -0
  572. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_incremental_prd_architecture_real.py +0 -0
  573. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_insert_includes.py +0 -0
  574. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_install_completion.py +0 -0
  575. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_1049_reproduction.py +0 -0
  576. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_1240_generate_prompt_meta_framing.py +0 -0
  577. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_1272_cloud_timeout.py +0 -0
  578. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_225_paths_and_includes.py +0 -0
  579. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_237.py +0 -0
  580. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_467_all_orchestrators.py +0 -0
  581. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_469_duplicate_unresolved.py +0 -0
  582. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_592_failing_case.py +0 -0
  583. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_600_agentic_weaknesses.py +0 -0
  584. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_633_reproduction.py +0 -0
  585. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_686_post_process_args_braces.py +0 -0
  586. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_737_step_completion_markers.py +0 -0
  587. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_791_reproduction.py +0 -0
  588. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_794_anti_tdd_and_test_discovery.py +0 -0
  589. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_794_repro.py +0 -0
  590. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_830_remaining_fixes.py +0 -0
  591. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_865_reproduction.py +0 -0
  592. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_894_pytest_output_deadlock.py +0 -0
  593. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_902.py +0 -0
  594. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_902_prompt_sync.py +0 -0
  595. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_926_preserve_comments_directive.py +0 -0
  596. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_953_directory_scan_regression.py +0 -0
  597. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_jobs_sync_failure_detection.py +0 -0
  598. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_list_drift_detection.py +0 -0
  599. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_llm_invoke.py +0 -0
  600. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_llm_invoke_csv_model_registration.py +0 -0
  601. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_llm_invoke_integration.py +0 -0
  602. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_llm_invoke_nested_schema.py +0 -0
  603. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_llm_invoke_retry_cost.py +0 -0
  604. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_llm_invoke_vertex_retry.py +0 -0
  605. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_load_prompt_template.py +0 -0
  606. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_logo_animation.py +0 -0
  607. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_metadata_sync.py +0 -0
  608. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_mock_vs_production_fix.py +0 -0
  609. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_model_tester.py +0 -0
  610. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_nextjs_rendering_model.py +0 -0
  611. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_one_session_eval.py +0 -0
  612. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_one_session_sync.py +0 -0
  613. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_opencode_provider.py +0 -0
  614. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_operation_log.py +0 -0
  615. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_operation_logging_e2e.py +0 -0
  616. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_path_resolution.py +0 -0
  617. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_pattern_completeness_verification.py +0 -0
  618. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_pddrc_initializer.py +0 -0
  619. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_pddrc_true_e2e.py +0 -0
  620. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_pin_example_hack.py +0 -0
  621. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_postprocess.py +0 -0
  622. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_postprocess_0.py +0 -0
  623. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_preprocess.py +0 -0
  624. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_preprocess_main.py +0 -0
  625. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_preprocess_main_pdd_tags.py +0 -0
  626. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_process_csv_change.py +0 -0
  627. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_prompt_contract_validation.py +0 -0
  628. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_provider_env_isolation.py +0 -0
  629. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_provider_manager.py +0 -0
  630. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_pytest_output.py +0 -0
  631. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_quiet_flag.py +0 -0
  632. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_reasoning.py +0 -0
  633. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_remote_command_completion.py +0 -0
  634. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_remote_session.py +0 -0
  635. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_render_mermaid.py +0 -0
  636. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_report.py +0 -0
  637. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_research_prompt_web_tools.py +0 -0
  638. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_server_routes_prompts.py +0 -0
  639. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_server_spawn.py +0 -0
  640. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_setup_tool.py +0 -0
  641. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_split.py +0 -0
  642. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_split_main.py +0 -0
  643. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_split_seam_resolution.py +0 -0
  644. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_split_validation.py +0 -0
  645. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_step11_api_mocking_guidance.py +0 -0
  646. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_structural_test_guard.py +0 -0
  647. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_structural_test_guard_integration.py +0 -0
  648. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_summarize_directory.py +0 -0
  649. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_sync_animation.py +0 -0
  650. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_sync_animation_0.py +0 -0
  651. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_sync_backward_compat.py +0 -0
  652. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_sync_code_main.py +0 -0
  653. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_sync_contract_matrix.py +0 -0
  654. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_sync_graph_order_consistency.py +0 -0
  655. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_sync_main.py +0 -0
  656. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_sync_orchestration.py +0 -0
  657. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_sync_order.py +0 -0
  658. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_sync_target_coverage_infinite_loop.py +0 -0
  659. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_sync_template_prompt_discovery.py +0 -0
  660. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_sync_tui.py +0 -0
  661. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_template_expander.py +0 -0
  662. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_template_registry.py +0 -0
  663. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_thread_safe_redirector.py +0 -0
  664. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_time_reasoning_effort_env.py +0 -0
  665. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_trace.py +0 -0
  666. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_trace_main.py +0 -0
  667. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_track_cost.py +0 -0
  668. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_unfinished_prompt.py +0 -0
  669. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_update_command.py +0 -0
  670. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_update_model_costs.py +0 -0
  671. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_update_prompt.py +0 -0
  672. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_user_story_tests.py +0 -0
  673. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_version.py +0 -0
  674. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_which.py +0 -0
  675. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_xml_tagger.py +0 -0
  676. {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_z3_prompt_test_correspondence.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pdd-cli
3
- Version: 0.0.237
3
+ Version: 0.0.238
4
4
  Summary: PDD (Prompt-Driven Development) Command Line Interface
5
5
  Author: Greg Tanaka
6
6
  Author-email: glt@alumni.caltech.edu
@@ -65,7 +65,7 @@ Requires-Dist: twine; extra == "dev"
65
65
  Requires-Dist: httpx==0.28.1; extra == "dev"
66
66
  Dynamic: license-file
67
67
 
68
- .. image:: https://img.shields.io/badge/pdd--cli-v0.0.237-blue
68
+ .. image:: https://img.shields.io/badge/pdd--cli-v0.0.238-blue
69
69
  :alt: PDD-CLI Version
70
70
 
71
71
  .. image:: https://img.shields.io/badge/Discord-join%20chat-7289DA.svg?logo=discord&logoColor=white&link=https://discord.gg/Yp4RTh8bG7
@@ -142,7 +142,7 @@ After installation, verify:
142
142
 
143
143
  pdd --version
144
144
 
145
- You'll see the current PDD version (e.g., 0.0.237).
145
+ You'll see the current PDD version (e.g., 0.0.238).
146
146
 
147
147
  Getting Started with Examples
148
148
  -----------------------------
@@ -1,6 +1,6 @@
1
1
  # PDD (Prompt-Driven Development) Command Line Interface
2
2
 
3
- ![PDD-CLI Version](https://img.shields.io/badge/pdd--cli-v0.0.237-blue) [![Discord](https://img.shields.io/badge/Discord-join%20chat-7289DA.svg?logo=discord&logoColor=white)](https://discord.gg/Yp4RTh8bG7)
3
+ ![PDD-CLI Version](https://img.shields.io/badge/pdd--cli-v0.0.238-blue) [![Discord](https://img.shields.io/badge/Discord-join%20chat-7289DA.svg?logo=discord&logoColor=white)](https://discord.gg/Yp4RTh8bG7)
4
4
 
5
5
  ## Introduction
6
6
 
@@ -362,7 +362,7 @@ For proper model identifiers to use in your custom configuration, refer to the [
362
362
 
363
363
  ## Version
364
364
 
365
- Current version: 0.0.237
365
+ Current version: 0.0.238
366
366
 
367
367
  To check your installed version, run:
368
368
  ```
@@ -2412,7 +2412,7 @@ Options:
2412
2412
  - `--git`: Use git history to find the original code file, eliminating the need for the `INPUT_CODE_FILE` argument.
2413
2413
  - `--extensions EXTENSIONS`: In repository-wide mode, filter the update to only include files with the specified comma-separated extensions (e.g., `py,js,ts`).
2414
2414
  - `--simple`: Use the legacy 2-stage LLM update process instead of the default agentic mode. Useful when agentic CLIs are not available or for faster updates.
2415
- - `--sync-metadata`: After the prompt update, run the shared metadata-sync orchestrator so prompt PDD tags, `architecture.json` entries, run reports, and fingerprint state are reconciled in one step. Works in single-file, regeneration, and repo modes. Without this flag, behavior is unchanged and metadata layers must be reconciled with separate commands. **Scope note:** the `tags` stage currently *preserves* existing PDD tags and only *seeds* tags from the matching `architecture.json` entry when a prompt has none — LLM-first **refresh** of stale-but-present tags is tracked at issue [#870](https://github.com/promptdriven/pdd/issues/870) and is not invoked by this orchestrator. When a prompt has zero PDD tags AND no architecture entry, the `tags` stage reports `skipped` (never `ok`) so operators see honest status. On any stage `failed`, `pdd update --sync-metadata` exits non-zero so CI auto-heal does not treat a half-finalized update as healed.
2415
+ - `--sync-metadata`: After the prompt update, run the shared metadata-sync orchestrator so prompt PDD tags, `architecture.json` entries, run reports, and fingerprint state are reconciled in one step. Works in single-file, regeneration, and repo modes. **Fingerprint note:** default single-file/regeneration `pdd update <code>` already finalizes the per-target fingerprint (`.pdd/meta/<basename>_<language>.json`) on success, and logs a skip reason when finalization is intentionally bypassed; `--sync-metadata` does not gate that behavior. Without this flag, the broader prompt-tag/architecture/run-report orchestrator is not run and those layers must be reconciled with separate commands. **Scope note:** the `tags` stage currently *preserves* existing PDD tags and only *seeds* tags from the matching `architecture.json` entry when a prompt has none — LLM-first **refresh** of stale-but-present tags is tracked at issue [#870](https://github.com/promptdriven/pdd/issues/870) and is not invoked by this orchestrator. When a prompt has zero PDD tags AND no architecture entry, the `tags` stage reports `skipped` (never `ok`) so operators see honest status. On any stage `failed`, `pdd update --sync-metadata` exits non-zero so CI auto-heal does not treat a half-finalized update as healed.
2416
2416
 
2417
2417
  Example (Metadata Sync):
2418
2418
  ```bash
@@ -3561,6 +3561,11 @@ For detailed command examples for each workflow, see the respective command docu
3561
3561
  - `pull_request_target` (opened / synchronize / reopened / ready_for_review): heals only modules changed by the PR and pushes a `chore: auto-heal …` commit back to the PR branch.
3562
3562
  - `issue_comment` with a `/heal` command on a PR by an authorized collaborator: same as above, on demand.
3563
3563
 
3564
+ Generated internal PRs authored by `prompt-driven-github[bot]` are trusted as
3565
+ the autonomous pdd-issue App identity for the `pull_request_target` heal path.
3566
+ Other PR authors and all `/heal` comment requesters must pass the `pdd_cloud`
3567
+ collaborator check before Cloud Build is dispatched.
3568
+
3564
3569
  There is no push-to-main trigger. Drift on `main` is healed by the next PR that touches the affected modules.
3565
3570
 
3566
3571
  **Loop prevention**: Auto-heal commits start with `chore: auto-heal …`; the Cloud Build step short-circuits when the triggering commit subject matches that prefix, so the heal cannot retrigger itself.
@@ -1013,6 +1013,15 @@ def _preflight_drift_heal(
1013
1013
  if not quiet:
1014
1014
  console.print(f" [green]✓[/green] healed {drift.basename}")
1015
1015
  else:
1016
+ combined_output = f"{result.stdout or ''}\n{result.stderr or ''}"
1017
+ if (
1018
+ "metadata finalization failed" in combined_output
1019
+ or "metadata staging verification failed" in combined_output
1020
+ or "[metadata-sync]" in combined_output
1021
+ ):
1022
+ raise RuntimeError(
1023
+ f"preflight metadata finalization failed for {drift.basename}"
1024
+ )
1016
1025
  failed.append(drift.basename)
1017
1026
  if not quiet:
1018
1027
  tail = result.stderr.strip().splitlines()[-1:] or ["(no stderr)"]
@@ -1026,6 +1035,8 @@ def _preflight_drift_heal(
1026
1035
  console.print(
1027
1036
  f" [red]✗[/red] heal timed out for {drift.basename}"
1028
1037
  )
1038
+ except RuntimeError:
1039
+ raise
1029
1040
  except Exception as exc:
1030
1041
  failed.append(drift.basename)
1031
1042
  if not quiet:
@@ -36,7 +36,11 @@ from .architecture_include_validation import (
36
36
  validate_prompt_contract_context,
37
37
  )
38
38
  from .sync_graph_order_consistency import warnings_for_arch_vs_include_sync_order
39
- from .architecture_registry import extract_modules, find_project_root as _find_project_root
39
+ from .architecture_registry import (
40
+ extract_modules,
41
+ find_architecture_for_project,
42
+ find_project_root as _find_project_root,
43
+ )
40
44
  from .construct_paths import (
41
45
  _detect_context_from_basename,
42
46
  _extract_prefix_from_prompts_dir,
@@ -421,12 +425,23 @@ class GlobalSyncAnalysis(NamedTuple):
421
425
 
422
426
  modules_to_sync: List[str]
423
427
  module_cwds: Dict[str, Path]
428
+ module_targets: Dict[str, str]
424
429
  estimated_cost: float
425
430
  module_operations: Dict[str, List[str]]
426
431
  skipped_modules: List[str]
427
432
  all_modules: List[str]
428
433
 
429
434
 
435
+ class GlobalSyncModule(NamedTuple):
436
+ """Scoped global-sync module identity."""
437
+
438
+ key: str
439
+ basename: str
440
+ cwd: Path
441
+ architecture_path: Path
442
+ entry: Dict[str, Any]
443
+
444
+
430
445
  def _architecture_module_basenames(architecture: List[Dict[str, Any]]) -> List[str]:
431
446
  """Return syncable architecture module basenames, preserving declaration order."""
432
447
  basenames: List[str] = []
@@ -441,6 +456,58 @@ def _architecture_module_basenames(architecture: List[Dict[str, Any]]) -> List[s
441
456
  return basenames
442
457
 
443
458
 
459
+ def _architecture_sync_modules(project_root: Path) -> Tuple[List[GlobalSyncModule], List[Dict[str, Any]], Path]:
460
+ """Return architecture modules with cwd scope preserved."""
461
+ arch_files = find_architecture_for_project(project_root)
462
+ if not arch_files:
463
+ return [], [], project_root / "architecture.json"
464
+
465
+ raw_modules: List[Tuple[str, Path, Path, Dict[str, Any]]] = []
466
+ architecture: List[Dict[str, Any]] = []
467
+ seen: set[Tuple[Path, str]] = set()
468
+
469
+ for arch_path in arch_files:
470
+ try:
471
+ data = json.loads(arch_path.read_text(encoding="utf-8"))
472
+ except (json.JSONDecodeError, OSError):
473
+ continue
474
+
475
+ arch_dir = arch_path.parent
476
+ for entry in extract_modules(data):
477
+ basename = _basename_from_architecture_filename(entry.get("filename", ""))
478
+ if not basename:
479
+ continue
480
+ dedupe_key = (arch_path.resolve(), basename)
481
+ if dedupe_key in seen:
482
+ continue
483
+ seen.add(dedupe_key)
484
+ architecture.append(entry)
485
+ # Consult _resolve_module_cwd so a nested .pddrc whose context owns
486
+ # this basename wins over the arch file's own directory. The
487
+ # resolver scans subdirectories of arch_dir for .pddrc files and
488
+ # falls back to arch_dir when no nested config claims the basename.
489
+ cwd = _resolve_module_cwd(basename, arch_dir)
490
+ raw_modules.append((basename, cwd, arch_path, entry))
491
+
492
+ counts: Dict[str, int] = {}
493
+ for basename, _, _, _ in raw_modules:
494
+ counts[basename] = counts.get(basename, 0) + 1
495
+
496
+ modules: List[GlobalSyncModule] = []
497
+ for basename, cwd, arch_path, entry in raw_modules:
498
+ if counts[basename] > 1:
499
+ try:
500
+ rel_scope = arch_path.parent.resolve().relative_to(project_root.resolve()).as_posix()
501
+ except (OSError, ValueError):
502
+ rel_scope = arch_path.parent.as_posix()
503
+ key = f"{rel_scope or '.'}:{basename}"
504
+ else:
505
+ key = basename
506
+ modules.append(GlobalSyncModule(key, basename, cwd, arch_path, entry))
507
+
508
+ return modules, architecture, arch_files[0]
509
+
510
+
444
511
  def _prompt_contract_errors_for_module(
445
512
  basename: str,
446
513
  cwd: Path,
@@ -578,7 +645,7 @@ def _resolve_module_sync_context(
578
645
 
579
646
 
580
647
  def _analyze_global_sync_modules(
581
- modules: List[str],
648
+ modules: List[GlobalSyncModule],
582
649
  project_root: Path,
583
650
  *,
584
651
  quiet: bool = False,
@@ -590,29 +657,33 @@ def _analyze_global_sync_modules(
590
657
  """Tier 1 global sync analysis: fingerprint-scan all architecture modules."""
591
658
  modules_to_sync: List[str] = []
592
659
  module_cwds: Dict[str, Path] = {}
660
+ module_targets: Dict[str, str] = {}
593
661
  module_operations: Dict[str, List[str]] = {}
594
662
  skipped_modules: List[str] = []
595
663
  estimated_cost = 0.0
596
664
  effective_budget = budget if budget is not None else 10.0
597
665
  effective_coverage = target_coverage if target_coverage is not None else 90.0
598
666
 
599
- for basename in modules:
600
- cwd = _resolve_module_cwd(basename, project_root)
601
- module_cwds[basename] = cwd
667
+ for module in modules:
668
+ key = module.key
669
+ basename = module.basename
670
+ cwd = module.cwd
671
+ module_cwds[key] = cwd
672
+ module_targets[key] = basename
602
673
 
603
674
  try:
604
675
  context_name, prompts_dir, lang_to_path = _resolve_module_sync_context(
605
676
  basename, cwd
606
677
  )
607
678
  except Exception as exc:
608
- modules_to_sync.append(basename)
609
- module_operations[basename] = [
679
+ modules_to_sync.append(key)
680
+ module_operations[key] = [
610
681
  f"analysis-error: {exc}; queued for sync as safe fallback"
611
682
  ]
612
683
  continue
613
684
 
614
685
  if not lang_to_path:
615
- skipped_modules.append(f"{basename}: no syncable prompt file found")
686
+ skipped_modules.append(f"{key}: no syncable prompt file found")
616
687
  continue
617
688
 
618
689
  operations: List[str] = []
@@ -644,13 +715,13 @@ def _analyze_global_sync_modules(
644
715
  estimated_cost += float(decision.estimated_cost or 0.0)
645
716
  elif decision.operation not in _GLOBAL_SYNC_NOOP_OPERATIONS:
646
717
  skipped_modules.append(
647
- f"{basename}: {language} requires {decision.operation}; "
718
+ f"{key}: {language} requires {decision.operation}; "
648
719
  "outside Tier 1 prompt-staleness scope"
649
720
  )
650
721
 
651
722
  if needs_sync:
652
- modules_to_sync.append(basename)
653
- module_operations[basename] = operations
723
+ modules_to_sync.append(key)
724
+ module_operations[key] = operations
654
725
 
655
726
  if not quiet:
656
727
  skipped_count = len(modules) - len(modules_to_sync)
@@ -662,10 +733,11 @@ def _analyze_global_sync_modules(
662
733
  return GlobalSyncAnalysis(
663
734
  modules_to_sync=modules_to_sync,
664
735
  module_cwds=module_cwds,
736
+ module_targets=module_targets,
665
737
  estimated_cost=estimated_cost,
666
738
  module_operations=module_operations,
667
739
  skipped_modules=skipped_modules,
668
- all_modules=modules,
740
+ all_modules=[module.key for module in modules],
669
741
  )
670
742
 
671
743
 
@@ -683,6 +755,90 @@ def _dependency_ordered_modules(
683
755
  return ordered
684
756
 
685
757
 
758
+ def _build_scoped_global_dep_graph(
759
+ modules: List[GlobalSyncModule],
760
+ target_keys: List[str],
761
+ project_root: Path,
762
+ ) -> Tuple[Dict[str, List[str]], List[str]]:
763
+ """Build a dependency graph for scoped global-sync module keys.
764
+
765
+ Dep resolution proceeds in two passes:
766
+
767
+ 1. Same-architecture scope: prefer a module declared in the same
768
+ architecture.json as the depending module.
769
+ 2. Cross-architecture fallback: if no same-arch match exists, look across
770
+ all loaded modules by basename. An unambiguous match (exactly one
771
+ module across all archs with that basename) is accepted to preserve
772
+ the prior combined-architecture behaviour. Ambiguous cross-arch
773
+ basenames (multiple matches) emit a warning and drop the edge.
774
+ """
775
+ target_set = set(target_keys)
776
+ module_by_key = {module.key: module for module in modules}
777
+ key_by_scope_basename = {
778
+ (module.architecture_path.resolve(), module.basename): module.key
779
+ for module in modules
780
+ }
781
+ # Global basename index used for unambiguous cross-arch fallback.
782
+ keys_by_basename: Dict[str, List[str]] = {}
783
+ for module in modules:
784
+ keys_by_basename.setdefault(module.basename, []).append(module.key)
785
+ graph: Dict[str, List[str]] = {key: [] for key in target_keys}
786
+ warnings: List[str] = []
787
+
788
+ for key in target_keys:
789
+ module = module_by_key.get(key)
790
+ if module is None:
791
+ continue
792
+ deps = module.entry.get("dependencies", [])
793
+ if not isinstance(deps, list):
794
+ continue
795
+ for dep in deps:
796
+ dep_basename = _basename_from_architecture_filename(str(dep))
797
+ if not dep_basename:
798
+ continue
799
+ dep_key = key_by_scope_basename.get(
800
+ (module.architecture_path.resolve(), dep_basename)
801
+ )
802
+ if dep_key is None:
803
+ # Same-architecture lookup missed. Fall back to a global
804
+ # basename lookup so cross-arch edges (preserved by the old
805
+ # combined-architecture builder) still resolve when the
806
+ # basename is unambiguous across the loaded modules.
807
+ candidate_keys = keys_by_basename.get(dep_basename, [])
808
+ if len(candidate_keys) == 1:
809
+ dep_key = candidate_keys[0]
810
+ elif len(candidate_keys) > 1:
811
+ warnings.append(
812
+ f"combined architecture data under {project_root}: "
813
+ f"module '{key}' declares ambiguous cross-arch "
814
+ f"dependency '{dep}' (basename '{dep_basename}' "
815
+ f"matches multiple modules: "
816
+ f"{', '.join(sorted(candidate_keys))}); "
817
+ "edge omitted from schedule"
818
+ )
819
+ continue
820
+ else:
821
+ warnings.append(
822
+ f"combined architecture data under {project_root}: "
823
+ f"module '{key}' declares unresolved dependency "
824
+ f"'{dep}'; no module with that filename in the same "
825
+ "architecture scope; edge omitted from schedule"
826
+ )
827
+ continue
828
+ if dep_key == key:
829
+ continue
830
+ if dep_key in target_set:
831
+ graph[key].append(dep_key)
832
+ else:
833
+ warnings.append(
834
+ f"combined architecture data under {project_root}: module "
835
+ f"'{key}' depends on '{dep_key}' (via '{dep}'), which is not "
836
+ "in the sync target set; edge omitted from schedule"
837
+ )
838
+
839
+ return graph, warnings
840
+
841
+
686
842
  def _print_global_sync_plan(
687
843
  analysis: GlobalSyncAnalysis,
688
844
  ordered_modules: List[str],
@@ -736,8 +892,8 @@ def run_global_sync(
736
892
  ) -> Tuple[bool, str, float, str]:
737
893
  """Run project-wide Tier 1 global sync from architecture.json."""
738
894
  project_root = _find_project_root(Path.cwd())
739
- architecture, arch_path = _load_architecture_json(project_root)
740
- if architecture is None:
895
+ all_modules, architecture, arch_path = _architecture_sync_modules(project_root)
896
+ if not architecture:
741
897
  return (
742
898
  False,
743
899
  f"No architecture.json found under {project_root}.",
@@ -745,7 +901,6 @@ def run_global_sync(
745
901
  "global-sync",
746
902
  )
747
903
 
748
- all_modules = _architecture_module_basenames(architecture)
749
904
  if not all_modules:
750
905
  return (
751
906
  False,
@@ -764,18 +919,18 @@ def run_global_sync(
764
919
  target_coverage=target_coverage,
765
920
  )
766
921
 
767
- dep_result = build_dep_graph_from_architecture_data(
768
- architecture,
922
+ dep_graph, dep_warnings = _build_scoped_global_dep_graph(
923
+ all_modules,
769
924
  analysis.modules_to_sync,
770
- source_name=f"combined architecture data under {project_root}",
925
+ project_root,
771
926
  )
772
927
  ordered_modules = _dependency_ordered_modules(
773
- analysis.modules_to_sync, dep_result.graph
928
+ analysis.modules_to_sync, dep_graph
774
929
  )
775
930
 
776
931
  if dry_run:
777
932
  if not quiet:
778
- _print_global_sync_plan(analysis, ordered_modules, dep_result.warnings, budget)
933
+ _print_global_sync_plan(analysis, ordered_modules, dep_warnings, budget)
779
934
  return (
780
935
  True,
781
936
  f"Global sync dry run: {len(ordered_modules)} module(s) would sync.",
@@ -801,13 +956,13 @@ def run_global_sync(
801
956
  "global-sync",
802
957
  )
803
958
 
804
- for warning in dep_result.warnings:
959
+ for warning in dep_warnings:
805
960
  if not quiet:
806
961
  console.print(f"[yellow]Warning: {warning}[/yellow]")
807
962
 
808
963
  runner = AsyncSyncRunner(
809
964
  basenames=ordered_modules,
810
- dep_graph=dep_result.graph,
965
+ dep_graph=dep_graph,
811
966
  sync_options={
812
967
  "total_budget": budget,
813
968
  "skip_verify": skip_verify,
@@ -825,6 +980,7 @@ def run_global_sync(
825
980
  verbose=verbose,
826
981
  issue_url=None,
827
982
  module_cwds=analysis.module_cwds,
983
+ module_targets=analysis.module_targets,
828
984
  initial_cost=0.0,
829
985
  )
830
986
  success, message, cost = runner.run()
@@ -946,6 +1102,13 @@ def _resolve_module_cwd(basename: str, project_root: Path) -> Path:
946
1102
  they match everything and should not claim ownership of unrelated modules.
947
1103
  2. Fall back to project_root (which may have its own root .pddrc).
948
1104
  """
1105
+ root_has_prompt = False
1106
+ try:
1107
+ _, _, root_lang_to_path = _resolve_module_sync_context(basename, project_root)
1108
+ root_has_prompt = bool(root_lang_to_path)
1109
+ except Exception:
1110
+ root_has_prompt = False
1111
+
949
1112
  # 1. Scan subdirectories for .pddrc files (max depth 2)
950
1113
  best_match: Optional[Path] = None
951
1114
  best_depth = -1
@@ -962,10 +1125,11 @@ def _resolve_module_cwd(basename: str, project_root: Path) -> Path:
962
1125
  if _is_catchall_match(basename, config):
963
1126
  continue
964
1127
  candidate_dir = pddrc_path.parent
965
- if _is_broad_basename_glob_match(basename, config, detected) and not (
966
- _prompt_exists_for_context(candidate_dir, config, detected, basename)
967
- ):
968
- continue
1128
+ if _is_broad_basename_glob_match(basename, config, detected):
1129
+ if root_has_prompt:
1130
+ continue
1131
+ if not _prompt_exists_for_context(candidate_dir, config, detected, basename):
1132
+ continue
969
1133
  candidate_depth = len(candidate_dir.relative_to(project_root).parts)
970
1134
  if candidate_depth > best_depth:
971
1135
  best_match = candidate_dir
@@ -818,6 +818,7 @@ class AsyncSyncRunner:
818
818
  verbose: bool = False,
819
819
  issue_url: Optional[str] = None,
820
820
  module_cwds: Optional[Dict[str, Any]] = None,
821
+ module_targets: Optional[Dict[str, str]] = None,
821
822
  initial_cost: float = 0.0,
822
823
  ):
823
824
  self.basenames: List[str] = list(basenames)
@@ -831,6 +832,7 @@ class AsyncSyncRunner:
831
832
  self.issue_url = issue_url
832
833
  self.project_root: Path = Path.cwd()
833
834
  self.module_cwds: Dict[str, Any] = dict(module_cwds or {})
835
+ self.module_targets: Dict[str, str] = dict(module_targets or {})
834
836
  self.initial_cost = float(initial_cost or 0.0)
835
837
 
836
838
  self.total_budget = self.sync_options.get("total_budget")
@@ -1616,7 +1618,7 @@ class AsyncSyncRunner:
1616
1618
  elif self.sync_options.get("budget") is not None:
1617
1619
  cmd.extend(["--budget", str(self.sync_options["budget"])])
1618
1620
 
1619
- cmd.append(basename)
1621
+ cmd.append(self.module_targets.get(basename, basename))
1620
1622
  return cmd
1621
1623
 
1622
1624
  def _build_env(