pdd-cli 0.0.237__tar.gz → 0.0.238__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/PKG-INFO +3 -3
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/README.md +8 -3
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_change_orchestrator.py +11 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_sync.py +190 -26
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_sync_runner.py +3 -1
- pdd_cli-0.0.238/pdd/ci_drift_heal.py +1413 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/core/duplicate_cli_guard.py +9 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/metadata_sync.py +15 -1
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/pdd_completion.sh +1 -1
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/sync_determine_operation.py +9 -2
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/update_main.py +171 -2
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd_cli.egg-info/PKG-INFO +3 -3
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd_cli.egg-info/SOURCES.txt +1 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pypi_description.rst +2 -2
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pyproject.toml +2 -2
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_change_orchestrator.py +25 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_sync.py +420 -45
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_sync_runner.py +32 -0
- pdd_cli-0.0.238/tests/test_auto_heal_workflow.py +128 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_ci_drift_heal.py +459 -9
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_duplicate_cli_guard.py +34 -2
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_sync_determine_operation.py +23 -1
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_update_main.py +421 -13
- pdd_cli-0.0.237/pdd/ci_drift_heal.py +0 -1484
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/LICENSE +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/__init__.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/__main__.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/_keyring_timeout.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_architecture.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_architecture_orchestrator.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_bug.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_bug_orchestrator.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_change.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_checkup.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_checkup_orchestrator.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_common.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_common_worktree.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_crash.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_e2e_fix.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_e2e_fix_orchestrator.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_fix.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_langtest.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_split.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_split_orchestrator.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_test.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_test_generate.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_test_orchestrator.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_update.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/agentic_verify.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/api_key_scanner.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/architecture_include_validation.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/architecture_registry.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/architecture_sync.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/architecture_sync_helper.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/auth_service.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/auto_deps_architecture.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/auto_deps_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/auto_include.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/auto_update.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/bug_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/bug_to_unit_test.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/change.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/change_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/checkup_review_loop.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/ci_detect_changed_modules.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/ci_validation.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/cli.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/cli_detector.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/cmd_test_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/code_generator.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/code_generator_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/__init__.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/analysis.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/auth.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/checkup.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/connect.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/extracts.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/firecrawl.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/fix.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/generate.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/maintenance.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/misc.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/modify.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/report.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/sessions.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/templates.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/utility.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/commands/which.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/comment_line.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/config_resolution.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/conflicts_in_prompts.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/conflicts_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/construct_paths.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/content_selector.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/context_generator.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/context_generator_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/continue_generation.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/core/__init__.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/core/cli.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/core/cloud.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/core/dump.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/core/errors.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/core/llm_trace.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/core/remote_session.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/core/utils.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/crash_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/data/arena_elo_manifest.json +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/data/language_format.csv +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/data/llm_model.csv +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/detect_change.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/detect_change_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/docs/prompting_guide.md +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/durable_sync_runner.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/edit_file.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/embed_retrieve.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/extracts_prune.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/failure_classification.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/find_section.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/firecrawl_cache.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/fix_code_loop.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/fix_code_module_errors.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/fix_error_loop.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/fix_errors_from_unit_tests.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/fix_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/fix_verification_errors.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/fix_verification_errors_loop.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/fix_verification_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/generate_model_catalog.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/generate_output_paths.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/generate_test.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/generation_completion.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/get_comment.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/get_extension.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/get_jwt_token.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/get_language.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/get_lint_commands.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/get_run_command.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/get_test_command.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/git_update.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/include_query_extractor.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/increase_tests.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/incremental_code_generator.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/incremental_prd_architecture.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/insert_includes.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/install_completion.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/json_atomic.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/list_drift_detection.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/llm_invoke.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/load_prompt_template.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/logo_animation.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/mcp_config.json +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/model_tester.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/one_session_sync.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/operation_log.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/path_resolution.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/pdd_completion.fish +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/pdd_completion.zsh +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/pddrc_initializer.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/pin_example_hack.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/postprocess.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/postprocess_0.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/preprocess.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/preprocess_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/process_csv_change.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step10_completeness_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step11_sync_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step12_deps_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step13_fix_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step1_analyze_prd_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step1b_complexity_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step2_analyze_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step2b_codebase_scan_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step3_research_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step4_data_model_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step5_design_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step5b_completeness_gate_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step5b_fix_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step6_research_deps_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step7_generate_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step7b_review_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step8_5_context_docs_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step8_pddrc_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step9_prompts_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_arch_step9b_cross_audit_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_bug_step10_verify_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_bug_step11_e2e_test_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_bug_step12_pr_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_bug_step1_duplicate_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_bug_step2_docs_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_bug_step3_triage_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_bug_step4_api_research_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_bug_step5_reproduce_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_bug_step6_root_cause_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_bug_step7_prompt_classification_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_bug_step8_test_plan_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_bug_step9_generate_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_change_step10_architecture_update_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_change_step11_identify_issues_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_change_step12_fix_issues_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_change_step13_create_pr_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_change_step1_duplicate_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_change_step2_docs_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_change_step3_research_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_change_step4_clarify_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_change_step5_docs_change_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_change_step6_devunits_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_change_step7_architecture_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_change_step8_analyze_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_change_step9_implement_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_checkup_step1_discover_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_checkup_step2_deps_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_checkup_step3_build_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_checkup_step4_interfaces_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_checkup_step5_test_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_checkup_step6_1_fix_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_checkup_step6_2_regression_tests_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_checkup_step6_3_e2e_tests_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_checkup_step7_verify_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_checkup_step8_create_pr_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_crash_explore_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_e2e_fix_step10_ci_validation_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_e2e_fix_step11_code_cleanup_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_e2e_fix_step1_unit_tests_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_e2e_fix_step2_e2e_tests_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_e2e_fix_step3_root_cause_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_e2e_fix_step4_fix_e2e_tests_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_e2e_fix_step5_identify_devunits_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_e2e_fix_step6_create_unit_tests_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_e2e_fix_step7_verify_tests_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_e2e_fix_step8_run_pdd_fix_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_e2e_fix_step9_verify_all_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_fix_explore_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_fix_nonpython_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_fix_primary_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_split_step0_intent_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_split_step1_survey_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_split_step2_diagnose_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_split_step3_investigate_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_split_step4_propose_options_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_split_step6_extract_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_split_step6a_phase_extract_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_split_step7_assess_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_split_step8_repair_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_split_step9_refine_check_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_sync_fix_dry_run_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_sync_identify_modules_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_generate_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step10_validate_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step11_loop_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step15_plan_validation_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step16_run_tests_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step1_duplicate_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step2_docs_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step3_clarify_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step4_detect_frontend_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step5_test_plan_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step5b_enhance_plan_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step6_coverage_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step6_generate_tests_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step7_checklist_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step7_run_tests_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step8_fix_iterate_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step8_manual_test_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step9_regression_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_test_step9_submit_pr_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_update_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/agentic_verify_explore_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/arrange_graph_layout_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/auto_include_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/bug_to_unit_test_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/change_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/code_patcher_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/conflict_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/continue_generation_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/core_dump_requirements_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/cross_issue_reconcile_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/detect_change_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/diff_analyzer_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/example_generator_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/extract_code_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/extract_conflict_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/extract_detect_change_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/extract_program_code_fix_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/extract_prompt_change_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/extract_prompt_split_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/extract_prompt_update_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/extract_promptline_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/extract_unit_code_fix_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/extract_xml_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/find_verification_errors_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/fix_code_module_errors_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/fix_errors_from_unit_tests_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/fix_verification_errors_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/generate_test_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/generate_test_from_example_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/include_query_extractor_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/increase_tests_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/incremental_prd_architecture_patch_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/insert_includes_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/one_session_agent_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/post_gen_verify_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/prompt_code_diff_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/prompt_diff_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/split_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/summarize_file_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/sync_analysis_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/trace_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/trim_results_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/trim_results_start_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/unfinished_prompt_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/update_prompt_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/prompts/xml_convertor_LLM.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/provider_manager.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/pytest_output.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/python_env_detector.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/reasoning.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/remote_session.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/render_mermaid.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/__init__.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/app.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/click_executor.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/executor.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/jobs.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/models.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/routes/__init__.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/routes/architecture.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/routes/auth.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/routes/commands.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/routes/config.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/routes/extracts.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/routes/files.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/routes/prompts.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/routes/websocket.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/security.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/terminal_spawner.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/server/token_counter.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/setup_tool.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/split.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/split_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/split_validation.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/summarize_directory.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/sync_animation.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/sync_graph_order_consistency.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/sync_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/sync_orchestration.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/sync_order.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/sync_tui.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/template_expander.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/template_registry.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/templates/architecture/architecture_json.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/templates/architecture/example_nextjs_task_notes.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/templates/architecture/example_python_backend.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/templates/architecture/pdd_path_construction_guide.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/templates/generic/generate_pddrc_YAML.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/templates/generic/generate_prompt.prompt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/test_result.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/trace.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/trace_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/track_cost.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/unfinished_prompt.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/update_model_costs.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/update_prompt.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/user_story_tests.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/validate_prompt_includes.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd/xml_tagger.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd_cli.egg-info/dependency_links.txt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd_cli.egg-info/entry_points.txt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd_cli.egg-info/requires.txt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/pdd_cli.egg-info/top_level.txt +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/setup.cfg +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_739_complete.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_739_e2e_synthetic.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_739_fixtures.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_arch_complexity_prompt.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_architecture.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_architecture_orchestrator.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_bug.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_bug_orchestrator.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_bug_orchestrator_1.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_bug_orchestrator_step_comments.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_bug_step10_prompt.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_bug_step11_prompt.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_bug_step7_prompt.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_change.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_checkup.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_checkup_orchestrator.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_common.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_common_issue_813_anthropic_api_key_oauth_shadow.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_common_worktree.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_crash.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_e2e_fix.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_e2e_fix_orchestrator.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_e2e_fix_step10_prompt.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_fix.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_langtest.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_split.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_split_orchestrator.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_split_real.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_split_v2.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_sync_nearest_config.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_test.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_test_generate.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_test_orchestrator.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_update.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_agentic_verify.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_api_key_scanner.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_architecture_include_validation.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_architecture_registry.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_architecture_sync.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_auth_service.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_auto_deps_architecture.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_auto_deps_entry_wipe.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_auto_deps_lock.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_auto_deps_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_auto_include.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_auto_update.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_bug_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_bug_to_unit_test.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_change.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_change_call_site_and_retry.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_change_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_checkup_pr_mode.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_checkup_review_loop.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_ci_detect_changed_modules.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_ci_validation.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_circular_includes.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_cli.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_cli_binary_isolation.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_cli_detector.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_cloud_noninteractive_auth.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_cmd_test_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_code_generator.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_code_generator_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_code_patcher_prompt_json_example.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_commands_auth.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_commands_firecrawl.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_commands_fix.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_commands_generate.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_commands_maintenance.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_commands_modify.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_commands_templates.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_commands_utility.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_comment_line.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_conflicts_in_prompts.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_conflicts_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_construct_paths.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_content_selector.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_context_example_isolation.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_context_generator.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_context_generator_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_continue_generation.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_copy_package_data_to_public.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_core_dump.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_core_errors.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_core_utils.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_crash_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_cross_step_consistency_prompts.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_detect_change.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_detect_change_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_discover_associated_documents.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_durable_sync_runner.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_auto_deps_pipeline.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_bug_step9_verification.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_219_duplicate_includes.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_295_openai_schema.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_296_custom_csv.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_305_false_success.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_309_oauth_rate_limit.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_319_json_braces.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_340_report_core_no_default.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_342_syspath_isolation.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_349_sys_modules_pollution.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_357_step9_keyerror.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_358_jwt_cache_null.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_364_cumulative_cost.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_373_step5_keyerror.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_375_malformed_json.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_379_auth_null_expires.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_383_commit_intermediate_files.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_399_ssh_url_message.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_419_cli_unpushed_commits.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_419_unpushed_commits.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_426_include_path_validation.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_429_prompt_files_in_pr.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_445_worktree_resume.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_448_change_orchestrator.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_448_step5_keyerror.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_449_auth_logout_message.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_467_false_cached_steps.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_468_not_a_bug_early_exit.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_469_cleanup_messages.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_469_duplicate_unresolved.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_470_sessions_cleanup_auth_message.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_481_pagination.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_485_warning_false_negative.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_493_update_output_subdir.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_508_budget_test_cost.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_508_sync_budget_tracking.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_509_retry_cost.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_521_circular_includes.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_522_include_fingerprint.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_545_no_changes_to_commit.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_549_format_double_escaping.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_549_other_orchestrators.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_553_circular_includes_non_recursive.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_557_codex_ndjson.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_566_code_fence_tags.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_579_bug_worktree_rerun.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_579_orchestrator_rerun.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_594_preamble_imports.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_604_handler_wiring.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_620_hallucinated_imports.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_626_nextjs_rendering_model.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_686_anthropic_cost_double_count.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_687_postprocess_model_name.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_737_step_completion_markers.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_745_initial_cost_tracking.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_773_hard_stop.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_791_e2e_timeout_retry.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_796_typescript_python_validation.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_797_typescript_verification.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_817_step5_degenerate_cli.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_824_artifact_filtering.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_825_param_drop.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_830_workflow_stall.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_894.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_902_provider_fallback.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_issue_903_convergence.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_openai_required_array.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_pattern_verification.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_selective_includes.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_selective_includes_integration.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_step11_cleanup_revert.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_subprocess_issue_399_ssh_url_message.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_subprocess_issue_541_quiet_flag.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_e2e_subprocess_issue_593_bug_exit_code.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_embed_retrieve.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_example_error_detection.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_explicit_output_paths.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_extracts_prune.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_failure_classification.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_find_prompt_file.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_find_section.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_firecrawl_cache.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_fix_code_loop.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_fix_code_module_errors.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_fix_error_loop.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_fix_error_loop_failure_aware.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_fix_errors_from_unit_tests.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_fix_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_fix_main_issue_232.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_fix_verification_errors.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_fix_verification_errors_loop.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_fix_verification_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_generate_model_catalog.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_generate_output_paths.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_generate_output_paths_regression.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_generate_test.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_generation_completion.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_get_comment.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_get_extension.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_get_jwt_token.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_get_language.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_get_lint_commands.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_get_run_command.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_get_test_command.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_git_update.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_include_query_extractor.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_increase_tests.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_incremental_code_generator.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_incremental_prd_architecture.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_incremental_prd_architecture_real.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_insert_includes.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_install_completion.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_1049_reproduction.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_1240_generate_prompt_meta_framing.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_1272_cloud_timeout.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_225_paths_and_includes.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_237.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_467_all_orchestrators.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_469_duplicate_unresolved.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_592_failing_case.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_600_agentic_weaknesses.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_633_reproduction.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_686_post_process_args_braces.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_737_step_completion_markers.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_791_reproduction.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_794_anti_tdd_and_test_discovery.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_794_repro.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_830_remaining_fixes.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_865_reproduction.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_894_pytest_output_deadlock.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_902.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_902_prompt_sync.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_926_preserve_comments_directive.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_issue_953_directory_scan_regression.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_jobs_sync_failure_detection.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_list_drift_detection.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_llm_invoke.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_llm_invoke_csv_model_registration.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_llm_invoke_integration.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_llm_invoke_nested_schema.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_llm_invoke_retry_cost.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_llm_invoke_vertex_retry.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_load_prompt_template.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_logo_animation.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_metadata_sync.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_mock_vs_production_fix.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_model_tester.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_nextjs_rendering_model.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_one_session_eval.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_one_session_sync.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_opencode_provider.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_operation_log.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_operation_logging_e2e.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_path_resolution.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_pattern_completeness_verification.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_pddrc_initializer.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_pddrc_true_e2e.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_pin_example_hack.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_postprocess.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_postprocess_0.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_preprocess.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_preprocess_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_preprocess_main_pdd_tags.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_process_csv_change.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_prompt_contract_validation.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_provider_env_isolation.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_provider_manager.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_pytest_output.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_quiet_flag.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_reasoning.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_remote_command_completion.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_remote_session.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_render_mermaid.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_report.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_research_prompt_web_tools.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_server_routes_prompts.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_server_spawn.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_setup_tool.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_split.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_split_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_split_seam_resolution.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_split_validation.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_step11_api_mocking_guidance.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_structural_test_guard.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_structural_test_guard_integration.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_summarize_directory.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_sync_animation.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_sync_animation_0.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_sync_backward_compat.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_sync_code_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_sync_contract_matrix.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_sync_graph_order_consistency.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_sync_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_sync_orchestration.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_sync_order.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_sync_target_coverage_infinite_loop.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_sync_template_prompt_discovery.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_sync_tui.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_template_expander.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_template_registry.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_thread_safe_redirector.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_time_reasoning_effort_env.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_trace.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_trace_main.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_track_cost.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_unfinished_prompt.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_update_command.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_update_model_costs.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_update_prompt.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_user_story_tests.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_version.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_which.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_xml_tagger.py +0 -0
- {pdd_cli-0.0.237 → pdd_cli-0.0.238}/tests/test_z3_prompt_test_correspondence.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pdd-cli
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.238
|
|
4
4
|
Summary: PDD (Prompt-Driven Development) Command Line Interface
|
|
5
5
|
Author: Greg Tanaka
|
|
6
6
|
Author-email: glt@alumni.caltech.edu
|
|
@@ -65,7 +65,7 @@ Requires-Dist: twine; extra == "dev"
|
|
|
65
65
|
Requires-Dist: httpx==0.28.1; extra == "dev"
|
|
66
66
|
Dynamic: license-file
|
|
67
67
|
|
|
68
|
-
.. image:: https://img.shields.io/badge/pdd--cli-v0.0.
|
|
68
|
+
.. image:: https://img.shields.io/badge/pdd--cli-v0.0.238-blue
|
|
69
69
|
:alt: PDD-CLI Version
|
|
70
70
|
|
|
71
71
|
.. image:: https://img.shields.io/badge/Discord-join%20chat-7289DA.svg?logo=discord&logoColor=white&link=https://discord.gg/Yp4RTh8bG7
|
|
@@ -142,7 +142,7 @@ After installation, verify:
|
|
|
142
142
|
|
|
143
143
|
pdd --version
|
|
144
144
|
|
|
145
|
-
You'll see the current PDD version (e.g., 0.0.
|
|
145
|
+
You'll see the current PDD version (e.g., 0.0.238).
|
|
146
146
|
|
|
147
147
|
Getting Started with Examples
|
|
148
148
|
-----------------------------
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# PDD (Prompt-Driven Development) Command Line Interface
|
|
2
2
|
|
|
3
|
-
 [](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.238
|
|
366
366
|
|
|
367
367
|
To check your installed version, run:
|
|
368
368
|
```
|
|
@@ -2412,7 +2412,7 @@ Options:
|
|
|
2412
2412
|
- `--git`: Use git history to find the original code file, eliminating the need for the `INPUT_CODE_FILE` argument.
|
|
2413
2413
|
- `--extensions EXTENSIONS`: In repository-wide mode, filter the update to only include files with the specified comma-separated extensions (e.g., `py,js,ts`).
|
|
2414
2414
|
- `--simple`: Use the legacy 2-stage LLM update process instead of the default agentic mode. Useful when agentic CLIs are not available or for faster updates.
|
|
2415
|
-
- `--sync-metadata`: After the prompt update, run the shared metadata-sync orchestrator so prompt PDD tags, `architecture.json` entries, run reports, and fingerprint state are reconciled in one step. Works in single-file, regeneration, and repo modes. Without this flag,
|
|
2415
|
+
- `--sync-metadata`: After the prompt update, run the shared metadata-sync orchestrator so prompt PDD tags, `architecture.json` entries, run reports, and fingerprint state are reconciled in one step. Works in single-file, regeneration, and repo modes. **Fingerprint note:** default single-file/regeneration `pdd update <code>` already finalizes the per-target fingerprint (`.pdd/meta/<basename>_<language>.json`) on success, and logs a skip reason when finalization is intentionally bypassed; `--sync-metadata` does not gate that behavior. Without this flag, the broader prompt-tag/architecture/run-report orchestrator is not run and those layers must be reconciled with separate commands. **Scope note:** the `tags` stage currently *preserves* existing PDD tags and only *seeds* tags from the matching `architecture.json` entry when a prompt has none — LLM-first **refresh** of stale-but-present tags is tracked at issue [#870](https://github.com/promptdriven/pdd/issues/870) and is not invoked by this orchestrator. When a prompt has zero PDD tags AND no architecture entry, the `tags` stage reports `skipped` (never `ok`) so operators see honest status. On any stage `failed`, `pdd update --sync-metadata` exits non-zero so CI auto-heal does not treat a half-finalized update as healed.
|
|
2416
2416
|
|
|
2417
2417
|
Example (Metadata Sync):
|
|
2418
2418
|
```bash
|
|
@@ -3561,6 +3561,11 @@ For detailed command examples for each workflow, see the respective command docu
|
|
|
3561
3561
|
- `pull_request_target` (opened / synchronize / reopened / ready_for_review): heals only modules changed by the PR and pushes a `chore: auto-heal …` commit back to the PR branch.
|
|
3562
3562
|
- `issue_comment` with a `/heal` command on a PR by an authorized collaborator: same as above, on demand.
|
|
3563
3563
|
|
|
3564
|
+
Generated internal PRs authored by `prompt-driven-github[bot]` are trusted as
|
|
3565
|
+
the autonomous pdd-issue App identity for the `pull_request_target` heal path.
|
|
3566
|
+
Other PR authors and all `/heal` comment requesters must pass the `pdd_cloud`
|
|
3567
|
+
collaborator check before Cloud Build is dispatched.
|
|
3568
|
+
|
|
3564
3569
|
There is no push-to-main trigger. Drift on `main` is healed by the next PR that touches the affected modules.
|
|
3565
3570
|
|
|
3566
3571
|
**Loop prevention**: Auto-heal commits start with `chore: auto-heal …`; the Cloud Build step short-circuits when the triggering commit subject matches that prefix, so the heal cannot retrigger itself.
|
|
@@ -1013,6 +1013,15 @@ def _preflight_drift_heal(
|
|
|
1013
1013
|
if not quiet:
|
|
1014
1014
|
console.print(f" [green]✓[/green] healed {drift.basename}")
|
|
1015
1015
|
else:
|
|
1016
|
+
combined_output = f"{result.stdout or ''}\n{result.stderr or ''}"
|
|
1017
|
+
if (
|
|
1018
|
+
"metadata finalization failed" in combined_output
|
|
1019
|
+
or "metadata staging verification failed" in combined_output
|
|
1020
|
+
or "[metadata-sync]" in combined_output
|
|
1021
|
+
):
|
|
1022
|
+
raise RuntimeError(
|
|
1023
|
+
f"preflight metadata finalization failed for {drift.basename}"
|
|
1024
|
+
)
|
|
1016
1025
|
failed.append(drift.basename)
|
|
1017
1026
|
if not quiet:
|
|
1018
1027
|
tail = result.stderr.strip().splitlines()[-1:] or ["(no stderr)"]
|
|
@@ -1026,6 +1035,8 @@ def _preflight_drift_heal(
|
|
|
1026
1035
|
console.print(
|
|
1027
1036
|
f" [red]✗[/red] heal timed out for {drift.basename}"
|
|
1028
1037
|
)
|
|
1038
|
+
except RuntimeError:
|
|
1039
|
+
raise
|
|
1029
1040
|
except Exception as exc:
|
|
1030
1041
|
failed.append(drift.basename)
|
|
1031
1042
|
if not quiet:
|
|
@@ -36,7 +36,11 @@ from .architecture_include_validation import (
|
|
|
36
36
|
validate_prompt_contract_context,
|
|
37
37
|
)
|
|
38
38
|
from .sync_graph_order_consistency import warnings_for_arch_vs_include_sync_order
|
|
39
|
-
from .architecture_registry import
|
|
39
|
+
from .architecture_registry import (
|
|
40
|
+
extract_modules,
|
|
41
|
+
find_architecture_for_project,
|
|
42
|
+
find_project_root as _find_project_root,
|
|
43
|
+
)
|
|
40
44
|
from .construct_paths import (
|
|
41
45
|
_detect_context_from_basename,
|
|
42
46
|
_extract_prefix_from_prompts_dir,
|
|
@@ -421,12 +425,23 @@ class GlobalSyncAnalysis(NamedTuple):
|
|
|
421
425
|
|
|
422
426
|
modules_to_sync: List[str]
|
|
423
427
|
module_cwds: Dict[str, Path]
|
|
428
|
+
module_targets: Dict[str, str]
|
|
424
429
|
estimated_cost: float
|
|
425
430
|
module_operations: Dict[str, List[str]]
|
|
426
431
|
skipped_modules: List[str]
|
|
427
432
|
all_modules: List[str]
|
|
428
433
|
|
|
429
434
|
|
|
435
|
+
class GlobalSyncModule(NamedTuple):
|
|
436
|
+
"""Scoped global-sync module identity."""
|
|
437
|
+
|
|
438
|
+
key: str
|
|
439
|
+
basename: str
|
|
440
|
+
cwd: Path
|
|
441
|
+
architecture_path: Path
|
|
442
|
+
entry: Dict[str, Any]
|
|
443
|
+
|
|
444
|
+
|
|
430
445
|
def _architecture_module_basenames(architecture: List[Dict[str, Any]]) -> List[str]:
|
|
431
446
|
"""Return syncable architecture module basenames, preserving declaration order."""
|
|
432
447
|
basenames: List[str] = []
|
|
@@ -441,6 +456,58 @@ def _architecture_module_basenames(architecture: List[Dict[str, Any]]) -> List[s
|
|
|
441
456
|
return basenames
|
|
442
457
|
|
|
443
458
|
|
|
459
|
+
def _architecture_sync_modules(project_root: Path) -> Tuple[List[GlobalSyncModule], List[Dict[str, Any]], Path]:
|
|
460
|
+
"""Return architecture modules with cwd scope preserved."""
|
|
461
|
+
arch_files = find_architecture_for_project(project_root)
|
|
462
|
+
if not arch_files:
|
|
463
|
+
return [], [], project_root / "architecture.json"
|
|
464
|
+
|
|
465
|
+
raw_modules: List[Tuple[str, Path, Path, Dict[str, Any]]] = []
|
|
466
|
+
architecture: List[Dict[str, Any]] = []
|
|
467
|
+
seen: set[Tuple[Path, str]] = set()
|
|
468
|
+
|
|
469
|
+
for arch_path in arch_files:
|
|
470
|
+
try:
|
|
471
|
+
data = json.loads(arch_path.read_text(encoding="utf-8"))
|
|
472
|
+
except (json.JSONDecodeError, OSError):
|
|
473
|
+
continue
|
|
474
|
+
|
|
475
|
+
arch_dir = arch_path.parent
|
|
476
|
+
for entry in extract_modules(data):
|
|
477
|
+
basename = _basename_from_architecture_filename(entry.get("filename", ""))
|
|
478
|
+
if not basename:
|
|
479
|
+
continue
|
|
480
|
+
dedupe_key = (arch_path.resolve(), basename)
|
|
481
|
+
if dedupe_key in seen:
|
|
482
|
+
continue
|
|
483
|
+
seen.add(dedupe_key)
|
|
484
|
+
architecture.append(entry)
|
|
485
|
+
# Consult _resolve_module_cwd so a nested .pddrc whose context owns
|
|
486
|
+
# this basename wins over the arch file's own directory. The
|
|
487
|
+
# resolver scans subdirectories of arch_dir for .pddrc files and
|
|
488
|
+
# falls back to arch_dir when no nested config claims the basename.
|
|
489
|
+
cwd = _resolve_module_cwd(basename, arch_dir)
|
|
490
|
+
raw_modules.append((basename, cwd, arch_path, entry))
|
|
491
|
+
|
|
492
|
+
counts: Dict[str, int] = {}
|
|
493
|
+
for basename, _, _, _ in raw_modules:
|
|
494
|
+
counts[basename] = counts.get(basename, 0) + 1
|
|
495
|
+
|
|
496
|
+
modules: List[GlobalSyncModule] = []
|
|
497
|
+
for basename, cwd, arch_path, entry in raw_modules:
|
|
498
|
+
if counts[basename] > 1:
|
|
499
|
+
try:
|
|
500
|
+
rel_scope = arch_path.parent.resolve().relative_to(project_root.resolve()).as_posix()
|
|
501
|
+
except (OSError, ValueError):
|
|
502
|
+
rel_scope = arch_path.parent.as_posix()
|
|
503
|
+
key = f"{rel_scope or '.'}:{basename}"
|
|
504
|
+
else:
|
|
505
|
+
key = basename
|
|
506
|
+
modules.append(GlobalSyncModule(key, basename, cwd, arch_path, entry))
|
|
507
|
+
|
|
508
|
+
return modules, architecture, arch_files[0]
|
|
509
|
+
|
|
510
|
+
|
|
444
511
|
def _prompt_contract_errors_for_module(
|
|
445
512
|
basename: str,
|
|
446
513
|
cwd: Path,
|
|
@@ -578,7 +645,7 @@ def _resolve_module_sync_context(
|
|
|
578
645
|
|
|
579
646
|
|
|
580
647
|
def _analyze_global_sync_modules(
|
|
581
|
-
modules: List[
|
|
648
|
+
modules: List[GlobalSyncModule],
|
|
582
649
|
project_root: Path,
|
|
583
650
|
*,
|
|
584
651
|
quiet: bool = False,
|
|
@@ -590,29 +657,33 @@ def _analyze_global_sync_modules(
|
|
|
590
657
|
"""Tier 1 global sync analysis: fingerprint-scan all architecture modules."""
|
|
591
658
|
modules_to_sync: List[str] = []
|
|
592
659
|
module_cwds: Dict[str, Path] = {}
|
|
660
|
+
module_targets: Dict[str, str] = {}
|
|
593
661
|
module_operations: Dict[str, List[str]] = {}
|
|
594
662
|
skipped_modules: List[str] = []
|
|
595
663
|
estimated_cost = 0.0
|
|
596
664
|
effective_budget = budget if budget is not None else 10.0
|
|
597
665
|
effective_coverage = target_coverage if target_coverage is not None else 90.0
|
|
598
666
|
|
|
599
|
-
for
|
|
600
|
-
|
|
601
|
-
|
|
667
|
+
for module in modules:
|
|
668
|
+
key = module.key
|
|
669
|
+
basename = module.basename
|
|
670
|
+
cwd = module.cwd
|
|
671
|
+
module_cwds[key] = cwd
|
|
672
|
+
module_targets[key] = basename
|
|
602
673
|
|
|
603
674
|
try:
|
|
604
675
|
context_name, prompts_dir, lang_to_path = _resolve_module_sync_context(
|
|
605
676
|
basename, cwd
|
|
606
677
|
)
|
|
607
678
|
except Exception as exc:
|
|
608
|
-
modules_to_sync.append(
|
|
609
|
-
module_operations[
|
|
679
|
+
modules_to_sync.append(key)
|
|
680
|
+
module_operations[key] = [
|
|
610
681
|
f"analysis-error: {exc}; queued for sync as safe fallback"
|
|
611
682
|
]
|
|
612
683
|
continue
|
|
613
684
|
|
|
614
685
|
if not lang_to_path:
|
|
615
|
-
skipped_modules.append(f"{
|
|
686
|
+
skipped_modules.append(f"{key}: no syncable prompt file found")
|
|
616
687
|
continue
|
|
617
688
|
|
|
618
689
|
operations: List[str] = []
|
|
@@ -644,13 +715,13 @@ def _analyze_global_sync_modules(
|
|
|
644
715
|
estimated_cost += float(decision.estimated_cost or 0.0)
|
|
645
716
|
elif decision.operation not in _GLOBAL_SYNC_NOOP_OPERATIONS:
|
|
646
717
|
skipped_modules.append(
|
|
647
|
-
f"{
|
|
718
|
+
f"{key}: {language} requires {decision.operation}; "
|
|
648
719
|
"outside Tier 1 prompt-staleness scope"
|
|
649
720
|
)
|
|
650
721
|
|
|
651
722
|
if needs_sync:
|
|
652
|
-
modules_to_sync.append(
|
|
653
|
-
module_operations[
|
|
723
|
+
modules_to_sync.append(key)
|
|
724
|
+
module_operations[key] = operations
|
|
654
725
|
|
|
655
726
|
if not quiet:
|
|
656
727
|
skipped_count = len(modules) - len(modules_to_sync)
|
|
@@ -662,10 +733,11 @@ def _analyze_global_sync_modules(
|
|
|
662
733
|
return GlobalSyncAnalysis(
|
|
663
734
|
modules_to_sync=modules_to_sync,
|
|
664
735
|
module_cwds=module_cwds,
|
|
736
|
+
module_targets=module_targets,
|
|
665
737
|
estimated_cost=estimated_cost,
|
|
666
738
|
module_operations=module_operations,
|
|
667
739
|
skipped_modules=skipped_modules,
|
|
668
|
-
all_modules=modules,
|
|
740
|
+
all_modules=[module.key for module in modules],
|
|
669
741
|
)
|
|
670
742
|
|
|
671
743
|
|
|
@@ -683,6 +755,90 @@ def _dependency_ordered_modules(
|
|
|
683
755
|
return ordered
|
|
684
756
|
|
|
685
757
|
|
|
758
|
+
def _build_scoped_global_dep_graph(
|
|
759
|
+
modules: List[GlobalSyncModule],
|
|
760
|
+
target_keys: List[str],
|
|
761
|
+
project_root: Path,
|
|
762
|
+
) -> Tuple[Dict[str, List[str]], List[str]]:
|
|
763
|
+
"""Build a dependency graph for scoped global-sync module keys.
|
|
764
|
+
|
|
765
|
+
Dep resolution proceeds in two passes:
|
|
766
|
+
|
|
767
|
+
1. Same-architecture scope: prefer a module declared in the same
|
|
768
|
+
architecture.json as the depending module.
|
|
769
|
+
2. Cross-architecture fallback: if no same-arch match exists, look across
|
|
770
|
+
all loaded modules by basename. An unambiguous match (exactly one
|
|
771
|
+
module across all archs with that basename) is accepted to preserve
|
|
772
|
+
the prior combined-architecture behaviour. Ambiguous cross-arch
|
|
773
|
+
basenames (multiple matches) emit a warning and drop the edge.
|
|
774
|
+
"""
|
|
775
|
+
target_set = set(target_keys)
|
|
776
|
+
module_by_key = {module.key: module for module in modules}
|
|
777
|
+
key_by_scope_basename = {
|
|
778
|
+
(module.architecture_path.resolve(), module.basename): module.key
|
|
779
|
+
for module in modules
|
|
780
|
+
}
|
|
781
|
+
# Global basename index used for unambiguous cross-arch fallback.
|
|
782
|
+
keys_by_basename: Dict[str, List[str]] = {}
|
|
783
|
+
for module in modules:
|
|
784
|
+
keys_by_basename.setdefault(module.basename, []).append(module.key)
|
|
785
|
+
graph: Dict[str, List[str]] = {key: [] for key in target_keys}
|
|
786
|
+
warnings: List[str] = []
|
|
787
|
+
|
|
788
|
+
for key in target_keys:
|
|
789
|
+
module = module_by_key.get(key)
|
|
790
|
+
if module is None:
|
|
791
|
+
continue
|
|
792
|
+
deps = module.entry.get("dependencies", [])
|
|
793
|
+
if not isinstance(deps, list):
|
|
794
|
+
continue
|
|
795
|
+
for dep in deps:
|
|
796
|
+
dep_basename = _basename_from_architecture_filename(str(dep))
|
|
797
|
+
if not dep_basename:
|
|
798
|
+
continue
|
|
799
|
+
dep_key = key_by_scope_basename.get(
|
|
800
|
+
(module.architecture_path.resolve(), dep_basename)
|
|
801
|
+
)
|
|
802
|
+
if dep_key is None:
|
|
803
|
+
# Same-architecture lookup missed. Fall back to a global
|
|
804
|
+
# basename lookup so cross-arch edges (preserved by the old
|
|
805
|
+
# combined-architecture builder) still resolve when the
|
|
806
|
+
# basename is unambiguous across the loaded modules.
|
|
807
|
+
candidate_keys = keys_by_basename.get(dep_basename, [])
|
|
808
|
+
if len(candidate_keys) == 1:
|
|
809
|
+
dep_key = candidate_keys[0]
|
|
810
|
+
elif len(candidate_keys) > 1:
|
|
811
|
+
warnings.append(
|
|
812
|
+
f"combined architecture data under {project_root}: "
|
|
813
|
+
f"module '{key}' declares ambiguous cross-arch "
|
|
814
|
+
f"dependency '{dep}' (basename '{dep_basename}' "
|
|
815
|
+
f"matches multiple modules: "
|
|
816
|
+
f"{', '.join(sorted(candidate_keys))}); "
|
|
817
|
+
"edge omitted from schedule"
|
|
818
|
+
)
|
|
819
|
+
continue
|
|
820
|
+
else:
|
|
821
|
+
warnings.append(
|
|
822
|
+
f"combined architecture data under {project_root}: "
|
|
823
|
+
f"module '{key}' declares unresolved dependency "
|
|
824
|
+
f"'{dep}'; no module with that filename in the same "
|
|
825
|
+
"architecture scope; edge omitted from schedule"
|
|
826
|
+
)
|
|
827
|
+
continue
|
|
828
|
+
if dep_key == key:
|
|
829
|
+
continue
|
|
830
|
+
if dep_key in target_set:
|
|
831
|
+
graph[key].append(dep_key)
|
|
832
|
+
else:
|
|
833
|
+
warnings.append(
|
|
834
|
+
f"combined architecture data under {project_root}: module "
|
|
835
|
+
f"'{key}' depends on '{dep_key}' (via '{dep}'), which is not "
|
|
836
|
+
"in the sync target set; edge omitted from schedule"
|
|
837
|
+
)
|
|
838
|
+
|
|
839
|
+
return graph, warnings
|
|
840
|
+
|
|
841
|
+
|
|
686
842
|
def _print_global_sync_plan(
|
|
687
843
|
analysis: GlobalSyncAnalysis,
|
|
688
844
|
ordered_modules: List[str],
|
|
@@ -736,8 +892,8 @@ def run_global_sync(
|
|
|
736
892
|
) -> Tuple[bool, str, float, str]:
|
|
737
893
|
"""Run project-wide Tier 1 global sync from architecture.json."""
|
|
738
894
|
project_root = _find_project_root(Path.cwd())
|
|
739
|
-
architecture, arch_path =
|
|
740
|
-
if architecture
|
|
895
|
+
all_modules, architecture, arch_path = _architecture_sync_modules(project_root)
|
|
896
|
+
if not architecture:
|
|
741
897
|
return (
|
|
742
898
|
False,
|
|
743
899
|
f"No architecture.json found under {project_root}.",
|
|
@@ -745,7 +901,6 @@ def run_global_sync(
|
|
|
745
901
|
"global-sync",
|
|
746
902
|
)
|
|
747
903
|
|
|
748
|
-
all_modules = _architecture_module_basenames(architecture)
|
|
749
904
|
if not all_modules:
|
|
750
905
|
return (
|
|
751
906
|
False,
|
|
@@ -764,18 +919,18 @@ def run_global_sync(
|
|
|
764
919
|
target_coverage=target_coverage,
|
|
765
920
|
)
|
|
766
921
|
|
|
767
|
-
|
|
768
|
-
|
|
922
|
+
dep_graph, dep_warnings = _build_scoped_global_dep_graph(
|
|
923
|
+
all_modules,
|
|
769
924
|
analysis.modules_to_sync,
|
|
770
|
-
|
|
925
|
+
project_root,
|
|
771
926
|
)
|
|
772
927
|
ordered_modules = _dependency_ordered_modules(
|
|
773
|
-
analysis.modules_to_sync,
|
|
928
|
+
analysis.modules_to_sync, dep_graph
|
|
774
929
|
)
|
|
775
930
|
|
|
776
931
|
if dry_run:
|
|
777
932
|
if not quiet:
|
|
778
|
-
_print_global_sync_plan(analysis, ordered_modules,
|
|
933
|
+
_print_global_sync_plan(analysis, ordered_modules, dep_warnings, budget)
|
|
779
934
|
return (
|
|
780
935
|
True,
|
|
781
936
|
f"Global sync dry run: {len(ordered_modules)} module(s) would sync.",
|
|
@@ -801,13 +956,13 @@ def run_global_sync(
|
|
|
801
956
|
"global-sync",
|
|
802
957
|
)
|
|
803
958
|
|
|
804
|
-
for warning in
|
|
959
|
+
for warning in dep_warnings:
|
|
805
960
|
if not quiet:
|
|
806
961
|
console.print(f"[yellow]Warning: {warning}[/yellow]")
|
|
807
962
|
|
|
808
963
|
runner = AsyncSyncRunner(
|
|
809
964
|
basenames=ordered_modules,
|
|
810
|
-
dep_graph=
|
|
965
|
+
dep_graph=dep_graph,
|
|
811
966
|
sync_options={
|
|
812
967
|
"total_budget": budget,
|
|
813
968
|
"skip_verify": skip_verify,
|
|
@@ -825,6 +980,7 @@ def run_global_sync(
|
|
|
825
980
|
verbose=verbose,
|
|
826
981
|
issue_url=None,
|
|
827
982
|
module_cwds=analysis.module_cwds,
|
|
983
|
+
module_targets=analysis.module_targets,
|
|
828
984
|
initial_cost=0.0,
|
|
829
985
|
)
|
|
830
986
|
success, message, cost = runner.run()
|
|
@@ -946,6 +1102,13 @@ def _resolve_module_cwd(basename: str, project_root: Path) -> Path:
|
|
|
946
1102
|
they match everything and should not claim ownership of unrelated modules.
|
|
947
1103
|
2. Fall back to project_root (which may have its own root .pddrc).
|
|
948
1104
|
"""
|
|
1105
|
+
root_has_prompt = False
|
|
1106
|
+
try:
|
|
1107
|
+
_, _, root_lang_to_path = _resolve_module_sync_context(basename, project_root)
|
|
1108
|
+
root_has_prompt = bool(root_lang_to_path)
|
|
1109
|
+
except Exception:
|
|
1110
|
+
root_has_prompt = False
|
|
1111
|
+
|
|
949
1112
|
# 1. Scan subdirectories for .pddrc files (max depth 2)
|
|
950
1113
|
best_match: Optional[Path] = None
|
|
951
1114
|
best_depth = -1
|
|
@@ -962,10 +1125,11 @@ def _resolve_module_cwd(basename: str, project_root: Path) -> Path:
|
|
|
962
1125
|
if _is_catchall_match(basename, config):
|
|
963
1126
|
continue
|
|
964
1127
|
candidate_dir = pddrc_path.parent
|
|
965
|
-
if _is_broad_basename_glob_match(basename, config, detected)
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
1128
|
+
if _is_broad_basename_glob_match(basename, config, detected):
|
|
1129
|
+
if root_has_prompt:
|
|
1130
|
+
continue
|
|
1131
|
+
if not _prompt_exists_for_context(candidate_dir, config, detected, basename):
|
|
1132
|
+
continue
|
|
969
1133
|
candidate_depth = len(candidate_dir.relative_to(project_root).parts)
|
|
970
1134
|
if candidate_depth > best_depth:
|
|
971
1135
|
best_match = candidate_dir
|
|
@@ -818,6 +818,7 @@ class AsyncSyncRunner:
|
|
|
818
818
|
verbose: bool = False,
|
|
819
819
|
issue_url: Optional[str] = None,
|
|
820
820
|
module_cwds: Optional[Dict[str, Any]] = None,
|
|
821
|
+
module_targets: Optional[Dict[str, str]] = None,
|
|
821
822
|
initial_cost: float = 0.0,
|
|
822
823
|
):
|
|
823
824
|
self.basenames: List[str] = list(basenames)
|
|
@@ -831,6 +832,7 @@ class AsyncSyncRunner:
|
|
|
831
832
|
self.issue_url = issue_url
|
|
832
833
|
self.project_root: Path = Path.cwd()
|
|
833
834
|
self.module_cwds: Dict[str, Any] = dict(module_cwds or {})
|
|
835
|
+
self.module_targets: Dict[str, str] = dict(module_targets or {})
|
|
834
836
|
self.initial_cost = float(initial_cost or 0.0)
|
|
835
837
|
|
|
836
838
|
self.total_budget = self.sync_options.get("total_budget")
|
|
@@ -1616,7 +1618,7 @@ class AsyncSyncRunner:
|
|
|
1616
1618
|
elif self.sync_options.get("budget") is not None:
|
|
1617
1619
|
cmd.extend(["--budget", str(self.sync_options["budget"])])
|
|
1618
1620
|
|
|
1619
|
-
cmd.append(basename)
|
|
1621
|
+
cmd.append(self.module_targets.get(basename, basename))
|
|
1620
1622
|
return cmd
|
|
1621
1623
|
|
|
1622
1624
|
def _build_env(
|