pdd-cli 0.0.240__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.
- {pdd_cli-0.0.240/pdd_cli.egg-info → pdd_cli-0.0.241}/PKG-INFO +3 -3
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/README.md +2 -2
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/ci_drift_heal.py +75 -8
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/pdd_completion.sh +1 -1
- {pdd_cli-0.0.240 → pdd_cli-0.0.241/pdd_cli.egg-info}/PKG-INFO +3 -3
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pypi_description.rst +2 -2
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pyproject.toml +2 -2
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_ci_drift_heal.py +242 -8
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/LICENSE +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/__init__.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/__main__.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/_keyring_timeout.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/agentic_architecture.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/agentic_architecture_orchestrator.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/agentic_bug.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/agentic_bug_orchestrator.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/agentic_change.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/agentic_change_orchestrator.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/agentic_checkup.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/agentic_checkup_orchestrator.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/agentic_common.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/agentic_common_worktree.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/agentic_crash.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/agentic_e2e_fix.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/agentic_e2e_fix_orchestrator.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/agentic_fix.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/agentic_langtest.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/agentic_split.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/agentic_split_orchestrator.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/agentic_sync.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/agentic_sync_runner.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/agentic_test.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/agentic_test_generate.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/agentic_test_orchestrator.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/agentic_update.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/agentic_verify.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/api_key_scanner.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/architecture_include_validation.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/architecture_registry.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/architecture_sync.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/architecture_sync_helper.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/auth_service.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/auto_deps_architecture.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/auto_deps_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/auto_include.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/auto_update.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/bug_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/bug_to_unit_test.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/change.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/change_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/checkup_review_loop.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/ci_detect_changed_modules.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/ci_validation.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/cli.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/cli_detector.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/cmd_test_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/code_generator.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/code_generator_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/commands/__init__.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/commands/analysis.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/commands/auth.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/commands/checkup.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/commands/connect.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/commands/extracts.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/commands/firecrawl.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/commands/fix.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/commands/generate.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/commands/maintenance.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/commands/misc.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/commands/modify.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/commands/report.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/commands/sessions.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/commands/templates.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/commands/utility.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/commands/which.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/comment_line.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/config_resolution.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/conflicts_in_prompts.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/conflicts_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/construct_paths.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/content_selector.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/context_generator.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/context_generator_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/continue_generation.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/core/__init__.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/core/cli.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/core/cloud.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/core/dump.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/core/duplicate_cli_guard.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/core/errors.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/core/llm_trace.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/core/remote_session.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/core/utils.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/crash_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/data/arena_elo_manifest.json +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/data/language_format.csv +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/data/llm_model.csv +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/detect_change.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/detect_change_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/docs/prompting_guide.md +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/durable_sync_runner.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/edit_file.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/embed_retrieve.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/extracts_prune.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/failure_classification.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/find_section.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/firecrawl_cache.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/fix_code_loop.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/fix_code_module_errors.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/fix_error_loop.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/fix_errors_from_unit_tests.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/fix_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/fix_verification_errors.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/fix_verification_errors_loop.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/fix_verification_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/generate_model_catalog.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/generate_output_paths.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/generate_test.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/generation_completion.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/get_comment.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/get_extension.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/get_jwt_token.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/get_language.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/get_lint_commands.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/get_run_command.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/get_test_command.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/git_update.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/include_query_extractor.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/increase_tests.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/incremental_code_generator.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/incremental_prd_architecture.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/insert_includes.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/install_completion.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/json_atomic.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/list_drift_detection.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/llm_invoke.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/load_prompt_template.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/logo_animation.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/mcp_config.json +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/metadata_sync.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/model_tester.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/one_session_sync.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/operation_log.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/path_resolution.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/pdd_completion.fish +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/pdd_completion.zsh +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/pddrc_initializer.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/pin_example_hack.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/postprocess.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/postprocess_0.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/preprocess.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/preprocess_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/process_csv_change.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step10_completeness_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step11_sync_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step12_deps_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step13_fix_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step1_analyze_prd_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step1b_complexity_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step2_analyze_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step2b_codebase_scan_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step3_research_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step4_data_model_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step5_design_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step5b_completeness_gate_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step5b_fix_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step6_research_deps_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step7_generate_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step7b_review_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step8_5_context_docs_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step8_pddrc_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step9_prompts_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_arch_step9b_cross_audit_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_bug_step10_verify_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_bug_step11_e2e_test_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_bug_step12_pr_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_bug_step1_duplicate_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_bug_step2_docs_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_bug_step3_triage_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_bug_step4_api_research_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_bug_step5_reproduce_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_bug_step6_root_cause_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_bug_step7_prompt_classification_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_bug_step8_test_plan_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_bug_step9_generate_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_change_step10_architecture_update_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_change_step11_identify_issues_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_change_step12_fix_issues_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_change_step13_create_pr_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_change_step1_duplicate_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_change_step2_docs_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_change_step3_research_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_change_step4_clarify_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_change_step5_docs_change_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_change_step6_devunits_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_change_step7_architecture_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_change_step8_analyze_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_change_step9_implement_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_checkup_step1_discover_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_checkup_step2_deps_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_checkup_step3_build_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_checkup_step4_interfaces_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_checkup_step5_test_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_checkup_step6_1_fix_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_checkup_step6_2_regression_tests_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_checkup_step6_3_e2e_tests_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_checkup_step7_verify_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_checkup_step8_create_pr_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_crash_explore_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_e2e_fix_step10_ci_validation_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_e2e_fix_step11_code_cleanup_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_e2e_fix_step1_unit_tests_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_e2e_fix_step2_e2e_tests_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_e2e_fix_step3_root_cause_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_e2e_fix_step4_fix_e2e_tests_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_e2e_fix_step5_identify_devunits_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_e2e_fix_step6_create_unit_tests_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_e2e_fix_step7_verify_tests_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_e2e_fix_step8_run_pdd_fix_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_e2e_fix_step9_verify_all_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_fix_explore_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_fix_nonpython_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_fix_primary_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_split_step0_intent_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_split_step1_survey_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_split_step2_diagnose_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_split_step3_investigate_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_split_step4_propose_options_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_split_step6_extract_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_split_step6a_phase_extract_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_split_step7_assess_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_split_step8_repair_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_split_step9_refine_check_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_sync_fix_dry_run_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_sync_identify_modules_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_generate_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step10_validate_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step11_loop_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step15_plan_validation_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step16_run_tests_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step1_duplicate_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step2_docs_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step3_clarify_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step4_detect_frontend_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step5_test_plan_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step5b_enhance_plan_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step6_coverage_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step6_generate_tests_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step7_checklist_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step7_run_tests_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step8_fix_iterate_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step8_manual_test_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step9_regression_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_test_step9_submit_pr_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_update_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/agentic_verify_explore_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/arrange_graph_layout_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/auto_include_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/bug_to_unit_test_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/change_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/code_patcher_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/conflict_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/continue_generation_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/core_dump_requirements_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/cross_issue_reconcile_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/detect_change_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/diff_analyzer_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/example_generator_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/extract_code_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/extract_conflict_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/extract_detect_change_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/extract_program_code_fix_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/extract_prompt_change_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/extract_prompt_split_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/extract_prompt_update_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/extract_promptline_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/extract_unit_code_fix_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/extract_xml_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/find_verification_errors_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/fix_code_module_errors_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/fix_errors_from_unit_tests_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/fix_verification_errors_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/generate_test_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/generate_test_from_example_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/include_query_extractor_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/increase_tests_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/incremental_prd_architecture_patch_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/insert_includes_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/one_session_agent_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/post_gen_verify_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/prompt_code_diff_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/prompt_diff_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/split_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/summarize_file_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/sync_analysis_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/trace_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/trim_results_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/trim_results_start_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/unfinished_prompt_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/update_prompt_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/prompts/xml_convertor_LLM.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/provider_manager.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/pytest_output.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/python_env_detector.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/reasoning.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/remote_session.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/render_mermaid.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/server/__init__.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/server/app.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/server/click_executor.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/server/executor.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/server/jobs.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/server/models.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/server/routes/__init__.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/server/routes/architecture.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/server/routes/auth.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/server/routes/commands.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/server/routes/config.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/server/routes/extracts.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/server/routes/files.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/server/routes/prompts.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/server/routes/websocket.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/server/security.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/server/terminal_spawner.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/server/token_counter.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/setup_tool.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/split.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/split_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/split_validation.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/summarize_directory.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/sync_animation.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/sync_determine_operation.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/sync_graph_order_consistency.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/sync_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/sync_orchestration.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/sync_order.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/sync_tui.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/template_expander.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/template_registry.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/templates/architecture/architecture_json.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/templates/architecture/example_nextjs_task_notes.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/templates/architecture/example_python_backend.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/templates/architecture/pdd_path_construction_guide.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/templates/generic/generate_pddrc_YAML.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/templates/generic/generate_prompt.prompt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/test_result.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/trace.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/trace_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/track_cost.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/unfinished_prompt.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/update_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/update_model_costs.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/update_prompt.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/user_story_tests.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/validate_prompt_includes.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd/xml_tagger.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd_cli.egg-info/SOURCES.txt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd_cli.egg-info/dependency_links.txt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd_cli.egg-info/entry_points.txt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd_cli.egg-info/requires.txt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/pdd_cli.egg-info/top_level.txt +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/setup.cfg +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_739_complete.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_739_e2e_synthetic.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_739_fixtures.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_arch_complexity_prompt.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_architecture.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_architecture_orchestrator.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_bug.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_bug_orchestrator.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_bug_orchestrator_1.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_bug_orchestrator_step_comments.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_bug_step10_prompt.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_bug_step11_prompt.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_bug_step7_prompt.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_change.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_change_orchestrator.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_checkup.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_checkup_orchestrator.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_common.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_common_issue_813_anthropic_api_key_oauth_shadow.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_common_worktree.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_crash.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_e2e_fix.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_e2e_fix_orchestrator.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_e2e_fix_orchestrator_resume_prompt.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_e2e_fix_step10_prompt.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_fix.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_langtest.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_split.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_split_orchestrator.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_split_real.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_split_v2.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_sync.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_sync_nearest_config.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_sync_runner.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_test.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_test_generate.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_test_orchestrator.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_update.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_agentic_verify.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_api_key_scanner.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_architecture_include_validation.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_architecture_registry.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_architecture_sync.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_auth_service.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_auto_deps_architecture.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_auto_deps_entry_wipe.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_auto_deps_lock.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_auto_deps_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_auto_heal_workflow.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_auto_include.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_auto_update.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_bug_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_bug_to_unit_test.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_change.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_change_call_site_and_retry.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_change_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_checkup_pr_mode.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_checkup_review_loop.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_ci_detect_changed_modules.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_ci_validation.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_circular_includes.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_cli.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_cli_binary_isolation.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_cli_detector.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_cloud_noninteractive_auth.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_cmd_test_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_code_generator.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_code_generator_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_code_patcher_prompt_json_example.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_commands_auth.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_commands_firecrawl.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_commands_fix.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_commands_generate.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_commands_maintenance.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_commands_modify.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_commands_templates.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_commands_utility.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_comment_line.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_conflicts_in_prompts.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_conflicts_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_construct_paths.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_content_selector.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_context_example_isolation.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_context_generator.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_context_generator_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_continue_generation.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_copy_package_data_to_public.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_core_dump.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_core_errors.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_core_utils.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_crash_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_cross_step_consistency_prompts.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_detect_change.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_detect_change_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_discover_associated_documents.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_duplicate_cli_guard.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_durable_sync_runner.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_auto_deps_pipeline.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_bug_step9_verification.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_219_duplicate_includes.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_295_openai_schema.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_296_custom_csv.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_305_false_success.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_309_oauth_rate_limit.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_319_json_braces.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_340_report_core_no_default.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_342_syspath_isolation.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_349_sys_modules_pollution.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_357_step9_keyerror.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_358_jwt_cache_null.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_364_cumulative_cost.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_373_step5_keyerror.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_375_malformed_json.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_379_auth_null_expires.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_383_commit_intermediate_files.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_399_ssh_url_message.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_419_cli_unpushed_commits.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_419_unpushed_commits.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_426_include_path_validation.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_429_prompt_files_in_pr.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_445_worktree_resume.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_448_change_orchestrator.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_448_step5_keyerror.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_449_auth_logout_message.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_467_false_cached_steps.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_468_not_a_bug_early_exit.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_469_cleanup_messages.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_469_duplicate_unresolved.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_470_sessions_cleanup_auth_message.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_481_pagination.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_485_warning_false_negative.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_493_update_output_subdir.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_508_budget_test_cost.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_508_sync_budget_tracking.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_509_retry_cost.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_521_circular_includes.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_522_include_fingerprint.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_545_no_changes_to_commit.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_549_format_double_escaping.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_549_other_orchestrators.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_553_circular_includes_non_recursive.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_557_codex_ndjson.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_566_code_fence_tags.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_579_bug_worktree_rerun.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_579_orchestrator_rerun.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_594_preamble_imports.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_604_handler_wiring.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_620_hallucinated_imports.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_626_nextjs_rendering_model.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_686_anthropic_cost_double_count.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_687_postprocess_model_name.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_737_step_completion_markers.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_745_initial_cost_tracking.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_773_hard_stop.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_791_e2e_timeout_retry.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_796_typescript_python_validation.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_797_typescript_verification.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_817_step5_degenerate_cli.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_824_artifact_filtering.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_825_param_drop.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_830_workflow_stall.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_894.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_902_provider_fallback.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_issue_903_convergence.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_openai_required_array.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_pattern_verification.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_selective_includes.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_selective_includes_integration.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_step11_cleanup_revert.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_subprocess_issue_399_ssh_url_message.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_subprocess_issue_541_quiet_flag.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_e2e_subprocess_issue_593_bug_exit_code.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_embed_retrieve.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_example_error_detection.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_explicit_output_paths.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_extracts_prune.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_failure_classification.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_find_prompt_file.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_find_section.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_firecrawl_cache.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_fix_code_loop.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_fix_code_module_errors.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_fix_error_loop.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_fix_error_loop_failure_aware.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_fix_errors_from_unit_tests.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_fix_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_fix_main_issue_232.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_fix_verification_errors.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_fix_verification_errors_loop.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_fix_verification_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_generate_model_catalog.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_generate_output_paths.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_generate_output_paths_regression.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_generate_test.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_generation_completion.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_get_comment.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_get_extension.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_get_jwt_token.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_get_language.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_get_lint_commands.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_get_run_command.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_get_test_command.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_git_update.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_include_query_extractor.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_increase_tests.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_incremental_code_generator.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_incremental_prd_architecture.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_incremental_prd_architecture_real.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_insert_includes.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_install_completion.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_issue_1021_reproduction.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_issue_1049_reproduction.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_issue_1240_generate_prompt_meta_framing.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_issue_1272_cloud_timeout.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_issue_225_paths_and_includes.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_issue_237.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_issue_467_all_orchestrators.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_issue_469_duplicate_unresolved.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_issue_592_failing_case.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_issue_600_agentic_weaknesses.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_issue_633_reproduction.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_issue_686_post_process_args_braces.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_issue_737_step_completion_markers.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_issue_791_reproduction.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_issue_794_anti_tdd_and_test_discovery.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_issue_794_repro.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_issue_830_remaining_fixes.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_issue_865_reproduction.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_issue_894_pytest_output_deadlock.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_issue_902.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_issue_902_prompt_sync.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_issue_926_preserve_comments_directive.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_issue_953_directory_scan_regression.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_jobs_sync_failure_detection.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_list_drift_detection.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_llm_invoke.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_llm_invoke_csv_model_registration.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_llm_invoke_integration.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_llm_invoke_nested_schema.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_llm_invoke_retry_cost.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_llm_invoke_vertex_retry.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_load_prompt_template.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_logo_animation.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_metadata_sync.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_mock_vs_production_fix.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_model_tester.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_nextjs_rendering_model.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_one_session_eval.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_one_session_sync.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_opencode_provider.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_operation_log.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_operation_logging_e2e.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_path_resolution.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_pattern_completeness_verification.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_pddrc_initializer.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_pddrc_true_e2e.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_pin_example_hack.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_postprocess.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_postprocess_0.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_preprocess.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_preprocess_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_preprocess_main_pdd_tags.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_process_csv_change.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_prompt_contract_validation.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_provider_env_isolation.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_provider_manager.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_pytest_output.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_quiet_flag.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_reasoning.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_remote_command_completion.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_remote_session.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_render_mermaid.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_report.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_research_prompt_web_tools.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_server_routes_prompts.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_server_spawn.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_setup_tool.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_split.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_split_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_split_seam_resolution.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_split_validation.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_step11_api_mocking_guidance.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_structural_test_guard.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_structural_test_guard_integration.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_summarize_directory.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_sync_animation.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_sync_animation_0.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_sync_backward_compat.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_sync_code_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_sync_contract_matrix.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_sync_determine_operation.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_sync_graph_order_consistency.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_sync_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_sync_orchestration.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_sync_order.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_sync_target_coverage_infinite_loop.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_sync_template_prompt_discovery.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_sync_tui.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_template_expander.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_template_registry.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_thread_safe_redirector.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_time_reasoning_effort_env.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_trace.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_trace_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_track_cost.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_unfinished_prompt.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_update_command.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_update_main.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_update_model_costs.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_update_prompt.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_user_story_tests.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_version.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_which.py +0 -0
- {pdd_cli-0.0.240 → pdd_cli-0.0.241}/tests/test_xml_tagger.py +0 -0
- {pdd_cli-0.0.240 → 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.
|
|
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
|
|
@@ -66,7 +66,7 @@ Requires-Dist: twine; extra == "dev"
|
|
|
66
66
|
Requires-Dist: httpx==0.28.1; extra == "dev"
|
|
67
67
|
Dynamic: license-file
|
|
68
68
|
|
|
69
|
-
.. image:: https://img.shields.io/badge/pdd--cli-v0.0.
|
|
69
|
+
.. image:: https://img.shields.io/badge/pdd--cli-v0.0.241-blue
|
|
70
70
|
:alt: PDD-CLI Version
|
|
71
71
|
|
|
72
72
|
.. image:: https://img.shields.io/badge/Discord-join%20chat-7289DA.svg?logo=discord&logoColor=white&link=https://discord.gg/Yp4RTh8bG7
|
|
@@ -143,7 +143,7 @@ After installation, verify:
|
|
|
143
143
|
|
|
144
144
|
pdd --version
|
|
145
145
|
|
|
146
|
-
You'll see the current PDD version (e.g., 0.0.
|
|
146
|
+
You'll see the current PDD version (e.g., 0.0.241).
|
|
147
147
|
|
|
148
148
|
Getting Started with Examples
|
|
149
149
|
-----------------------------
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# PDD (Prompt-Driven Development) Command Line Interface
|
|
2
2
|
|
|
3
|
-
 [](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.
|
|
365
|
+
Current version: 0.0.241
|
|
366
366
|
|
|
367
367
|
To check your installed version, run:
|
|
368
368
|
```
|
|
@@ -18,7 +18,7 @@ import subprocess
|
|
|
18
18
|
import sys
|
|
19
19
|
import tempfile
|
|
20
20
|
from dataclasses import dataclass
|
|
21
|
-
from pathlib import Path
|
|
21
|
+
from pathlib import Path, PurePosixPath
|
|
22
22
|
from typing import Any, Dict, List, Optional, Sequence, Set, Tuple
|
|
23
23
|
|
|
24
24
|
from rich.console import Console
|
|
@@ -918,23 +918,90 @@ def _healed_module_file_relpaths(module: Any, repo_root: Path) -> List[str]:
|
|
|
918
918
|
return relpaths
|
|
919
919
|
|
|
920
920
|
|
|
921
|
+
def _has_symlinked_ancestor(rel: str, repo_root: Path) -> bool:
|
|
922
|
+
"""Return True if any directory ancestor of ``rel`` under ``repo_root`` is a symlink.
|
|
923
|
+
|
|
924
|
+
``git add`` refuses pathspecs whose ancestor directory is a symlink ("pathspec
|
|
925
|
+
'X' is beyond a symbolic link"). When ``_git_relative_path_candidates`` returns
|
|
926
|
+
both the symlinked form (e.g. ``prompts/foo.prompt`` via ``prompts -> pdd/prompts``)
|
|
927
|
+
and the canonical form (``pdd/prompts/foo.prompt``) for the same source path,
|
|
928
|
+
the symlinked form will fail staging. Dropping it lets the canonical form get
|
|
929
|
+
staged instead.
|
|
930
|
+
"""
|
|
931
|
+
parts = PurePosixPath(rel).parts
|
|
932
|
+
if len(parts) <= 1:
|
|
933
|
+
return False
|
|
934
|
+
cur = repo_root
|
|
935
|
+
for part in parts[:-1]:
|
|
936
|
+
cur = cur / part
|
|
937
|
+
try:
|
|
938
|
+
if cur.is_symlink():
|
|
939
|
+
return True
|
|
940
|
+
except OSError:
|
|
941
|
+
return False
|
|
942
|
+
return False
|
|
943
|
+
|
|
944
|
+
|
|
921
945
|
def _git_add_pathspecs(pathspecs: Sequence[str], cwd: Optional[Path] = None) -> bool:
|
|
922
946
|
"""Stage existing pathspecs with an explicit git-add call.
|
|
923
947
|
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
948
|
+
Two filters run **before** ``git add`` and **before** ``git check-ignore``:
|
|
949
|
+
|
|
950
|
+
1. **Symlink-traversal filter.** Drops pathspecs whose ancestor directory is
|
|
951
|
+
a symlink (e.g. the repo-root ``prompts -> pdd/prompts`` shim). Recent
|
|
952
|
+
Git fatals on such paths with "pathspec 'X' is beyond a symbolic link" —
|
|
953
|
+
and that fatal hits ``git check-ignore`` first, not just ``git add``, so
|
|
954
|
+
the symlink filter MUST run before any git invocation. The canonical
|
|
955
|
+
form is normally also present in the list because
|
|
956
|
+
``_git_relative_path_candidates`` returns both shapes.
|
|
957
|
+
|
|
958
|
+
2. **Gitignore filter.** Run ``git check-ignore`` on the symlink-free
|
|
959
|
+
survivors so we know which paths to skip — otherwise ``git add`` refuses
|
|
960
|
+
the whole batch with "paths are ignored" (e.g. per-run reports under
|
|
961
|
+
``.pdd/meta/*_run.json``), aborting an otherwise-successful heal commit.
|
|
962
|
+
|
|
963
|
+
Returns True on success or on a "nothing to stage" no-op. Returns False
|
|
964
|
+
only if ``git add`` itself fails after filters have been applied. Emits a
|
|
965
|
+
warning (not a hard failure) if all input paths get filtered out, since
|
|
966
|
+
silent drops are observable here but would be invisible at the caller.
|
|
929
967
|
"""
|
|
968
|
+
repo_root = (cwd or Path.cwd()).resolve()
|
|
930
969
|
existing = [rel for rel in pathspecs if (cwd or Path.cwd()).joinpath(rel).exists()]
|
|
931
970
|
if not existing:
|
|
932
971
|
return True
|
|
933
972
|
|
|
973
|
+
# Filter 1: symlink-traversal. Must come BEFORE check-ignore — git's
|
|
974
|
+
# "beyond a symbolic link" fatal applies to check-ignore too, not just to
|
|
975
|
+
# `git add`. If the symlink filter ran after check-ignore, a mixed batch
|
|
976
|
+
# would lose its ignore information when check-ignore fatals on the
|
|
977
|
+
# symlinked entry, and ignored paths would then leak through to `git add`
|
|
978
|
+
# (which would refuse the whole batch). Invariant:
|
|
979
|
+
# `_git_relative_path_candidates` emits both the symlinked and the
|
|
980
|
+
# canonical form for any source that traverses a symlinked ancestor, so
|
|
981
|
+
# dropping the symlinked form here loses nothing.
|
|
982
|
+
symlinked = {rel for rel in existing if _has_symlinked_ancestor(rel, repo_root)}
|
|
983
|
+
if symlinked:
|
|
984
|
+
console.print(
|
|
985
|
+
f"[dim]ci-heal: skipping symlink-traversal paths during stage: "
|
|
986
|
+
f"{sorted(symlinked)}[/dim]"
|
|
987
|
+
)
|
|
988
|
+
survivors = [rel for rel in existing if rel not in symlinked]
|
|
989
|
+
if not survivors:
|
|
990
|
+
# Every input went through a symlinked ancestor and was dropped.
|
|
991
|
+
# That's almost certainly a caller bug (the canonical form was not
|
|
992
|
+
# supplied alongside), so make it observable.
|
|
993
|
+
console.print(
|
|
994
|
+
f"[yellow]ci-heal: every input pathspec was dropped as symlink-traversal "
|
|
995
|
+
f"({sorted(symlinked)}); nothing staged. Caller should also pass the "
|
|
996
|
+
f"canonical (resolved) form for these paths.[/yellow]"
|
|
997
|
+
)
|
|
998
|
+
return True
|
|
999
|
+
|
|
1000
|
+
# Filter 2: gitignore.
|
|
934
1001
|
ignored: Set[str] = set()
|
|
935
1002
|
try:
|
|
936
1003
|
rc_check = subprocess.run(
|
|
937
|
-
["git", "check-ignore", "--", *
|
|
1004
|
+
["git", "check-ignore", "--", *survivors],
|
|
938
1005
|
cwd=cwd,
|
|
939
1006
|
capture_output=True,
|
|
940
1007
|
text=True,
|
|
@@ -959,7 +1026,7 @@ def _git_add_pathspecs(pathspecs: Sequence[str], cwd: Optional[Path] = None) ->
|
|
|
959
1026
|
f"{sorted(ignored)}[/dim]"
|
|
960
1027
|
)
|
|
961
1028
|
|
|
962
|
-
stageable = [rel for rel in
|
|
1029
|
+
stageable = [rel for rel in survivors if rel not in ignored]
|
|
963
1030
|
if not stageable:
|
|
964
1031
|
return True
|
|
965
1032
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pdd-cli
|
|
3
|
-
Version: 0.0.
|
|
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
|
|
@@ -66,7 +66,7 @@ Requires-Dist: twine; extra == "dev"
|
|
|
66
66
|
Requires-Dist: httpx==0.28.1; extra == "dev"
|
|
67
67
|
Dynamic: license-file
|
|
68
68
|
|
|
69
|
-
.. image:: https://img.shields.io/badge/pdd--cli-v0.0.
|
|
69
|
+
.. image:: https://img.shields.io/badge/pdd--cli-v0.0.241-blue
|
|
70
70
|
:alt: PDD-CLI Version
|
|
71
71
|
|
|
72
72
|
.. image:: https://img.shields.io/badge/Discord-join%20chat-7289DA.svg?logo=discord&logoColor=white&link=https://discord.gg/Yp4RTh8bG7
|
|
@@ -143,7 +143,7 @@ After installation, verify:
|
|
|
143
143
|
|
|
144
144
|
pdd --version
|
|
145
145
|
|
|
146
|
-
You'll see the current PDD version (e.g., 0.0.
|
|
146
|
+
You'll see the current PDD version (e.g., 0.0.241).
|
|
147
147
|
|
|
148
148
|
Getting Started with Examples
|
|
149
149
|
-----------------------------
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.. image:: https://img.shields.io/badge/pdd--cli-v0.0.
|
|
1
|
+
.. image:: https://img.shields.io/badge/pdd--cli-v0.0.241-blue
|
|
2
2
|
:alt: PDD-CLI Version
|
|
3
3
|
|
|
4
4
|
.. image:: https://img.shields.io/badge/Discord-join%20chat-7289DA.svg?logo=discord&logoColor=white&link=https://discord.gg/Yp4RTh8bG7
|
|
@@ -75,7 +75,7 @@ After installation, verify:
|
|
|
75
75
|
|
|
76
76
|
pdd --version
|
|
77
77
|
|
|
78
|
-
You'll see the current PDD version (e.g., 0.0.
|
|
78
|
+
You'll see the current PDD version (e.g., 0.0.241).
|
|
79
79
|
|
|
80
80
|
Getting Started with Examples
|
|
81
81
|
-----------------------------
|
|
@@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta"
|
|
|
7
7
|
|
|
8
8
|
[project]
|
|
9
9
|
name = "pdd-cli"
|
|
10
|
-
version = "0.0.
|
|
10
|
+
version = "0.0.241"
|
|
11
11
|
description = "PDD (Prompt-Driven Development) Command Line Interface"
|
|
12
12
|
readme = {file = "pypi_description.rst", content-type = "text/x-rst"}
|
|
13
13
|
authors = [
|
|
@@ -132,7 +132,7 @@ filterwarnings = [
|
|
|
132
132
|
|
|
133
133
|
[tool.commitizen]
|
|
134
134
|
name = "cz_conventional_commits"
|
|
135
|
-
version = "0.0.
|
|
135
|
+
version = "0.0.241"
|
|
136
136
|
tag_format = "v$version"
|
|
137
137
|
version_files = [
|
|
138
138
|
"pyproject.toml:version",
|
|
@@ -14,7 +14,9 @@ from pdd.ci_drift_heal import (
|
|
|
14
14
|
PromptRevertError,
|
|
15
15
|
_AUTO_HEAL_SUCCESS_TRAILER,
|
|
16
16
|
_capture_rollback_state,
|
|
17
|
+
_git_add_pathspecs,
|
|
17
18
|
_git_relative_path_candidates,
|
|
19
|
+
_has_symlinked_ancestor,
|
|
18
20
|
_run_pdd_command,
|
|
19
21
|
_get_git_changed_files,
|
|
20
22
|
detect_drift,
|
|
@@ -163,14 +165,39 @@ class TestDetectDrift:
|
|
|
163
165
|
assert len(example_drifts) == 0
|
|
164
166
|
|
|
165
167
|
def test_pr_touched_metadata_modules_are_not_left_in_drift(self):
|
|
166
|
-
"""Regression guard for PR metadata churn on long-running modules.
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
168
|
+
"""Regression guard for PR metadata churn on long-running modules.
|
|
169
|
+
|
|
170
|
+
Isolates from the developer's working-tree state. Without isolation
|
|
171
|
+
this test breaks any time someone has an in-flight edit to one of
|
|
172
|
+
the listed modules (operation: 'verify' fires from
|
|
173
|
+
sync_determine_operation, lands in example_drifts, assert fails).
|
|
174
|
+
That breakage is the kind of false positive the auto-heal CI cycle
|
|
175
|
+
is supposed to catch and resolve, not a unit test.
|
|
176
|
+
"""
|
|
177
|
+
modules = [
|
|
178
|
+
"metadata_sync",
|
|
179
|
+
"agentic_change_orchestrator",
|
|
180
|
+
"ci_drift_heal",
|
|
181
|
+
]
|
|
182
|
+
# Pretend sync_determine_operation reports no work for these
|
|
183
|
+
# modules. The test then verifies detect_drift correctly maps
|
|
184
|
+
# "nothing to do" → empty drift lists for these specific modules
|
|
185
|
+
# (no module-name-based special casing that would re-flag them).
|
|
186
|
+
no_op = MagicMock(operation="nothing", reason="clean")
|
|
187
|
+
files = [Path(f"prompts/{bn}_python.prompt") for bn in modules]
|
|
188
|
+
|
|
189
|
+
def fake_infer(path):
|
|
190
|
+
stem = Path(path).stem
|
|
191
|
+
base, _, lang = stem.rpartition("_")
|
|
192
|
+
return base, lang
|
|
193
|
+
|
|
194
|
+
def fake_sync(basename, language, target_coverage, log_mode):
|
|
195
|
+
return no_op
|
|
196
|
+
|
|
197
|
+
with patch("pdd.user_story_tests.discover_prompt_files", return_value=files), \
|
|
198
|
+
patch("pdd.operation_log.infer_module_identity", side_effect=fake_infer), \
|
|
199
|
+
patch("pdd.sync_determine_operation.sync_determine_operation", side_effect=fake_sync):
|
|
200
|
+
prompt_drifts, example_drifts = detect_drift(modules=modules)
|
|
174
201
|
|
|
175
202
|
assert prompt_drifts == []
|
|
176
203
|
assert example_drifts == []
|
|
@@ -285,6 +312,213 @@ class TestGetGitChangedFiles:
|
|
|
285
312
|
assert "pdd/prompts/auth_python.prompt" in candidates
|
|
286
313
|
|
|
287
314
|
|
|
315
|
+
# ---------------------------------------------------------------------------
|
|
316
|
+
# _has_symlinked_ancestor / _git_add_pathspecs symlink-staging tests
|
|
317
|
+
# ---------------------------------------------------------------------------
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
class TestSymlinkStaging:
|
|
321
|
+
"""Regression: auto-heal must not pass symlink-traversal pathspecs to git add.
|
|
322
|
+
|
|
323
|
+
`_git_relative_path_candidates` returns both the symlinked form
|
|
324
|
+
(e.g. ``prompts/foo.prompt`` via a tracked ``prompts -> pdd/prompts`` shim)
|
|
325
|
+
and the canonical form (``pdd/prompts/foo.prompt``) for the same source.
|
|
326
|
+
Newer Git refuses the symlinked form with
|
|
327
|
+
``pathspec 'prompts/foo.prompt' is beyond a symbolic link``, which kills
|
|
328
|
+
the whole heal commit. The fix drops symlink-traversal paths at the
|
|
329
|
+
staging boundary so the canonical form (always also in the list) wins.
|
|
330
|
+
"""
|
|
331
|
+
|
|
332
|
+
def _make_symlink_repo(self, tmp_path: Path) -> Path:
|
|
333
|
+
"""Set up a fake repo where ``prompts -> pdd/prompts``."""
|
|
334
|
+
(tmp_path / "pdd" / "prompts").mkdir(parents=True)
|
|
335
|
+
(tmp_path / "prompts").symlink_to("pdd/prompts")
|
|
336
|
+
(tmp_path / "pdd" / "prompts" / "foo.prompt").write_text("% prompt", encoding="utf-8")
|
|
337
|
+
return tmp_path
|
|
338
|
+
|
|
339
|
+
def test_has_symlinked_ancestor_detects_symlinked_dir(self, tmp_path):
|
|
340
|
+
self._make_symlink_repo(tmp_path)
|
|
341
|
+
assert _has_symlinked_ancestor("prompts/foo.prompt", tmp_path) is True
|
|
342
|
+
assert _has_symlinked_ancestor("pdd/prompts/foo.prompt", tmp_path) is False
|
|
343
|
+
# Trivial top-level files have no ancestor to traverse.
|
|
344
|
+
assert _has_symlinked_ancestor("foo.prompt", tmp_path) is False
|
|
345
|
+
|
|
346
|
+
def test_git_add_pathspecs_drops_symlinked_form(self, tmp_path):
|
|
347
|
+
"""When both forms of a symlinked path are passed, only the canonical
|
|
348
|
+
form reaches `git add`; the symlinked form is dropped."""
|
|
349
|
+
self._make_symlink_repo(tmp_path)
|
|
350
|
+
|
|
351
|
+
captured: dict = {}
|
|
352
|
+
|
|
353
|
+
def fake_run(cmd, **kwargs):
|
|
354
|
+
captured.setdefault("calls", []).append(list(cmd))
|
|
355
|
+
# check-ignore: pretend none are ignored
|
|
356
|
+
if cmd[:2] == ["git", "check-ignore"]:
|
|
357
|
+
return MagicMock(returncode=1, stdout="", stderr="")
|
|
358
|
+
# git add: succeed
|
|
359
|
+
if cmd[:2] == ["git", "add"]:
|
|
360
|
+
return MagicMock(returncode=0, stdout="", stderr="")
|
|
361
|
+
return MagicMock(returncode=0, stdout="", stderr="")
|
|
362
|
+
|
|
363
|
+
with patch("pdd.ci_drift_heal.subprocess.run", side_effect=fake_run):
|
|
364
|
+
ok = _git_add_pathspecs(
|
|
365
|
+
["prompts/foo.prompt", "pdd/prompts/foo.prompt"],
|
|
366
|
+
cwd=tmp_path,
|
|
367
|
+
)
|
|
368
|
+
|
|
369
|
+
assert ok is True
|
|
370
|
+
add_calls = [c for c in captured["calls"] if c[:2] == ["git", "add"]]
|
|
371
|
+
assert len(add_calls) == 1, f"expected one git add call, got {add_calls}"
|
|
372
|
+
staged = add_calls[0][add_calls[0].index("--") + 1 :]
|
|
373
|
+
assert "pdd/prompts/foo.prompt" in staged
|
|
374
|
+
assert "prompts/foo.prompt" not in staged, (
|
|
375
|
+
"symlinked-ancestor path must be filtered before git add"
|
|
376
|
+
)
|
|
377
|
+
|
|
378
|
+
def test_git_add_pathspecs_unchanged_without_symlink(self, tmp_path):
|
|
379
|
+
"""No symlinks in the repo → no filtering, behaviour matches the
|
|
380
|
+
original (gitignore-only) filter path."""
|
|
381
|
+
(tmp_path / "pdd").mkdir()
|
|
382
|
+
(tmp_path / "pdd" / "foo.py").write_text("# foo", encoding="utf-8")
|
|
383
|
+
|
|
384
|
+
captured: dict = {}
|
|
385
|
+
|
|
386
|
+
def fake_run(cmd, **kwargs):
|
|
387
|
+
captured.setdefault("calls", []).append(list(cmd))
|
|
388
|
+
if cmd[:2] == ["git", "check-ignore"]:
|
|
389
|
+
return MagicMock(returncode=1, stdout="", stderr="")
|
|
390
|
+
if cmd[:2] == ["git", "add"]:
|
|
391
|
+
return MagicMock(returncode=0, stdout="", stderr="")
|
|
392
|
+
return MagicMock(returncode=0, stdout="", stderr="")
|
|
393
|
+
|
|
394
|
+
with patch("pdd.ci_drift_heal.subprocess.run", side_effect=fake_run):
|
|
395
|
+
ok = _git_add_pathspecs(["pdd/foo.py"], cwd=tmp_path)
|
|
396
|
+
|
|
397
|
+
assert ok is True
|
|
398
|
+
add_calls = [c for c in captured["calls"] if c[:2] == ["git", "add"]]
|
|
399
|
+
assert len(add_calls) == 1
|
|
400
|
+
staged = add_calls[0][add_calls[0].index("--") + 1 :]
|
|
401
|
+
assert staged == ["pdd/foo.py"]
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
class TestSymlinkStagingRealGit:
|
|
405
|
+
"""Integration tests that exercise the *real* git binary, no subprocess mocking.
|
|
406
|
+
|
|
407
|
+
The mocked tests above prove the helper builds the right ``git add`` argv.
|
|
408
|
+
These tests prove the helper survives the actual git fatals that the
|
|
409
|
+
auto-heal CI Cloud Build hit in production — specifically that
|
|
410
|
+
``git check-ignore`` ALSO refuses pathspecs whose ancestor is a symlink
|
|
411
|
+
("pathspec 'X' is beyond a symbolic link", exit 128), so a filter that
|
|
412
|
+
only runs after ``check-ignore`` is too late.
|
|
413
|
+
|
|
414
|
+
Regression for the mixed-batch case the reviewer of PR #1048 surfaced:
|
|
415
|
+
when ``prompts/foo.prompt`` (via symlink) and ``pdd/meta/foo_run.json``
|
|
416
|
+
(gitignored) appear in the same batch, naive ordering loses the ignore
|
|
417
|
+
info to a check-ignore fatal and the heal commit blows up at ``git add``.
|
|
418
|
+
"""
|
|
419
|
+
|
|
420
|
+
def _init_repo(self, tmp_path: Path) -> None:
|
|
421
|
+
"""Build a tmp git repo with the exact shape that triggers the bug.
|
|
422
|
+
|
|
423
|
+
- ``prompts/`` is a tracked symlink to ``pdd/prompts/``.
|
|
424
|
+
- ``.gitignore`` excludes ``*_run.json``.
|
|
425
|
+
- One file exists under each: a prompt under ``pdd/prompts/`` and an
|
|
426
|
+
ignored metadata file under ``pdd/meta/``.
|
|
427
|
+
"""
|
|
428
|
+
subprocess.run(["git", "init", "-q"], cwd=tmp_path, check=True)
|
|
429
|
+
subprocess.run(
|
|
430
|
+
["git", "config", "user.email", "test@example.com"],
|
|
431
|
+
cwd=tmp_path,
|
|
432
|
+
check=True,
|
|
433
|
+
)
|
|
434
|
+
subprocess.run(
|
|
435
|
+
["git", "config", "user.name", "test"], cwd=tmp_path, check=True
|
|
436
|
+
)
|
|
437
|
+
(tmp_path / "pdd" / "prompts").mkdir(parents=True)
|
|
438
|
+
(tmp_path / "pdd" / "meta").mkdir(parents=True)
|
|
439
|
+
(tmp_path / "prompts").symlink_to("pdd/prompts")
|
|
440
|
+
(tmp_path / "pdd" / "prompts" / "foo.prompt").write_text("% prompt\n", encoding="utf-8")
|
|
441
|
+
(tmp_path / ".gitignore").write_text("*_run.json\n", encoding="utf-8")
|
|
442
|
+
(tmp_path / "pdd" / "meta" / "foo_run.json").write_text("{}\n", encoding="utf-8")
|
|
443
|
+
subprocess.run(["git", "add", ".gitignore", "prompts"], cwd=tmp_path, check=True)
|
|
444
|
+
subprocess.run(
|
|
445
|
+
["git", "commit", "-q", "-m", "init"], cwd=tmp_path, check=True
|
|
446
|
+
)
|
|
447
|
+
|
|
448
|
+
def test_mixed_batch_with_symlink_and_ignored_path(self, tmp_path):
|
|
449
|
+
"""Reviewer-of-#1048's exact reproducer: mixed batch including a
|
|
450
|
+
symlinked path AND a gitignored path. ``check-ignore`` fatals on the
|
|
451
|
+
symlinked path; if the symlink filter runs too late, the ignore info
|
|
452
|
+
is lost and ``git add`` refuses the batch."""
|
|
453
|
+
self._init_repo(tmp_path)
|
|
454
|
+
|
|
455
|
+
ok = _git_add_pathspecs(
|
|
456
|
+
[
|
|
457
|
+
"prompts/foo.prompt", # symlinked form — fatals on check-ignore
|
|
458
|
+
"pdd/prompts/foo.prompt", # canonical form — must stage cleanly
|
|
459
|
+
"pdd/meta/foo_run.json", # gitignored — must NOT reach git add
|
|
460
|
+
],
|
|
461
|
+
cwd=tmp_path,
|
|
462
|
+
)
|
|
463
|
+
assert ok is True, (
|
|
464
|
+
"helper must return True; symlink filter must run before "
|
|
465
|
+
"check-ignore so the ignore info isn't lost"
|
|
466
|
+
)
|
|
467
|
+
|
|
468
|
+
# Confirm the right path actually landed in the index.
|
|
469
|
+
status = subprocess.run(
|
|
470
|
+
["git", "status", "--porcelain"],
|
|
471
|
+
cwd=tmp_path,
|
|
472
|
+
capture_output=True,
|
|
473
|
+
text=True,
|
|
474
|
+
check=True,
|
|
475
|
+
)
|
|
476
|
+
staged_lines = [line for line in status.stdout.splitlines() if line.startswith("A ")]
|
|
477
|
+
assert any("pdd/prompts/foo.prompt" in line for line in staged_lines), (
|
|
478
|
+
f"canonical prompt path must be staged; got {status.stdout!r}"
|
|
479
|
+
)
|
|
480
|
+
assert not any("foo_run.json" in line for line in staged_lines), (
|
|
481
|
+
f"gitignored path must not be staged; got {status.stdout!r}"
|
|
482
|
+
)
|
|
483
|
+
|
|
484
|
+
def test_canonical_only_batch_still_works(self, tmp_path):
|
|
485
|
+
"""Sanity: when the caller passes only the canonical form (no
|
|
486
|
+
symlinked twin), the helper still stages correctly."""
|
|
487
|
+
self._init_repo(tmp_path)
|
|
488
|
+
|
|
489
|
+
ok = _git_add_pathspecs(
|
|
490
|
+
["pdd/prompts/foo.prompt", "pdd/meta/foo_run.json"],
|
|
491
|
+
cwd=tmp_path,
|
|
492
|
+
)
|
|
493
|
+
assert ok is True
|
|
494
|
+
|
|
495
|
+
def test_symlinked_only_batch_warns_and_no_ops(self, tmp_path):
|
|
496
|
+
"""Defensive log path: if the caller passes ONLY a symlinked path
|
|
497
|
+
(no canonical twin), the helper should not stage anything but must
|
|
498
|
+
return True (so the heal commit isn't crashed by a silent miss)."""
|
|
499
|
+
self._init_repo(tmp_path)
|
|
500
|
+
|
|
501
|
+
ok = _git_add_pathspecs(
|
|
502
|
+
["prompts/foo.prompt"], # only the symlinked form
|
|
503
|
+
cwd=tmp_path,
|
|
504
|
+
)
|
|
505
|
+
# Returning True here is intentional: the caller (auto-heal) typically
|
|
506
|
+
# has both forms in the candidate list; if it only has the symlinked
|
|
507
|
+
# form, that's a caller bug we want surfaced via the warning log, not
|
|
508
|
+
# a False return that aborts an otherwise-successful heal commit.
|
|
509
|
+
assert ok is True
|
|
510
|
+
|
|
511
|
+
# Nothing should be staged.
|
|
512
|
+
status = subprocess.run(
|
|
513
|
+
["git", "status", "--porcelain"],
|
|
514
|
+
cwd=tmp_path,
|
|
515
|
+
capture_output=True,
|
|
516
|
+
text=True,
|
|
517
|
+
check=True,
|
|
518
|
+
)
|
|
519
|
+
assert "A " not in status.stdout
|
|
520
|
+
|
|
521
|
+
|
|
288
522
|
# ---------------------------------------------------------------------------
|
|
289
523
|
# detect_drift with diff_base (git-based reclassification) tests
|
|
290
524
|
# ---------------------------------------------------------------------------
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|