pdd-cli 0.0.239__tar.gz → 0.0.241__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 (678) hide show
  1. {pdd_cli-0.0.239/pdd_cli.egg-info → pdd_cli-0.0.241}/PKG-INFO +4 -3
  2. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/README.md +10 -2
  3. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/agentic_e2e_fix_orchestrator.py +231 -18
  4. pdd_cli-0.0.241/pdd/auto_deps_main.py +267 -0
  5. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/ci_drift_heal.py +75 -8
  6. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/pdd_completion.sh +1 -1
  7. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/sync_determine_operation.py +1 -1
  8. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/sync_orchestration.py +19 -1
  9. {pdd_cli-0.0.239 → pdd_cli-0.0.241/pdd_cli.egg-info}/PKG-INFO +4 -3
  10. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd_cli.egg-info/SOURCES.txt +1 -0
  11. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd_cli.egg-info/requires.txt +1 -0
  12. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pypi_description.rst +2 -2
  13. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pyproject.toml +4 -3
  14. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_e2e_fix_orchestrator.py +1363 -0
  15. pdd_cli-0.0.241/tests/test_agentic_e2e_fix_orchestrator_resume_prompt.py +713 -0
  16. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_auto_deps_main.py +532 -0
  17. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_ci_drift_heal.py +242 -8
  18. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_sync_determine_operation.py +34 -0
  19. pdd_cli-0.0.239/pdd/auto_deps_main.py +0 -163
  20. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/LICENSE +0 -0
  21. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/__init__.py +0 -0
  22. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/__main__.py +0 -0
  23. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/_keyring_timeout.py +0 -0
  24. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/agentic_architecture.py +0 -0
  25. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/agentic_architecture_orchestrator.py +0 -0
  26. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/agentic_bug.py +0 -0
  27. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/agentic_bug_orchestrator.py +0 -0
  28. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/agentic_change.py +0 -0
  29. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/agentic_change_orchestrator.py +0 -0
  30. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/agentic_checkup.py +0 -0
  31. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/agentic_checkup_orchestrator.py +0 -0
  32. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/agentic_common.py +0 -0
  33. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/agentic_common_worktree.py +0 -0
  34. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/agentic_crash.py +0 -0
  35. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/agentic_e2e_fix.py +0 -0
  36. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/agentic_fix.py +0 -0
  37. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/agentic_langtest.py +0 -0
  38. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/agentic_split.py +0 -0
  39. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/agentic_split_orchestrator.py +0 -0
  40. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/agentic_sync.py +0 -0
  41. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/agentic_sync_runner.py +0 -0
  42. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/agentic_test.py +0 -0
  43. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/agentic_test_generate.py +0 -0
  44. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/agentic_test_orchestrator.py +0 -0
  45. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/agentic_update.py +0 -0
  46. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/agentic_verify.py +0 -0
  47. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/api_key_scanner.py +0 -0
  48. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/architecture_include_validation.py +0 -0
  49. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/architecture_registry.py +0 -0
  50. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/architecture_sync.py +0 -0
  51. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/architecture_sync_helper.py +0 -0
  52. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/auth_service.py +0 -0
  53. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/auto_deps_architecture.py +0 -0
  54. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/auto_include.py +0 -0
  55. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/auto_update.py +0 -0
  56. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/bug_main.py +0 -0
  57. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/bug_to_unit_test.py +0 -0
  58. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/change.py +0 -0
  59. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/change_main.py +0 -0
  60. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/checkup_review_loop.py +0 -0
  61. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/ci_detect_changed_modules.py +0 -0
  62. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/ci_validation.py +0 -0
  63. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/cli.py +0 -0
  64. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/cli_detector.py +0 -0
  65. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/cmd_test_main.py +0 -0
  66. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/code_generator.py +0 -0
  67. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/code_generator_main.py +0 -0
  68. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/commands/__init__.py +0 -0
  69. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/commands/analysis.py +0 -0
  70. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/commands/auth.py +0 -0
  71. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/commands/checkup.py +0 -0
  72. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/commands/connect.py +0 -0
  73. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/commands/extracts.py +0 -0
  74. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/commands/firecrawl.py +0 -0
  75. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/commands/fix.py +0 -0
  76. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/commands/generate.py +0 -0
  77. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/commands/maintenance.py +0 -0
  78. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/commands/misc.py +0 -0
  79. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/commands/modify.py +0 -0
  80. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/commands/report.py +0 -0
  81. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/commands/sessions.py +0 -0
  82. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/commands/templates.py +0 -0
  83. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/commands/utility.py +0 -0
  84. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/commands/which.py +0 -0
  85. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/comment_line.py +0 -0
  86. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/config_resolution.py +0 -0
  87. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/conflicts_in_prompts.py +0 -0
  88. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/conflicts_main.py +0 -0
  89. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/construct_paths.py +0 -0
  90. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/content_selector.py +0 -0
  91. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/context_generator.py +0 -0
  92. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/context_generator_main.py +0 -0
  93. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/continue_generation.py +0 -0
  94. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/core/__init__.py +0 -0
  95. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/core/cli.py +0 -0
  96. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/core/cloud.py +0 -0
  97. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/core/dump.py +0 -0
  98. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/core/duplicate_cli_guard.py +0 -0
  99. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/core/errors.py +0 -0
  100. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/core/llm_trace.py +0 -0
  101. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/core/remote_session.py +0 -0
  102. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/core/utils.py +0 -0
  103. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/crash_main.py +0 -0
  104. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/data/arena_elo_manifest.json +0 -0
  105. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/data/language_format.csv +0 -0
  106. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/data/llm_model.csv +0 -0
  107. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/detect_change.py +0 -0
  108. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/detect_change_main.py +0 -0
  109. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/docs/prompting_guide.md +0 -0
  110. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/durable_sync_runner.py +0 -0
  111. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/edit_file.py +0 -0
  112. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/embed_retrieve.py +0 -0
  113. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/extracts_prune.py +0 -0
  114. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/failure_classification.py +0 -0
  115. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/find_section.py +0 -0
  116. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/firecrawl_cache.py +0 -0
  117. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/fix_code_loop.py +0 -0
  118. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/fix_code_module_errors.py +0 -0
  119. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/fix_error_loop.py +0 -0
  120. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/fix_errors_from_unit_tests.py +0 -0
  121. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/fix_main.py +0 -0
  122. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/fix_verification_errors.py +0 -0
  123. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/fix_verification_errors_loop.py +0 -0
  124. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/fix_verification_main.py +0 -0
  125. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/generate_model_catalog.py +0 -0
  126. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/generate_output_paths.py +0 -0
  127. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/generate_test.py +0 -0
  128. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/generation_completion.py +0 -0
  129. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/get_comment.py +0 -0
  130. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/get_extension.py +0 -0
  131. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/get_jwt_token.py +0 -0
  132. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/get_language.py +0 -0
  133. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/get_lint_commands.py +0 -0
  134. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/get_run_command.py +0 -0
  135. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/get_test_command.py +0 -0
  136. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/git_update.py +0 -0
  137. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/include_query_extractor.py +0 -0
  138. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/increase_tests.py +0 -0
  139. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/incremental_code_generator.py +0 -0
  140. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/incremental_prd_architecture.py +0 -0
  141. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/insert_includes.py +0 -0
  142. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/install_completion.py +0 -0
  143. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/json_atomic.py +0 -0
  144. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/list_drift_detection.py +0 -0
  145. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/llm_invoke.py +0 -0
  146. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/load_prompt_template.py +0 -0
  147. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/logo_animation.py +0 -0
  148. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/mcp_config.json +0 -0
  149. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/metadata_sync.py +0 -0
  150. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/model_tester.py +0 -0
  151. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/one_session_sync.py +0 -0
  152. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/operation_log.py +0 -0
  153. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/path_resolution.py +0 -0
  154. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/pdd_completion.fish +0 -0
  155. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/pdd_completion.zsh +0 -0
  156. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/pddrc_initializer.py +0 -0
  157. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/pin_example_hack.py +0 -0
  158. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/postprocess.py +0 -0
  159. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/postprocess_0.py +0 -0
  160. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/preprocess.py +0 -0
  161. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/preprocess_main.py +0 -0
  162. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/process_csv_change.py +0 -0
  163. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step10_completeness_LLM.prompt +0 -0
  164. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step11_sync_LLM.prompt +0 -0
  165. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step12_deps_LLM.prompt +0 -0
  166. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step13_fix_LLM.prompt +0 -0
  167. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step1_analyze_prd_LLM.prompt +0 -0
  168. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step1b_complexity_LLM.prompt +0 -0
  169. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step2_analyze_LLM.prompt +0 -0
  170. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step2b_codebase_scan_LLM.prompt +0 -0
  171. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step3_research_LLM.prompt +0 -0
  172. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step4_data_model_LLM.prompt +0 -0
  173. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step5_design_LLM.prompt +0 -0
  174. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step5b_completeness_gate_LLM.prompt +0 -0
  175. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step5b_fix_LLM.prompt +0 -0
  176. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step6_research_deps_LLM.prompt +0 -0
  177. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step7_generate_LLM.prompt +0 -0
  178. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step7b_review_LLM.prompt +0 -0
  179. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step8_5_context_docs_LLM.prompt +0 -0
  180. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step8_pddrc_LLM.prompt +0 -0
  181. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step9_prompts_LLM.prompt +0 -0
  182. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step9b_cross_audit_LLM.prompt +0 -0
  183. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_bug_step10_verify_LLM.prompt +0 -0
  184. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_bug_step11_e2e_test_LLM.prompt +0 -0
  185. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_bug_step12_pr_LLM.prompt +0 -0
  186. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_bug_step1_duplicate_LLM.prompt +0 -0
  187. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_bug_step2_docs_LLM.prompt +0 -0
  188. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_bug_step3_triage_LLM.prompt +0 -0
  189. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_bug_step4_api_research_LLM.prompt +0 -0
  190. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_bug_step5_reproduce_LLM.prompt +0 -0
  191. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_bug_step6_root_cause_LLM.prompt +0 -0
  192. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_bug_step7_prompt_classification_LLM.prompt +0 -0
  193. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_bug_step8_test_plan_LLM.prompt +0 -0
  194. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_bug_step9_generate_LLM.prompt +0 -0
  195. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_change_step10_architecture_update_LLM.prompt +0 -0
  196. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_change_step11_identify_issues_LLM.prompt +0 -0
  197. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_change_step12_fix_issues_LLM.prompt +0 -0
  198. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_change_step13_create_pr_LLM.prompt +0 -0
  199. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_change_step1_duplicate_LLM.prompt +0 -0
  200. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_change_step2_docs_LLM.prompt +0 -0
  201. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_change_step3_research_LLM.prompt +0 -0
  202. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_change_step4_clarify_LLM.prompt +0 -0
  203. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_change_step5_docs_change_LLM.prompt +0 -0
  204. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_change_step6_devunits_LLM.prompt +0 -0
  205. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_change_step7_architecture_LLM.prompt +0 -0
  206. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_change_step8_analyze_LLM.prompt +0 -0
  207. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_change_step9_implement_LLM.prompt +0 -0
  208. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_checkup_step1_discover_LLM.prompt +0 -0
  209. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_checkup_step2_deps_LLM.prompt +0 -0
  210. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_checkup_step3_build_LLM.prompt +0 -0
  211. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_checkup_step4_interfaces_LLM.prompt +0 -0
  212. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_checkup_step5_test_LLM.prompt +0 -0
  213. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_checkup_step6_1_fix_LLM.prompt +0 -0
  214. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_checkup_step6_2_regression_tests_LLM.prompt +0 -0
  215. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_checkup_step6_3_e2e_tests_LLM.prompt +0 -0
  216. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_checkup_step7_verify_LLM.prompt +0 -0
  217. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_checkup_step8_create_pr_LLM.prompt +0 -0
  218. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_crash_explore_LLM.prompt +0 -0
  219. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_e2e_fix_step10_ci_validation_LLM.prompt +0 -0
  220. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_e2e_fix_step11_code_cleanup_LLM.prompt +0 -0
  221. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_e2e_fix_step1_unit_tests_LLM.prompt +0 -0
  222. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_e2e_fix_step2_e2e_tests_LLM.prompt +0 -0
  223. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_e2e_fix_step3_root_cause_LLM.prompt +0 -0
  224. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_e2e_fix_step4_fix_e2e_tests_LLM.prompt +0 -0
  225. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_e2e_fix_step5_identify_devunits_LLM.prompt +0 -0
  226. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_e2e_fix_step6_create_unit_tests_LLM.prompt +0 -0
  227. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_e2e_fix_step7_verify_tests_LLM.prompt +0 -0
  228. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_e2e_fix_step8_run_pdd_fix_LLM.prompt +0 -0
  229. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_e2e_fix_step9_verify_all_LLM.prompt +0 -0
  230. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_fix_explore_LLM.prompt +0 -0
  231. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_fix_nonpython_LLM.prompt +0 -0
  232. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_fix_primary_LLM.prompt +0 -0
  233. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_split_step0_intent_LLM.prompt +0 -0
  234. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_split_step1_survey_LLM.prompt +0 -0
  235. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_split_step2_diagnose_LLM.prompt +0 -0
  236. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_split_step3_investigate_LLM.prompt +0 -0
  237. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_split_step4_propose_options_LLM.prompt +0 -0
  238. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_split_step6_extract_LLM.prompt +0 -0
  239. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_split_step6a_phase_extract_LLM.prompt +0 -0
  240. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_split_step7_assess_LLM.prompt +0 -0
  241. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_split_step8_repair_LLM.prompt +0 -0
  242. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_split_step9_refine_check_LLM.prompt +0 -0
  243. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_sync_fix_dry_run_LLM.prompt +0 -0
  244. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_sync_identify_modules_LLM.prompt +0 -0
  245. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_generate_LLM.prompt +0 -0
  246. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step10_validate_LLM.prompt +0 -0
  247. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step11_loop_LLM.prompt +0 -0
  248. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step15_plan_validation_LLM.prompt +0 -0
  249. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step16_run_tests_LLM.prompt +0 -0
  250. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step1_duplicate_LLM.prompt +0 -0
  251. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step2_docs_LLM.prompt +0 -0
  252. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step3_clarify_LLM.prompt +0 -0
  253. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step4_detect_frontend_LLM.prompt +0 -0
  254. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step5_test_plan_LLM.prompt +0 -0
  255. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step5b_enhance_plan_LLM.prompt +0 -0
  256. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step6_coverage_LLM.prompt +0 -0
  257. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step6_generate_tests_LLM.prompt +0 -0
  258. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step7_checklist_LLM.prompt +0 -0
  259. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step7_run_tests_LLM.prompt +0 -0
  260. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step8_fix_iterate_LLM.prompt +0 -0
  261. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step8_manual_test_LLM.prompt +0 -0
  262. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step9_regression_LLM.prompt +0 -0
  263. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step9_submit_pr_LLM.prompt +0 -0
  264. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_update_LLM.prompt +0 -0
  265. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/agentic_verify_explore_LLM.prompt +0 -0
  266. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/arrange_graph_layout_LLM.prompt +0 -0
  267. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/auto_include_LLM.prompt +0 -0
  268. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/bug_to_unit_test_LLM.prompt +0 -0
  269. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/change_LLM.prompt +0 -0
  270. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/code_patcher_LLM.prompt +0 -0
  271. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/conflict_LLM.prompt +0 -0
  272. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/continue_generation_LLM.prompt +0 -0
  273. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/core_dump_requirements_LLM.prompt +0 -0
  274. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/cross_issue_reconcile_LLM.prompt +0 -0
  275. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/detect_change_LLM.prompt +0 -0
  276. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/diff_analyzer_LLM.prompt +0 -0
  277. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/example_generator_LLM.prompt +0 -0
  278. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/extract_code_LLM.prompt +0 -0
  279. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/extract_conflict_LLM.prompt +0 -0
  280. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/extract_detect_change_LLM.prompt +0 -0
  281. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/extract_program_code_fix_LLM.prompt +0 -0
  282. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/extract_prompt_change_LLM.prompt +0 -0
  283. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/extract_prompt_split_LLM.prompt +0 -0
  284. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/extract_prompt_update_LLM.prompt +0 -0
  285. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/extract_promptline_LLM.prompt +0 -0
  286. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/extract_unit_code_fix_LLM.prompt +0 -0
  287. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/extract_xml_LLM.prompt +0 -0
  288. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/find_verification_errors_LLM.prompt +0 -0
  289. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/fix_code_module_errors_LLM.prompt +0 -0
  290. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/fix_errors_from_unit_tests_LLM.prompt +0 -0
  291. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/fix_verification_errors_LLM.prompt +0 -0
  292. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/generate_test_LLM.prompt +0 -0
  293. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/generate_test_from_example_LLM.prompt +0 -0
  294. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/include_query_extractor_LLM.prompt +0 -0
  295. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/increase_tests_LLM.prompt +0 -0
  296. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/incremental_prd_architecture_patch_LLM.prompt +0 -0
  297. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/insert_includes_LLM.prompt +0 -0
  298. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/one_session_agent_LLM.prompt +0 -0
  299. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/post_gen_verify_LLM.prompt +0 -0
  300. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/prompt_code_diff_LLM.prompt +0 -0
  301. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/prompt_diff_LLM.prompt +0 -0
  302. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/split_LLM.prompt +0 -0
  303. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/summarize_file_LLM.prompt +0 -0
  304. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/sync_analysis_LLM.prompt +0 -0
  305. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/trace_LLM.prompt +0 -0
  306. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/trim_results_LLM.prompt +0 -0
  307. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/trim_results_start_LLM.prompt +0 -0
  308. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/unfinished_prompt_LLM.prompt +0 -0
  309. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/update_prompt_LLM.prompt +0 -0
  310. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/prompts/xml_convertor_LLM.prompt +0 -0
  311. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/provider_manager.py +0 -0
  312. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/pytest_output.py +0 -0
  313. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/python_env_detector.py +0 -0
  314. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/reasoning.py +0 -0
  315. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/remote_session.py +0 -0
  316. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/render_mermaid.py +0 -0
  317. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/server/__init__.py +0 -0
  318. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/server/app.py +0 -0
  319. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/server/click_executor.py +0 -0
  320. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/server/executor.py +0 -0
  321. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/server/jobs.py +0 -0
  322. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/server/models.py +0 -0
  323. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/server/routes/__init__.py +0 -0
  324. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/server/routes/architecture.py +0 -0
  325. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/server/routes/auth.py +0 -0
  326. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/server/routes/commands.py +0 -0
  327. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/server/routes/config.py +0 -0
  328. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/server/routes/extracts.py +0 -0
  329. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/server/routes/files.py +0 -0
  330. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/server/routes/prompts.py +0 -0
  331. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/server/routes/websocket.py +0 -0
  332. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/server/security.py +0 -0
  333. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/server/terminal_spawner.py +0 -0
  334. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/server/token_counter.py +0 -0
  335. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/setup_tool.py +0 -0
  336. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/split.py +0 -0
  337. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/split_main.py +0 -0
  338. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/split_validation.py +0 -0
  339. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/summarize_directory.py +0 -0
  340. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/sync_animation.py +0 -0
  341. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/sync_graph_order_consistency.py +0 -0
  342. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/sync_main.py +0 -0
  343. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/sync_order.py +0 -0
  344. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/sync_tui.py +0 -0
  345. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/template_expander.py +0 -0
  346. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/template_registry.py +0 -0
  347. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/templates/architecture/architecture_json.prompt +0 -0
  348. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/templates/architecture/example_nextjs_task_notes.prompt +0 -0
  349. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/templates/architecture/example_python_backend.prompt +0 -0
  350. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/templates/architecture/pdd_path_construction_guide.prompt +0 -0
  351. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/templates/generic/generate_pddrc_YAML.prompt +0 -0
  352. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/templates/generic/generate_prompt.prompt +0 -0
  353. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/test_result.py +0 -0
  354. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/trace.py +0 -0
  355. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/trace_main.py +0 -0
  356. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/track_cost.py +0 -0
  357. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/unfinished_prompt.py +0 -0
  358. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/update_main.py +0 -0
  359. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/update_model_costs.py +0 -0
  360. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/update_prompt.py +0 -0
  361. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/user_story_tests.py +0 -0
  362. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/validate_prompt_includes.py +0 -0
  363. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd/xml_tagger.py +0 -0
  364. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd_cli.egg-info/dependency_links.txt +0 -0
  365. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd_cli.egg-info/entry_points.txt +0 -0
  366. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/pdd_cli.egg-info/top_level.txt +0 -0
  367. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/setup.cfg +0 -0
  368. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_739_complete.py +0 -0
  369. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_739_e2e_synthetic.py +0 -0
  370. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_739_fixtures.py +0 -0
  371. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_arch_complexity_prompt.py +0 -0
  372. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_architecture.py +0 -0
  373. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_architecture_orchestrator.py +0 -0
  374. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_bug.py +0 -0
  375. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_bug_orchestrator.py +0 -0
  376. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_bug_orchestrator_1.py +0 -0
  377. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_bug_orchestrator_step_comments.py +0 -0
  378. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_bug_step10_prompt.py +0 -0
  379. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_bug_step11_prompt.py +0 -0
  380. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_bug_step7_prompt.py +0 -0
  381. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_change.py +0 -0
  382. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_change_orchestrator.py +0 -0
  383. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_checkup.py +0 -0
  384. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_checkup_orchestrator.py +0 -0
  385. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_common.py +0 -0
  386. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_common_issue_813_anthropic_api_key_oauth_shadow.py +0 -0
  387. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_common_worktree.py +0 -0
  388. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_crash.py +0 -0
  389. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_e2e_fix.py +0 -0
  390. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_e2e_fix_step10_prompt.py +0 -0
  391. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_fix.py +0 -0
  392. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_langtest.py +0 -0
  393. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_split.py +0 -0
  394. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_split_orchestrator.py +0 -0
  395. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_split_real.py +0 -0
  396. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_split_v2.py +0 -0
  397. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_sync.py +0 -0
  398. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_sync_nearest_config.py +0 -0
  399. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_sync_runner.py +0 -0
  400. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_test.py +0 -0
  401. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_test_generate.py +0 -0
  402. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_test_orchestrator.py +0 -0
  403. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_update.py +0 -0
  404. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_agentic_verify.py +0 -0
  405. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_api_key_scanner.py +0 -0
  406. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_architecture_include_validation.py +0 -0
  407. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_architecture_registry.py +0 -0
  408. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_architecture_sync.py +0 -0
  409. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_auth_service.py +0 -0
  410. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_auto_deps_architecture.py +0 -0
  411. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_auto_deps_entry_wipe.py +0 -0
  412. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_auto_deps_lock.py +0 -0
  413. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_auto_heal_workflow.py +0 -0
  414. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_auto_include.py +0 -0
  415. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_auto_update.py +0 -0
  416. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_bug_main.py +0 -0
  417. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_bug_to_unit_test.py +0 -0
  418. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_change.py +0 -0
  419. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_change_call_site_and_retry.py +0 -0
  420. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_change_main.py +0 -0
  421. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_checkup_pr_mode.py +0 -0
  422. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_checkup_review_loop.py +0 -0
  423. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_ci_detect_changed_modules.py +0 -0
  424. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_ci_validation.py +0 -0
  425. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_circular_includes.py +0 -0
  426. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_cli.py +0 -0
  427. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_cli_binary_isolation.py +0 -0
  428. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_cli_detector.py +0 -0
  429. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_cloud_noninteractive_auth.py +0 -0
  430. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_cmd_test_main.py +0 -0
  431. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_code_generator.py +0 -0
  432. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_code_generator_main.py +0 -0
  433. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_code_patcher_prompt_json_example.py +0 -0
  434. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_commands_auth.py +0 -0
  435. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_commands_firecrawl.py +0 -0
  436. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_commands_fix.py +0 -0
  437. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_commands_generate.py +0 -0
  438. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_commands_maintenance.py +0 -0
  439. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_commands_modify.py +0 -0
  440. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_commands_templates.py +0 -0
  441. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_commands_utility.py +0 -0
  442. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_comment_line.py +0 -0
  443. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_conflicts_in_prompts.py +0 -0
  444. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_conflicts_main.py +0 -0
  445. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_construct_paths.py +0 -0
  446. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_content_selector.py +0 -0
  447. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_context_example_isolation.py +0 -0
  448. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_context_generator.py +0 -0
  449. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_context_generator_main.py +0 -0
  450. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_continue_generation.py +0 -0
  451. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_copy_package_data_to_public.py +0 -0
  452. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_core_dump.py +0 -0
  453. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_core_errors.py +0 -0
  454. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_core_utils.py +0 -0
  455. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_crash_main.py +0 -0
  456. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_cross_step_consistency_prompts.py +0 -0
  457. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_detect_change.py +0 -0
  458. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_detect_change_main.py +0 -0
  459. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_discover_associated_documents.py +0 -0
  460. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_duplicate_cli_guard.py +0 -0
  461. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_durable_sync_runner.py +0 -0
  462. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_auto_deps_pipeline.py +0 -0
  463. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_bug_step9_verification.py +0 -0
  464. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_219_duplicate_includes.py +0 -0
  465. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_295_openai_schema.py +0 -0
  466. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_296_custom_csv.py +0 -0
  467. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_305_false_success.py +0 -0
  468. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_309_oauth_rate_limit.py +0 -0
  469. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_319_json_braces.py +0 -0
  470. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_340_report_core_no_default.py +0 -0
  471. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_342_syspath_isolation.py +0 -0
  472. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_349_sys_modules_pollution.py +0 -0
  473. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_357_step9_keyerror.py +0 -0
  474. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_358_jwt_cache_null.py +0 -0
  475. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_364_cumulative_cost.py +0 -0
  476. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_373_step5_keyerror.py +0 -0
  477. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_375_malformed_json.py +0 -0
  478. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_379_auth_null_expires.py +0 -0
  479. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_383_commit_intermediate_files.py +0 -0
  480. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_399_ssh_url_message.py +0 -0
  481. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_419_cli_unpushed_commits.py +0 -0
  482. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_419_unpushed_commits.py +0 -0
  483. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_426_include_path_validation.py +0 -0
  484. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_429_prompt_files_in_pr.py +0 -0
  485. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_445_worktree_resume.py +0 -0
  486. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_448_change_orchestrator.py +0 -0
  487. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_448_step5_keyerror.py +0 -0
  488. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_449_auth_logout_message.py +0 -0
  489. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_467_false_cached_steps.py +0 -0
  490. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_468_not_a_bug_early_exit.py +0 -0
  491. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_469_cleanup_messages.py +0 -0
  492. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_469_duplicate_unresolved.py +0 -0
  493. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_470_sessions_cleanup_auth_message.py +0 -0
  494. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_481_pagination.py +0 -0
  495. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_485_warning_false_negative.py +0 -0
  496. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_493_update_output_subdir.py +0 -0
  497. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_508_budget_test_cost.py +0 -0
  498. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_508_sync_budget_tracking.py +0 -0
  499. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_509_retry_cost.py +0 -0
  500. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_521_circular_includes.py +0 -0
  501. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_522_include_fingerprint.py +0 -0
  502. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_545_no_changes_to_commit.py +0 -0
  503. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_549_format_double_escaping.py +0 -0
  504. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_549_other_orchestrators.py +0 -0
  505. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_553_circular_includes_non_recursive.py +0 -0
  506. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_557_codex_ndjson.py +0 -0
  507. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_566_code_fence_tags.py +0 -0
  508. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_579_bug_worktree_rerun.py +0 -0
  509. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_579_orchestrator_rerun.py +0 -0
  510. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_594_preamble_imports.py +0 -0
  511. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_604_handler_wiring.py +0 -0
  512. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_620_hallucinated_imports.py +0 -0
  513. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_626_nextjs_rendering_model.py +0 -0
  514. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_686_anthropic_cost_double_count.py +0 -0
  515. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_687_postprocess_model_name.py +0 -0
  516. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_737_step_completion_markers.py +0 -0
  517. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_745_initial_cost_tracking.py +0 -0
  518. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_773_hard_stop.py +0 -0
  519. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_791_e2e_timeout_retry.py +0 -0
  520. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_796_typescript_python_validation.py +0 -0
  521. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_797_typescript_verification.py +0 -0
  522. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_817_step5_degenerate_cli.py +0 -0
  523. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_824_artifact_filtering.py +0 -0
  524. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_825_param_drop.py +0 -0
  525. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_830_workflow_stall.py +0 -0
  526. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_894.py +0 -0
  527. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_902_provider_fallback.py +0 -0
  528. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_issue_903_convergence.py +0 -0
  529. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_openai_required_array.py +0 -0
  530. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_pattern_verification.py +0 -0
  531. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_selective_includes.py +0 -0
  532. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_selective_includes_integration.py +0 -0
  533. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_step11_cleanup_revert.py +0 -0
  534. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_subprocess_issue_399_ssh_url_message.py +0 -0
  535. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_subprocess_issue_541_quiet_flag.py +0 -0
  536. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_e2e_subprocess_issue_593_bug_exit_code.py +0 -0
  537. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_embed_retrieve.py +0 -0
  538. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_example_error_detection.py +0 -0
  539. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_explicit_output_paths.py +0 -0
  540. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_extracts_prune.py +0 -0
  541. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_failure_classification.py +0 -0
  542. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_find_prompt_file.py +0 -0
  543. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_find_section.py +0 -0
  544. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_firecrawl_cache.py +0 -0
  545. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_fix_code_loop.py +0 -0
  546. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_fix_code_module_errors.py +0 -0
  547. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_fix_error_loop.py +0 -0
  548. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_fix_error_loop_failure_aware.py +0 -0
  549. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_fix_errors_from_unit_tests.py +0 -0
  550. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_fix_main.py +0 -0
  551. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_fix_main_issue_232.py +0 -0
  552. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_fix_verification_errors.py +0 -0
  553. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_fix_verification_errors_loop.py +0 -0
  554. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_fix_verification_main.py +0 -0
  555. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_generate_model_catalog.py +0 -0
  556. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_generate_output_paths.py +0 -0
  557. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_generate_output_paths_regression.py +0 -0
  558. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_generate_test.py +0 -0
  559. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_generation_completion.py +0 -0
  560. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_get_comment.py +0 -0
  561. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_get_extension.py +0 -0
  562. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_get_jwt_token.py +0 -0
  563. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_get_language.py +0 -0
  564. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_get_lint_commands.py +0 -0
  565. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_get_run_command.py +0 -0
  566. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_get_test_command.py +0 -0
  567. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_git_update.py +0 -0
  568. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_include_query_extractor.py +0 -0
  569. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_increase_tests.py +0 -0
  570. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_incremental_code_generator.py +0 -0
  571. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_incremental_prd_architecture.py +0 -0
  572. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_incremental_prd_architecture_real.py +0 -0
  573. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_insert_includes.py +0 -0
  574. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_install_completion.py +0 -0
  575. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_issue_1021_reproduction.py +0 -0
  576. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_issue_1049_reproduction.py +0 -0
  577. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_issue_1240_generate_prompt_meta_framing.py +0 -0
  578. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_issue_1272_cloud_timeout.py +0 -0
  579. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_issue_225_paths_and_includes.py +0 -0
  580. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_issue_237.py +0 -0
  581. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_issue_467_all_orchestrators.py +0 -0
  582. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_issue_469_duplicate_unresolved.py +0 -0
  583. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_issue_592_failing_case.py +0 -0
  584. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_issue_600_agentic_weaknesses.py +0 -0
  585. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_issue_633_reproduction.py +0 -0
  586. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_issue_686_post_process_args_braces.py +0 -0
  587. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_issue_737_step_completion_markers.py +0 -0
  588. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_issue_791_reproduction.py +0 -0
  589. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_issue_794_anti_tdd_and_test_discovery.py +0 -0
  590. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_issue_794_repro.py +0 -0
  591. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_issue_830_remaining_fixes.py +0 -0
  592. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_issue_865_reproduction.py +0 -0
  593. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_issue_894_pytest_output_deadlock.py +0 -0
  594. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_issue_902.py +0 -0
  595. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_issue_902_prompt_sync.py +0 -0
  596. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_issue_926_preserve_comments_directive.py +0 -0
  597. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_issue_953_directory_scan_regression.py +0 -0
  598. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_jobs_sync_failure_detection.py +0 -0
  599. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_list_drift_detection.py +0 -0
  600. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_llm_invoke.py +0 -0
  601. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_llm_invoke_csv_model_registration.py +0 -0
  602. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_llm_invoke_integration.py +0 -0
  603. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_llm_invoke_nested_schema.py +0 -0
  604. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_llm_invoke_retry_cost.py +0 -0
  605. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_llm_invoke_vertex_retry.py +0 -0
  606. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_load_prompt_template.py +0 -0
  607. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_logo_animation.py +0 -0
  608. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_metadata_sync.py +0 -0
  609. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_mock_vs_production_fix.py +0 -0
  610. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_model_tester.py +0 -0
  611. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_nextjs_rendering_model.py +0 -0
  612. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_one_session_eval.py +0 -0
  613. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_one_session_sync.py +0 -0
  614. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_opencode_provider.py +0 -0
  615. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_operation_log.py +0 -0
  616. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_operation_logging_e2e.py +0 -0
  617. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_path_resolution.py +0 -0
  618. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_pattern_completeness_verification.py +0 -0
  619. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_pddrc_initializer.py +0 -0
  620. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_pddrc_true_e2e.py +0 -0
  621. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_pin_example_hack.py +0 -0
  622. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_postprocess.py +0 -0
  623. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_postprocess_0.py +0 -0
  624. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_preprocess.py +0 -0
  625. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_preprocess_main.py +0 -0
  626. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_preprocess_main_pdd_tags.py +0 -0
  627. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_process_csv_change.py +0 -0
  628. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_prompt_contract_validation.py +0 -0
  629. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_provider_env_isolation.py +0 -0
  630. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_provider_manager.py +0 -0
  631. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_pytest_output.py +0 -0
  632. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_quiet_flag.py +0 -0
  633. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_reasoning.py +0 -0
  634. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_remote_command_completion.py +0 -0
  635. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_remote_session.py +0 -0
  636. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_render_mermaid.py +0 -0
  637. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_report.py +0 -0
  638. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_research_prompt_web_tools.py +0 -0
  639. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_server_routes_prompts.py +0 -0
  640. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_server_spawn.py +0 -0
  641. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_setup_tool.py +0 -0
  642. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_split.py +0 -0
  643. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_split_main.py +0 -0
  644. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_split_seam_resolution.py +0 -0
  645. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_split_validation.py +0 -0
  646. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_step11_api_mocking_guidance.py +0 -0
  647. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_structural_test_guard.py +0 -0
  648. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_structural_test_guard_integration.py +0 -0
  649. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_summarize_directory.py +0 -0
  650. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_sync_animation.py +0 -0
  651. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_sync_animation_0.py +0 -0
  652. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_sync_backward_compat.py +0 -0
  653. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_sync_code_main.py +0 -0
  654. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_sync_contract_matrix.py +0 -0
  655. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_sync_graph_order_consistency.py +0 -0
  656. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_sync_main.py +0 -0
  657. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_sync_orchestration.py +0 -0
  658. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_sync_order.py +0 -0
  659. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_sync_target_coverage_infinite_loop.py +0 -0
  660. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_sync_template_prompt_discovery.py +0 -0
  661. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_sync_tui.py +0 -0
  662. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_template_expander.py +0 -0
  663. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_template_registry.py +0 -0
  664. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_thread_safe_redirector.py +0 -0
  665. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_time_reasoning_effort_env.py +0 -0
  666. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_trace.py +0 -0
  667. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_trace_main.py +0 -0
  668. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_track_cost.py +0 -0
  669. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_unfinished_prompt.py +0 -0
  670. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_update_command.py +0 -0
  671. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_update_main.py +0 -0
  672. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_update_model_costs.py +0 -0
  673. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_update_prompt.py +0 -0
  674. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_user_story_tests.py +0 -0
  675. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_version.py +0 -0
  676. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_which.py +0 -0
  677. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/tests/test_xml_tagger.py +0 -0
  678. {pdd_cli-0.0.239 → pdd_cli-0.0.241}/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.239
3
+ Version: 0.0.241
4
4
  Summary: PDD (Prompt-Driven Development) Command Line Interface
5
5
  Author: Greg Tanaka
6
6
  Author-email: glt@alumni.caltech.edu
@@ -52,6 +52,7 @@ Requires-Dist: uvicorn[standard]>=0.32.0
52
52
  Requires-Dist: websockets>=13.0
53
53
  Requires-Dist: watchdog>=4.0.0
54
54
  Requires-Dist: tiktoken>=0.7.0
55
+ Requires-Dist: filelock>=3.12
55
56
  Provides-Extra: dev
56
57
  Requires-Dist: commitizen; extra == "dev"
57
58
  Requires-Dist: pytest-cov; extra == "dev"
@@ -65,7 +66,7 @@ Requires-Dist: twine; extra == "dev"
65
66
  Requires-Dist: httpx==0.28.1; extra == "dev"
66
67
  Dynamic: license-file
67
68
 
68
- .. image:: https://img.shields.io/badge/pdd--cli-v0.0.239-blue
69
+ .. image:: https://img.shields.io/badge/pdd--cli-v0.0.241-blue
69
70
  :alt: PDD-CLI Version
70
71
 
71
72
  .. image:: https://img.shields.io/badge/Discord-join%20chat-7289DA.svg?logo=discord&logoColor=white&link=https://discord.gg/Yp4RTh8bG7
@@ -142,7 +143,7 @@ After installation, verify:
142
143
 
143
144
  pdd --version
144
145
 
145
- You'll see the current PDD version (e.g., 0.0.239).
146
+ You'll see the current PDD version (e.g., 0.0.241).
146
147
 
147
148
  Getting Started with Examples
148
149
  -----------------------------
@@ -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.239-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.241-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.239
365
+ Current version: 0.0.241
366
366
 
367
367
  To check your installed version, run:
368
368
  ```
@@ -2658,6 +2658,14 @@ The command uses a two-stage retrieval pipeline when candidates exceed 50:
2658
2658
 
2659
2659
  After inserting `<include>` directives, the command performs a **deduplication pass** that identifies and removes inline content in the prompt that semantically duplicates what the included documents already provide.
2660
2660
 
2661
+ **Metadata finalization (on success):** After a successful `auto-deps` run, the command writes/updates a fingerprint in `.pdd/meta/` for the file that was actually written (with `operation="auto-deps"` and the current include-dependency hashes) and clears any stale per-module `_run.json` report keyed by the same identity, so downstream commands see a consistent view. The fingerprint write and the include-dependency metadata update are committed together (atomic from the caller's perspective) and use hash-based, language-agnostic helpers from `pdd.operation_log`. Finalization errors are surfaced as warnings and do not mask a successful `auto-deps` result. Invalid `<include>` tags stripped by the prompt sanitizer and architecture-merge failures (e.g. `architecture.json` could not be patched in place) are also surfaced as yellow warnings before the success summary.
2662
+
2663
+ Identity is derived from the **output path**:
2664
+ - **In-place mode** (`--output <PROMPT_FILE>`, or `pdd sync`'s post-move flow): the output path is the canonical prompt, so the fingerprint lands at `.pdd/meta/<basename>_<language>.json`.
2665
+ - **Default mode** (output is the separate `<basename>_<language>_with_deps.prompt` derivative): the fingerprint lands at `.pdd/meta/<basename>_<language>_with_deps.json`. Canonical metadata is intentionally untouched in this case — the derivative fingerprint records that an `auto-deps` run produced that file without overwriting the canonical module's record.
2666
+
2667
+ **Note on `pdd sync`:** `pdd sync` invokes `auto-deps` with a `*_with_deps.prompt` temp output and then moves it onto the canonical prompt. To avoid leaving orphan `.pdd/meta/*_with_deps.json` files for the moved temp prompt (and to avoid clearing the wrong run report), sync passes the internal `_skip_finalization=True` flag to `auto_deps_main` and owns canonical metadata itself: sync writes the canonical fingerprint via its atomic state machinery (`_save_fingerprint_atomic`) and clears the canonical `_run.json` via `clear_run_report` immediately after the move.
2668
+
2661
2669
  The command maintains a CSV file with the following columns:
2662
2670
  - `full_path`: The full path to the dependency file
2663
2671
  - `file_summary`: A one-sentence summary of the file's content and purpose
@@ -262,6 +262,70 @@ def _resolve_step9_loop_token(step_output: str, console: Console) -> Optional[st
262
262
  return None
263
263
 
264
264
 
265
+ def _resolve_cached_step9_output(step_outputs: Dict[str, str]) -> str:
266
+ """Return the authoritative Step 9 output for resume token resolution.
267
+
268
+ Step 9 may run twice in one cycle: the initial pass, plus a retry when the
269
+ initial pass emits no recognizable loop-control token. The retry output is
270
+ stored under ``step_outputs["9_retry"]`` (see the retry persistence site
271
+ in the inner loop); the initial output is ``step_outputs["9"]``. The retry
272
+ output is the authoritative one when it ran — if the retry succeeded with
273
+ ``ALL_TESTS_PASS`` but the workflow was interrupted before the next pause,
274
+ reading only ``"9"`` (which can be tokenless) would let resume fall
275
+ through to ``CONTINUE_CYCLE`` and silently advance into a fresh cycle even
276
+ though Step 9 actually succeeded. Prefer the retry output when present
277
+ and non-empty (#1001).
278
+ """
279
+ retry_out = step_outputs.get("9_retry", "")
280
+ if retry_out:
281
+ return retry_out
282
+ return step_outputs.get("9", "")
283
+
284
+
285
+ def _post_step9_resume_action(
286
+ step9_output: str,
287
+ current_cycle: int,
288
+ max_cycles: int,
289
+ console: Console,
290
+ ) -> str:
291
+ """Decide what resume should do when last_completed_step >= 9 (Issue #1001).
292
+
293
+ The prior buggy code unconditionally advanced the cycle whenever
294
+ `last_completed_step >= 9` on resume, ignoring what Step 9 actually
295
+ emitted. This helper inspects the cached Step 9 output and branches:
296
+
297
+ - "SUCCESS_FALL_THROUGH" — Step 9 declared success (ALL_TESTS_PASS,
298
+ LOCAL_TESTS_PASS, or NOT_A_BUG). Caller must keep `current_cycle`,
299
+ `last_completed_step`, and `step_outputs` intact and fall through
300
+ to Step 11 cleanup + Step 10 CI validation.
301
+ - "ADVANCE_CYCLE" — Step 9 wants another cycle and budget remains.
302
+ - "MAX_CYCLES_REACHED" — Either Step 9 explicitly emitted
303
+ MAX_CYCLES_REACHED (resolved via the tier-1–3 classifier in
304
+ `_classify_step_output` or the tier-4 LLM fallback in
305
+ `_resolve_step9_loop_token`), or Step 9 wants another cycle but
306
+ the cycle budget is exhausted. In both cases the caller must
307
+ surface this as a non-success exit, reusing the same path Step 9
308
+ uses when emitting MAX_CYCLES_REACHED directly (see
309
+ `_apply_step9_resolved_token` MAX_CYCLES_REACHED handler).
310
+ """
311
+ # Defensive NOT_A_BUG check: Step 9 normally doesn't emit NOT_A_BUG
312
+ # (that's Step 3), but if the cached output surfaces it, treat as
313
+ # success — Step 3 would already have determined no bug exists.
314
+ if "NOT_A_BUG" in step9_output:
315
+ return "SUCCESS_FALL_THROUGH"
316
+ tok = _resolve_step9_loop_token(step9_output, console)
317
+ if tok in ("ALL_TESTS_PASS", "LOCAL_TESTS_PASS"):
318
+ return "SUCCESS_FALL_THROUGH"
319
+ # Explicit terminal token from Step 9 (tier-1–3 detect_control_token
320
+ # or tier-4 LLM classifier) must NOT be overridden by the budget
321
+ # check below — Step 9 already declared the loop terminal.
322
+ if tok == "MAX_CYCLES_REACHED":
323
+ return "MAX_CYCLES_REACHED"
324
+ if current_cycle < max_cycles:
325
+ return "ADVANCE_CYCLE"
326
+ return "MAX_CYCLES_REACHED"
327
+
328
+
265
329
  class _Step9TokenApplyResult(NamedTuple):
266
330
  """Outcome of applying a resolved Step 9 loop token (shared initial + retry paths)."""
267
331
 
@@ -477,6 +541,7 @@ def _is_intermediate_file(filepath: str) -> bool:
477
541
  - *.bak, *.backup, *.orig, *.tmp extensions
478
542
  - error_output*.txt (e.g., error_output.txt, error_output_models.txt)
479
543
  - .pdd/** (any file under .pdd/ directory — backups, core_dumps, etc.)
544
+ - .gh-wrapper/** (executor `gh` wrapper artifacts — Issue #1001)
480
545
  - *_errors.txt, *_fix_errors.txt (e.g., waitlist_fix_errors.txt)
481
546
  - step*_output.md (e.g., step9_output.md)
482
547
  - test_issue_*_reproduction.py (e.g., test_issue_824_reproduction.py)
@@ -491,6 +556,13 @@ def _is_intermediate_file(filepath: str) -> bool:
491
556
  stem = path.stem # filename without extension
492
557
  suffix = path.suffix # extension including dot
493
558
 
559
+ # Issue #1001: filter executor wrapper artifacts.
560
+ # Anchor on the directory boundary so legitimate paths like
561
+ # "gh-wrapper-docs.md" or "tools/gh_wrapper.py" are not over-filtered.
562
+ normalized_gh = str(filepath).replace("\\", "/")
563
+ if normalized_gh.startswith(".gh-wrapper/") or "/.gh-wrapper/" in normalized_gh:
564
+ return True
565
+
494
566
  # Check for backup extensions (e.g., foo.py.bak, foo.py.backup)
495
567
  if suffix in _BACKUP_EXTENSIONS:
496
568
  return True
@@ -1038,6 +1110,20 @@ def _has_unpushed_commits(cwd: Path) -> bool:
1038
1110
  return False
1039
1111
 
1040
1112
 
1113
+ def _push_unpushed_commits_or_report_noop(
1114
+ cwd: Path,
1115
+ repo_owner: str,
1116
+ repo_name: str,
1117
+ ) -> Tuple[bool, str]:
1118
+ """Push ahead commits if present; otherwise treat the commit step as a no-op."""
1119
+ if _has_unpushed_commits(cwd):
1120
+ push_ok, push_err = _push_with_retry(cwd, repo_owner, repo_name)
1121
+ if push_ok:
1122
+ return True, "Pushed existing commits"
1123
+ return False, f"Push failed: {push_err}"
1124
+ return True, "No changes to commit"
1125
+
1126
+
1041
1127
  def push_with_retry(
1042
1128
  cwd: Path,
1043
1129
  *,
@@ -1273,15 +1359,8 @@ def _commit_and_push(
1273
1359
  fallback_files = [f for f in fallback_files if not _is_intermediate_file(f)]
1274
1360
  if fallback_files:
1275
1361
  files_to_commit = list(fallback_files)
1276
- elif _has_unpushed_commits(cwd):
1277
- # Check if there are unpushed commits to push
1278
- push_ok, push_err = _push_with_retry(cwd, repo_owner, repo_name)
1279
- if push_ok:
1280
- return True, "Pushed existing commits"
1281
- else:
1282
- return False, f"Push failed: {push_err}"
1283
1362
  else:
1284
- return True, "No changes to commit"
1363
+ return _push_unpushed_commits_or_report_noop(cwd, repo_owner, repo_name)
1285
1364
 
1286
1365
  # Stage only workflow-changed files
1287
1366
  for filepath in files_to_commit:
@@ -1306,12 +1385,12 @@ def _commit_and_push(
1306
1385
  # Commit may fail with "nothing to commit" when fallback files were
1307
1386
  # already committed on the branch (merge-base diff includes them).
1308
1387
  # In that case, push any unpushed commits instead of failing.
1309
- if _has_unpushed_commits(cwd):
1310
- push_ok, push_err = _push_with_retry(cwd, repo_owner, repo_name)
1311
- if push_ok:
1312
- return True, "Pushed existing commits"
1313
- else:
1314
- return False, f"Push failed: {push_err}"
1388
+ commit_output = f"{commit_result.stdout}\n{commit_result.stderr}".lower()
1389
+ if (
1390
+ "nothing to commit" in commit_output
1391
+ or "no changes added to commit" in commit_output
1392
+ ):
1393
+ return _push_unpushed_commits_or_report_noop(cwd, repo_owner, repo_name)
1315
1394
  return False, f"Failed to commit: {commit_result.stderr}"
1316
1395
 
1317
1396
  # Push to remote with retry on auth failure
@@ -1539,6 +1618,9 @@ def run_agentic_e2e_fix_orchestrator(
1539
1618
  # against it (e.g. NOT_A_BUG direct-edit suppression) keep working.
1540
1619
  resumed_initial_file_hashes: Optional[Dict[str, Optional[str]]] = None
1541
1620
  resumed_initial_sha: Optional[str] = None
1621
+ # Issue #1001: deferred action computed during resume that must be applied
1622
+ # after `success`/`final_message` are initialized below. Default: no-op.
1623
+ _resume_deferred_action: Optional[str] = None
1542
1624
 
1543
1625
  # Resume Logic
1544
1626
  if resume:
@@ -1575,11 +1657,35 @@ def run_agentic_e2e_fix_orchestrator(
1575
1657
 
1576
1658
  _check_staleness(loaded_state, cwd)
1577
1659
 
1578
- # If we finished a cycle but didn't exit, prepare for next cycle
1660
+ # Issue #1001: If Step 9 was the last completed step, branch on its
1661
+ # cached output rather than unconditionally advancing the cycle.
1662
+ # Prefer the retry output (stored under "9_retry") when present —
1663
+ # otherwise a retry that emitted ALL_TESTS_PASS but was interrupted
1664
+ # before the post-Step-9 pause could be misread as a tokenless "9"
1665
+ # and silently advance into a fresh cycle.
1579
1666
  if last_completed_step >= 9:
1580
- current_cycle += 1
1581
- last_completed_step = 0
1582
- step_outputs = {} # Clear outputs for new cycle
1667
+ step9_cached = _resolve_cached_step9_output(step_outputs)
1668
+ resume_action = _post_step9_resume_action(
1669
+ step9_cached, current_cycle, max_cycles, console
1670
+ )
1671
+ if resume_action == "ADVANCE_CYCLE":
1672
+ current_cycle += 1
1673
+ last_completed_step = 0
1674
+ step_outputs = {} # Clear outputs for new cycle
1675
+ elif resume_action == "MAX_CYCLES_REACHED":
1676
+ # Defer surfacing the failure until after `success` and
1677
+ # `final_message` are initialized below — mirrors the
1678
+ # path used by _apply_step9_resolved_token's
1679
+ # MAX_CYCLES_REACHED handler (final_message set, outer
1680
+ # loop skipped, post-loop failure handler runs).
1681
+ _resume_deferred_action = "MAX_CYCLES_REACHED"
1682
+ elif resume_action == "SUCCESS_FALL_THROUGH":
1683
+ # Step 9 already declared success but workflow was
1684
+ # interrupted before commit/Step 11/Step 10. Defer
1685
+ # setting `success=True` until after its initialization
1686
+ # so we fall through to the success path (commit, code
1687
+ # cleanup, CI validation).
1688
+ _resume_deferred_action = "SUCCESS_FALL_THROUGH"
1583
1689
  else:
1584
1690
  # No state found, start fresh
1585
1691
  clear_workflow_state(cwd, issue_number, workflow_name, state_dir, repo_owner, repo_name, use_github_state)
@@ -1642,6 +1748,113 @@ def run_agentic_e2e_fix_orchestrator(
1642
1748
  import_error_retries = 0 # Global budget: max 1 retry across all cycles
1643
1749
  verification_failure_context = "" # Injected into Step 1 prompt on retry
1644
1750
 
1751
+ # Issue #1001 round 11: save-before-verify race.
1752
+ # The inner-loop state save at line ~2049 persists step_outputs["9"] with
1753
+ # the LLM's raw output BEFORE the independent verification at line ~2061 /
1754
+ # _apply_step9_resolved_token at line ~2154 runs. A process pause in that
1755
+ # window can leave disk state with ALL_TESTS_PASS even though verification
1756
+ # would have failed. Re-run _verify_tests_independently on resume to close
1757
+ # the race BEFORE treating the cycle as terminal. On failure, demote the
1758
+ # resume action to ADVANCE_CYCLE (or MAX_CYCLES_REACHED if budget
1759
+ # exhausted) and overwrite step_outputs["9"] with a
1760
+ # FAILED: VERIFICATION_FAILED_ON_RESUME: prefix so the cached state
1761
+ # reflects reality.
1762
+ if _resume_deferred_action == "SUCCESS_FALL_THROUGH":
1763
+ test_files = _extract_test_files(
1764
+ issue_content, changed_files, cwd, initial_file_hashes
1765
+ )
1766
+ if test_files:
1767
+ verified, verify_output = _verify_tests_independently(test_files, cwd)
1768
+ # Mirror the cap-downgrade in _apply_step9_resolved_token for
1769
+ # symmetry with the initial Step 9 verification path.
1770
+ if _fallback_scan_was_capped and verified:
1771
+ verified = False
1772
+ verify_output += (
1773
+ f"\nFALLBACK_CAPPED: Only {len(test_files)} of potentially "
1774
+ "hundreds of test files were verified; cannot confirm full "
1775
+ "suite pass."
1776
+ )
1777
+ if not verified:
1778
+ console.print(
1779
+ "[yellow]Resume re-verification: cached Step 9 success no "
1780
+ "longer verified by independent pytest run; advancing "
1781
+ "cycle.[/yellow]"
1782
+ )
1783
+ step_outputs["9"] = (
1784
+ f"FAILED: VERIFICATION_FAILED_ON_RESUME: {verify_output}"
1785
+ )
1786
+
1787
+ # Issue #1001 round 12 (LOW): persist the FAILED marker BEFORE
1788
+ # the ADVANCE_CYCLE branch clears step_outputs, otherwise the
1789
+ # diagnostic is dead code — the inner-loop's first state save
1790
+ # would only land after cycle advance with an empty step_outputs.
1791
+ # Assemble the full state dict here (state_data is not yet in
1792
+ # scope at this point in the function; it is first defined at
1793
+ # the inner-loop site). The shape mirrors that site exactly so
1794
+ # other fields (total_cost, dev_unit_states, initial_sha, etc.)
1795
+ # are not clobbered on disk.
1796
+ _state_data_resume = {
1797
+ "workflow": workflow_name,
1798
+ "issue_url": issue_url,
1799
+ "issue_number": issue_number,
1800
+ "current_cycle": current_cycle,
1801
+ "last_completed_step": last_completed_step,
1802
+ "step_outputs": step_outputs.copy(),
1803
+ "dev_unit_states": dev_unit_states.copy(),
1804
+ "total_cost": total_cost,
1805
+ "model_used": model_used,
1806
+ "changed_files": changed_files.copy(),
1807
+ "skipped_steps": {str(k): v for k, v in skipped_steps.items()},
1808
+ "last_saved_at": datetime.now().isoformat(),
1809
+ "github_comment_id": github_comment_id,
1810
+ "initial_file_hashes": dict(initial_file_hashes),
1811
+ "initial_sha": initial_sha,
1812
+ }
1813
+ try:
1814
+ new_gh_id = save_workflow_state(
1815
+ cwd,
1816
+ issue_number,
1817
+ workflow_name,
1818
+ _state_data_resume,
1819
+ state_dir,
1820
+ repo_owner,
1821
+ repo_name,
1822
+ use_github_state,
1823
+ github_comment_id,
1824
+ )
1825
+ if new_gh_id:
1826
+ github_comment_id = new_gh_id
1827
+ except Exception as _save_exc:
1828
+ # Best-effort: the FAILED marker is still observable in
1829
+ # the in-memory step_outputs if we later save again
1830
+ # within the same cycle; don't crash resume on a save
1831
+ # transient.
1832
+ logger.debug(
1833
+ "Best-effort resume-reverify state save failed: %s",
1834
+ _save_exc,
1835
+ exc_info=True,
1836
+ )
1837
+
1838
+ if current_cycle < max_cycles:
1839
+ current_cycle += 1
1840
+ last_completed_step = 0
1841
+ step_outputs = {} # ADVANCE_CYCLE: clear for new cycle
1842
+ _resume_deferred_action = None
1843
+ else:
1844
+ _resume_deferred_action = "MAX_CYCLES_REACHED"
1845
+ # else: no test files — match the initial-flow fallback (no
1846
+ # independent verification possible). Trust the cached token, fall
1847
+ # through to the existing SUCCESS_FALL_THROUGH handling below.
1848
+
1849
+ # Issue #1001: Apply deferred resume action now that `success` and
1850
+ # `final_message` exist. Mirrors how the in-cycle Step 9 handler
1851
+ # surfaces these tokens via _apply_step9_resolved_token.
1852
+ if _resume_deferred_action == "SUCCESS_FALL_THROUGH":
1853
+ success = True
1854
+ final_message = "All tests passed after fixes (resumed)."
1855
+ elif _resume_deferred_action == "MAX_CYCLES_REACHED":
1856
+ final_message = "Max cycles reached."
1857
+
1645
1858
  try:
1646
1859
  # Outer Loop
1647
1860
  if current_cycle == 0:
@@ -0,0 +1,267 @@
1
+ from __future__ import annotations
2
+
3
+ from pathlib import Path
4
+ from typing import Callable, Optional, Tuple
5
+
6
+ import click
7
+ import filelock
8
+ from rich.console import Console
9
+
10
+ from . import DEFAULT_STRENGTH, DEFAULT_TIME
11
+ from .construct_paths import construct_paths
12
+ from .insert_includes import insert_includes
13
+ from .validate_prompt_includes import sanitize_prompt_output
14
+ from .auto_deps_architecture import merge_auto_deps_includes_from_cwd
15
+ from .operation_log import (
16
+ infer_module_identity,
17
+ save_fingerprint,
18
+ clear_run_report,
19
+ get_run_report_path,
20
+ )
21
+
22
+
23
+ def auto_deps_main(
24
+ ctx: click.Context,
25
+ prompt_file: str,
26
+ directory_path: str,
27
+ auto_deps_csv_path: Optional[str],
28
+ output: Optional[str],
29
+ force_scan: Optional[bool] = False,
30
+ progress_callback: Optional[Callable[[int, int], None]] = None,
31
+ include_docs: bool = False,
32
+ no_dedup: bool = False,
33
+ concurrency: int = 1,
34
+ _skip_finalization: bool = False,
35
+ ) -> Tuple[str, float, str]:
36
+ """
37
+ CLI entry point for the `auto-deps` command.
38
+
39
+ Analyzes the given prompt file, discovers dependencies (and optionally docs)
40
+ in `directory_path`, inserts `<include>` directives, deduplicates redundant
41
+ inline content (unless disabled), writes the modified prompt + dependency
42
+ CSV, and finalizes per-module fingerprint metadata when overwriting the
43
+ canonical prompt in place.
44
+
45
+ Returns:
46
+ (cleaned_prompt, total_cost, model_name) on success.
47
+ ("", 0.0, f"Error: {exc}") on non-Abort failures so orchestrators can
48
+ continue gracefully.
49
+ """
50
+ console = Console()
51
+ quiet = ctx.obj.get("quiet", False) if ctx.obj else False
52
+
53
+ try:
54
+ # Build inputs for construct_paths
55
+ input_file_paths = {"prompt_file": prompt_file}
56
+ command_options = {"output": output, "csv": auto_deps_csv_path}
57
+
58
+ force = ctx.obj.get("force", False) if ctx.obj else False
59
+ context_override = ctx.obj.get("context") if ctx.obj else None
60
+ confirm_callback = ctx.obj.get("confirm_callback") if ctx.obj else None
61
+
62
+ resolved_config, input_strings, output_file_paths, _ = construct_paths(
63
+ input_file_paths=input_file_paths,
64
+ force=force,
65
+ quiet=quiet,
66
+ command="auto-deps",
67
+ command_options=command_options,
68
+ context_override=context_override,
69
+ confirm_callback=confirm_callback,
70
+ )
71
+
72
+ # Resolve CSV path with default fallback
73
+ csv_path = output_file_paths.get("csv", "project_dependencies.csv")
74
+
75
+ # Acquire exclusive lock for the entire operation
76
+ lock_path = Path(f"{csv_path}.lock")
77
+ lock_path.parent.mkdir(parents=True, exist_ok=True)
78
+ lock = filelock.FileLock(f"{csv_path}.lock")
79
+ with lock:
80
+ # Force-scan: delete existing CSV if requested
81
+ if force_scan and Path(csv_path).exists():
82
+ if not quiet:
83
+ console.print(
84
+ f"[yellow]Removing existing CSV file due to --force-scan option: {csv_path}[/yellow]"
85
+ )
86
+ try:
87
+ Path(csv_path).unlink()
88
+ except OSError as exc:
89
+ if not quiet:
90
+ console.print(
91
+ f"[yellow]Warning: Could not remove CSV file {csv_path}: {exc}[/yellow]"
92
+ )
93
+
94
+ # LLM parameters
95
+ strength = ctx.obj.get("strength", DEFAULT_STRENGTH) if ctx.obj else DEFAULT_STRENGTH
96
+ temperature = ctx.obj.get("temperature", 0) if ctx.obj else 0
97
+ time_budget = ctx.obj.get("time", DEFAULT_TIME) if ctx.obj else DEFAULT_TIME
98
+ verbose = not quiet
99
+
100
+ # Run insert_includes
101
+ modified_prompt, csv_output, total_cost, model_name = insert_includes(
102
+ input_prompt=input_strings["prompt_file"],
103
+ directory_path=directory_path,
104
+ csv_filename=csv_path,
105
+ prompt_filename=prompt_file,
106
+ strength=strength,
107
+ temperature=temperature,
108
+ time=time_budget,
109
+ verbose=verbose,
110
+ progress_callback=progress_callback,
111
+ include_docs=include_docs,
112
+ dedup=(not no_dedup),
113
+ max_workers=concurrency,
114
+ )
115
+
116
+ # Sanitize prompt output before persisting (removes invalid <include>
117
+ # selectors so a later `pdd sync` does not trip on them).
118
+ output_path = output_file_paths["output"]
119
+ cleaned_prompt, invalid_includes = sanitize_prompt_output(
120
+ modified_prompt, output_path
121
+ )
122
+ if invalid_includes and not quiet:
123
+ console.print(
124
+ f"[yellow]Warning: Cleaned {len(invalid_includes)} invalid "
125
+ f"<include> tag(s) before saving {output_path}: "
126
+ f"{invalid_includes}[/yellow]"
127
+ )
128
+
129
+ # Persist modified prompt
130
+ Path(output_path).parent.mkdir(parents=True, exist_ok=True)
131
+ with open(output_path, "w", encoding="utf-8") as fh:
132
+ fh.write(cleaned_prompt)
133
+
134
+ # Persist CSV if non-empty
135
+ if csv_output:
136
+ Path(csv_path).parent.mkdir(parents=True, exist_ok=True)
137
+ with open(csv_path, "w", encoding="utf-8") as fh:
138
+ fh.write(csv_output)
139
+
140
+ # Merge architecture.json dependencies (if architecture.json exists in project root)
141
+ try:
142
+ merge_result = merge_auto_deps_includes_from_cwd(
143
+ Path(output_path),
144
+ old_prompt_text=input_strings["prompt_file"],
145
+ new_prompt_text=cleaned_prompt,
146
+ )
147
+ except Exception as merge_exc:
148
+ if not quiet:
149
+ console.print(
150
+ f"[yellow]Warning: architecture.json merge failed: {merge_exc}[/yellow]"
151
+ )
152
+ else:
153
+ # Non-exception failures must still reach the user; otherwise the
154
+ # CLI prints success while architecture.json was silently left
155
+ # unchanged. ``updated=False`` is also returned for legitimate
156
+ # no-ops (auto_deps_architecture.py:326 — nothing needed adding),
157
+ # so gate the warning on ``added_dependencies`` being non-empty:
158
+ # that distinguishes "we wanted to write X but couldn't" from
159
+ # "nothing to write."
160
+ if (
161
+ isinstance(merge_result, dict)
162
+ and not merge_result.get("updated", True)
163
+ and merge_result.get("added_dependencies")
164
+ ):
165
+ if not quiet:
166
+ messages = merge_result.get("messages") or [
167
+ "merge_auto_deps_includes_from_cwd reported updated=False"
168
+ ]
169
+ for msg in messages:
170
+ console.print(
171
+ f"[yellow]Warning: architecture.json not updated: {msg}[/yellow]"
172
+ )
173
+
174
+ # Console reporting
175
+ if not quiet:
176
+ console.print(
177
+ "[bold green]Successfully analyzed and inserted dependencies![/bold green]"
178
+ )
179
+ console.print(f"[bold]Model used:[/bold] {model_name}")
180
+ console.print(f"[bold]Total cost:[/bold] ${total_cost:.6f}")
181
+ console.print(f"[bold]Modified prompt saved to:[/bold] {output_path}")
182
+ console.print(f"[bold]Dependency information saved to:[/bold] {csv_path}")
183
+
184
+ # Metadata finalization for every successful auto-deps mutation
185
+ # (issue #989). Identity comes from the file that was actually
186
+ # written (``output_path``); in in-place mode this resolves to the
187
+ # canonical ``<basename>_<language>`` module, in the default CLI
188
+ # flow it resolves to the ``<basename>_<language>_with_deps``
189
+ # derivative. Errors are surfaced as warnings and never mask a
190
+ # successful auto-deps result.
191
+ #
192
+ # ``_skip_finalization=True`` is set by ``pdd sync`` because it
193
+ # invokes auto-deps with a temp ``<basename>_<language>_with_deps``
194
+ # output that it then ``shutil.move``s onto the canonical prompt;
195
+ # writing a fingerprint for that temp identity here would leave
196
+ # ``.pdd/meta/*_with_deps.json`` orphaned after the move, and the
197
+ # derivative's identity is the wrong target for run-report clears
198
+ # (sync owns the canonical fingerprint write and the canonical
199
+ # run-report clear on its side).
200
+ if _skip_finalization:
201
+ return cleaned_prompt, total_cost, model_name
202
+ try:
203
+ basename, language = infer_module_identity(Path(output_path))
204
+ if basename is None or language is None:
205
+ if not quiet:
206
+ console.print(
207
+ f"[yellow]Warning: Could not infer module identity for "
208
+ f"{output_path}; skipping fingerprint finalization.[/yellow]"
209
+ )
210
+ else:
211
+ # Clear stale run report; do not let its failure block fingerprint save
212
+ try:
213
+ clear_run_report(basename, language)
214
+ except Exception as cr_exc:
215
+ if not quiet:
216
+ console.print(
217
+ f"[yellow]Warning: Failed to clear run report for "
218
+ f"{basename}_{language}: {cr_exc}[/yellow]"
219
+ )
220
+ # Defensive: clear_run_report() in pdd.operation_log silently swallows
221
+ # OSError on the actual unlink, so verify the report is really gone.
222
+ try:
223
+ _stale_report_path = get_run_report_path(basename, language)
224
+ if _stale_report_path.exists():
225
+ if not quiet:
226
+ console.print(
227
+ f"[yellow]Warning: clear_run_report did not remove "
228
+ f"{_stale_report_path}; downstream sync may still see "
229
+ f"stale results.[/yellow]"
230
+ )
231
+ except Exception as _vrf_exc:
232
+ if not quiet:
233
+ console.print(
234
+ f"[yellow]Warning: could not verify run-report removal: "
235
+ f"{_vrf_exc}[/yellow]"
236
+ )
237
+ try:
238
+ save_fingerprint(
239
+ basename=basename,
240
+ language=language,
241
+ operation="auto-deps",
242
+ paths={"prompt": Path(output_path)},
243
+ cost=total_cost,
244
+ model=model_name,
245
+ )
246
+ except Exception as fp_exc:
247
+ if not quiet:
248
+ console.print(
249
+ f"[yellow]Warning: Failed to save fingerprint for "
250
+ f"{basename}_{language}: {fp_exc}[/yellow]"
251
+ )
252
+ except Exception as meta_exc:
253
+ # Never mask a successful auto-deps result on metadata errors
254
+ if not quiet:
255
+ console.print(
256
+ f"[yellow]Warning: Metadata finalization encountered an error: {meta_exc}[/yellow]"
257
+ )
258
+
259
+ return cleaned_prompt, total_cost, model_name
260
+
261
+ except click.Abort:
262
+ # Re-raise to allow orchestrators (e.g. pdd sync) to stop the loop
263
+ raise
264
+ except Exception as exc:
265
+ if not quiet:
266
+ console.print(f"[red]Error in auto-deps: {exc}[/red]")
267
+ return "", 0.0, f"Error: {exc}"