teddy-cli 0.1.17.dev1415__tar.gz → 0.1.17.dev1416__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.
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/PKG-INFO +1 -1
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/pyproject.toml +1 -1
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/resources/MRP.md +2 -2
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/resources/config/prompts/debugger.md +2 -2
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/resources/templates/ARCHITECTURE.md +2 -2
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/resources/templates/PROJECT.md +1 -1
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/resources/templates/ci.md +1 -1
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/resources/templates/makefile.md +35 -36
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/.gitignore +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/LICENSE +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/README.md +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/__main__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/inbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/inbound/cli_formatter.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/inbound/cli_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/inbound/session_cli_handlers.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/inbound/textual_plan_reviewer.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_app.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_editor.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_execution.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_logic.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_previews.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_widgets.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/outbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/outbound/console_interactor.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/outbound/console_interactor_ask_loop.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/outbound/console_interactor_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/outbound/console_tooling.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/outbound/filesystem_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/outbound/litellm_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/outbound/local_file_system_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/outbound/openrouter_hydrator.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/outbound/shell_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/outbound/shell_command_builder.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/outbound/suppressed_logging.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/outbound/system_environment_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/outbound/system_environment_inspector.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/outbound/system_time_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/outbound/terminal_quit_key_listener.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/outbound/web_scraper_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/outbound/web_searcher_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/outbound/yaml_config_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/container.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/domain/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/domain/models/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/domain/models/action_ports.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/domain/models/change_set.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/domain/models/config_schema.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/domain/models/drift_report.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/domain/models/exceptions.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/domain/models/execution_report.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/domain/models/orchestrator_ports.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/domain/models/plan.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/domain/models/planning_ports.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/domain/models/project_context.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/domain/models/report_assembly_data.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/domain/models/session.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/domain/models/shell_output.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/domain/models/web_search_results.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/inbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/inbound/edit_simulator.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/inbound/get_context_use_case.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/inbound/init.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/inbound/plan_parser.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/inbound/plan_reviewer.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/inbound/plan_validator.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/inbound/planning_use_case.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/inbound/run_plan_use_case.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/outbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/outbound/config_service.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/outbound/environment_inspector.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/outbound/execution_report_assembler.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/outbound/file_system_manager.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/outbound/llm_client.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/outbound/markdown_report_formatter.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/outbound/prompt_manager.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/outbound/quit_key_listener.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/outbound/repo_tree_generator.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/outbound/session_loop_guard.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/outbound/session_manager.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/outbound/session_repository.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/outbound/shell_executor.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/outbound/system_environment.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/outbound/time_service.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/outbound/user_interactor.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/outbound/web_scraper.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/outbound/web_searcher.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/action_changeset_builder.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/action_diff_manager.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/action_dispatcher.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/action_executor.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/action_factory.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/action_parser_complex.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/action_parser_strategies.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/context_service.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/edit_simulator.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/execution_orchestrator.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/execution_report_assembler.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/init_service.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/markdown_plan_parser.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/markdown_report_formatter.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/parser_infrastructure.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/parser_metadata.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/parser_reporting.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/plan_validator.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/planning_service.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/prompt_manager.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/session_lifecycle_manager.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/session_loop_guard.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/session_orchestrator.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/session_planner.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/session_pruning_service.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/session_replanner.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/session_repository.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/session_service.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/templates/execution_report.md.j2 +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/update_checker.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/validation_rules/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/validation_rules/edit.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/validation_rules/edit_matcher.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/validation_rules/edit_matcher_heuristics.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/validation_rules/execute.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/validation_rules/filesystem.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/validation_rules/helpers.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/validation_rules/message.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/utils/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/utils/diff.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/utils/editor_names.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/utils/interrupt_guard.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/utils/interruptible_call.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/utils/io.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/utils/markdown.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/utils/paths.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/utils/serialization.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/utils/session_notices.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/utils/stdin_ownership.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/utils/string.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/utils/terminal.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/prompts.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/registries/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/registries/infrastructure.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/registries/reviewer.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/registries/validators.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/resources/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/resources/config/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/resources/config/config.yaml +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/resources/config/init.context +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/resources/config/prompts/architect.md +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/resources/config/prompts/assistant.md +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/resources/config/prompts/developer.md +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/resources/config/prompts/pathfinder.md +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/resources/config/prompts/prototyper.md +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/resources/templates/case-file.md +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/resources/templates/component-design.md +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/resources/templates/milestone.md +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/resources/templates/pre-commit.md +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/resources/templates/specification-document.md +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/resources/templates/vertical-slice.md +0 -0
|
@@ -64,10 +64,10 @@ The entire commit cycle (test, stage, commit) MUST occur in a dedicated Version
|
|
|
64
64
|
|
|
65
65
|
1. Pre-conditions: Clean up temporary files. If recurring script, test, or tool detritus appears, do not just delete it manually: update `.gitignore` or configure the script to write outside tracked directories. If unsure of changes, inspect via `EXECUTE git add . && git diff HEAD`.
|
|
66
66
|
2. Commit Message: Use Conventional Commits `"<type>(<scope>): <description>"` in double quotes (imperative mood; plain text without backticks, quotes, or `$`; append `!` for breaking changes) on a single line.
|
|
67
|
-
3. Execution: Run `make commit "<type>(<scope>): <description>"`. This stages all local changes (`git add .`) and runs Git's local hooks before committing.
|
|
67
|
+
3. Execution: Run `make commit MSG="<type>(<scope>): <description>"`. This stages all local changes (`git add .`) and runs Git's local hooks before committing.
|
|
68
68
|
4. Post-conditions: All tests MUST pass: the post-commit hook reverts automatically on failure and cannot be bypassed.
|
|
69
69
|
5. Push at Conclusion: In the Conclusion phase, if a remote is configured, run `make push`.
|
|
70
|
-
6. CI Monitoring: If remote CI is configured and a push occurred, run `make ci-watch` to monitor workflow runs and to inspect results: use `make logs
|
|
70
|
+
6. CI Monitoring: If remote CI is configured and a push occurred, run `make ci-watch` to monitor workflow runs and to inspect results: use `make logs RUN=<run-id>` (or `make logs RUN=<run-id> STEP="<step-name>"`) for full logs.
|
|
71
71
|
|
|
72
72
|
### Standardized Plan Types
|
|
73
73
|
|
|
@@ -14,7 +14,7 @@ Follow these phases and steps in order. Keep track of your progress in your Stat
|
|
|
14
14
|
1. **Case File Check:**
|
|
15
15
|
If a Case File was not provided in the initial context, CREATE one following the case file template and path conventions.
|
|
16
16
|
2. **Context and History Gathering:**
|
|
17
|
-
Use EXECUTE `git grep`, EXECUTE `git log`, READ, and RESEARCH to understand the codebase, recent changes, and identify the last known green CI run or commit. For historical CI failures, do not try to read the entire log: extract failed step logs by executing `make logs [ID]` (for all failed steps) or `make logs [ID] "[STEP_NAME]"` (for a specific step).
|
|
17
|
+
Use EXECUTE `git grep`, EXECUTE `git log`, READ, and RESEARCH to understand the codebase, recent changes, and identify the last known green CI run or commit. For historical CI failures, do not try to read the entire log: extract failed step logs by executing `make logs RUN=[ID]` (for all failed steps) or `make logs RUN=[ID] STEP="[STEP_NAME]"` (for a specific step).
|
|
18
18
|
3. **Diagnostic MRE and Platform Check:**
|
|
19
19
|
Trigger the symptom: if an existing command, test, or CI failure exists, execute it to observe the failure live. If the bug is reported verbally or without an existing test, write a targeted probe script in `spikes/debug/{scope-slug}/` to trigger the symptom.
|
|
20
20
|
|
|
@@ -26,7 +26,7 @@ Follow these phases and steps in order. Keep track of your progress in your Stat
|
|
|
26
26
|
- **Probe file:**
|
|
27
27
|
consolidate diagnostic logic into the single shell entry point `spikes/debug/probe.sh` following the Makefile template pattern. Output must be written to `spikes/debug/probe_output.txt` for artifact upload, using the single-file Heredoc pattern.
|
|
28
28
|
- **Execution:**
|
|
29
|
-
use `make probe "<reason>"` to push the probe, trigger the workflow, and retrieve logs.
|
|
29
|
+
use `make probe REASON="<reason>"` to push the probe, trigger the workflow, and retrieve logs.
|
|
30
30
|
|
|
31
31
|
### Investigation
|
|
32
32
|
**Goal:** Peel back internal layers to resolve discrepancies and update the Causal Model.
|
|
@@ -14,13 +14,13 @@ This section defines foundational engineering practices. Each entry MUST be a sp
|
|
|
14
14
|
- **Runtime Contract Assertions:** Enforce Design-by-Contract with native `assert condition, "message"` for pre/post-conditions and invariants (strippable via `python -O`); never custom exceptions for contract checks.
|
|
15
15
|
- **Dependency Injection:** Constructor injection mandate; forbid Service Locator and global containers.
|
|
16
16
|
- **Centralized Configuration:** Config file location, prohibition of magic numbers.
|
|
17
|
-
- **Continuous Integration & Remote Diagnostics:** Parallel CI jobs: 1) Blocking OS matrix test suite. 2) Non-blocking (`continue-on-error: true`) quality checks running fast formatters, linters, security scanners, type checkers, and repository-wide structural checks. Platform-specific and CI-only issues are investigated via the Remote Probing Protocol (`make probe
|
|
17
|
+
- **Continuous Integration & Remote Diagnostics:** Parallel CI jobs: 1) Blocking OS matrix test suite. 2) Non-blocking (`continue-on-error: true`) quality checks running fast formatters, linters, security scanners, type checkers, and repository-wide structural checks. Platform-specific and CI-only issues are investigated via the Remote Probing Protocol (`make probe REASON="<reason>"`). See [docs/templates/ci.md](docs/templates/ci.md).
|
|
18
18
|
- **Local Quality Gates (Pre-commit & Post-commit):** Local pre-commit hooks MUST stay fast, checking only staged files (formatters, secret detection, merge conflict markers). Heavy, false-positive-prone checks run non-blocking in CI. The full test suite runs via the post-commit hook (`.githooks/post-commit.py`) as an unskippable safety net, reverting automatically on failure. See [docs/templates/pre-commit.md](docs/templates/pre-commit.md).
|
|
19
19
|
- **Diagnostic Instrumentation:** High-value diagnostics MUST use zero-cost language-native dead-code elimination (e.g. `if __debug__:`) and Composition Root toggles; mid-logic environment checks are forbidden.
|
|
20
20
|
- **Experimental Code:** The `spikes/` directory is reserved for rapid, isolated experimentation (`debug/`, `prototypes/`, `showcases/`) and is explicitly excluded from all quality gates (linters, type checkers, test suites).
|
|
21
21
|
- **Directory Conventions:**
|
|
22
22
|
`docs/architecture/BOUNDARY/LAYER/TYPE/name.md` -> Source path: `src/{pkg}/BOUNDARY/LAYER/TYPE/name.ext` -> Test path: `tests/suites/TEST_TYPE/BOUNDARY/LAYER/TYPE/test_name.ext`
|
|
23
|
-
- **Makefile Commands:** The `Makefile` is the canonical entry point for the version control workflow and on-demand test runs: `make test` (full suite), `make commit
|
|
23
|
+
- **Makefile Commands:** The `Makefile` is the canonical entry point for the version control workflow and on-demand test runs: `make test` (full suite), `make commit MSG="<msg>"` (local commit with advisory auto-fix and unskippable post-commit test gate), `make push` (rebase and push), `make ci-watch` (CI monitoring), and `make probe REASON="<reason>"` (Remote Probing Protocol). See [docs/templates/makefile.md](docs/templates/makefile.md).
|
|
24
24
|
|
|
25
25
|
## Ubiquitous Language
|
|
26
26
|
|
|
@@ -24,7 +24,7 @@ Defines the high-level artifact lifecycle and conventions for project management
|
|
|
24
24
|
- **Milestone 0 (bootstrapping) & Ad-hoc work (not tied to a milestone):** `00-NN-name.md` (in `docs/project/slices/`) — `00` is used as the Milestone prefix for Milestone 0 bootstrapping slices and for ad-hoc slices. Ad-hoc slices are NOT tracked in Milestone documents or the Roadmap.
|
|
25
25
|
- **Archiving Policy:** When and how completed artifacts are archived or deleted.
|
|
26
26
|
- **Spec Organization:** Specification documents live in a single flat directory `docs/project/specs/` and are reserved strictly for **permanent system invariants** — formats, contracts, protocols (e.g. the MRP), core data models, and non-negotiable architectural rules. Feature goals, requirements, and acceptance criteria belong in Milestone documents (`docs/project/milestones/`), not in specs.
|
|
27
|
-
- **Build & Run Commands:** Document the standard commands in the project `Makefile` (see [docs/templates/makefile.md](docs/templates/makefile.md)). At minimum: `make test` (full suite), `make commit
|
|
27
|
+
- **Build & Run Commands:** Document the standard commands in the project `Makefile` (see [docs/templates/makefile.md](docs/templates/makefile.md)). At minimum: `make test` (full suite), `make commit MSG="<msg>"`, `make push`, `make ci-watch` (CI monitoring), and `make probe REASON="<reason>"` (Remote Probing Protocol).
|
|
28
28
|
- **Release Process:** Document how releases are cut. At minimum: (1) **Triage** the scope (patch/minor/major) from conventional commits since the last tag; (2) write **release notes** to `docs/project/releases/v<version>.md`; (3) bump the `version` field in the project manifest; (4) present the notes and version bump at an **approval gate**; (5) **commit** (`chore(release): bump version to <version>`) and **tag** (`git tag -a v<version>`); and (6) **publish** (e.g. create a GitHub Release). Adapt the concrete commands to the project's packaging and distribution channel.
|
|
29
29
|
|
|
30
30
|
## Templates
|
{teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/resources/templates/ci.md
RENAMED
|
@@ -162,7 +162,7 @@ jobs:
|
|
|
162
162
|
|
|
163
163
|
### How to use it
|
|
164
164
|
1. Create a probe script at `spikes/debug/remote_probe.sh` containing diagnostic logic.
|
|
165
|
-
2. Commit and push via: `make probe
|
|
165
|
+
2. Commit and push via: `make probe REASON="reason for probing"`
|
|
166
166
|
3. The Makefile will: push the probe → trigger the workflow → wait for completion → retrieve logs.
|
|
167
167
|
|
|
168
168
|
### Prerequisites
|
|
@@ -9,11 +9,18 @@ and the Debugger's Remote Probing Protocol (RPP). Below are concrete examples ad
|
|
|
9
9
|
|
|
10
10
|
### Commit
|
|
11
11
|
```shell
|
|
12
|
-
make commit "feat(templates): add PROJECT.md template"
|
|
12
|
+
make commit MSG="feat(templates): add PROJECT.md template"
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
**What is `.PHONY`?**
|
|
16
|
-
`.PHONY` is a Makefile directive that declares `commit`, `push`, `ci-watch`, `probe`, `test`, `logs`, and the internal `_preflight` gate as phony targets — they do not correspond to actual files. Without `.PHONY`, if a file named `commit` or `probe` existed in the directory (e.g., a script called `commit`), Make would see it as up-to-date and skip the target entirely. By declaring them phony, Make always runs the recipe when you call `make commit`, `make push`, `make ci-watch`, `make probe`, or `make test`.
|
|
16
|
+
`.PHONY` is a Makefile directive that declares `commit`, `push`, `ci-watch`, `probe`, `test`, `logs`, `help`, and the internal `_preflight` gate as phony targets — they do not correspond to actual files. Without `.PHONY`, if a file named `commit` or `probe` existed in the directory (e.g., a script called `commit`), Make would see it as up-to-date and skip the target entirely. By declaring them phony, Make always runs the recipe when you call `make commit`, `make push`, `make ci-watch`, `make probe`, or `make test`.
|
|
17
|
+
|
|
18
|
+
### Help
|
|
19
|
+
```shell
|
|
20
|
+
make
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
The default goal is `help`, so a bare `make` prints the target list. An unknown goal aborts with its own name instead of an "up to date" line.
|
|
17
24
|
|
|
18
25
|
### Push
|
|
19
26
|
```shell
|
|
@@ -38,7 +45,7 @@ make test
|
|
|
38
45
|
|
|
39
46
|
### Probe
|
|
40
47
|
```shell
|
|
41
|
-
make probe "investigate windows path handling"
|
|
48
|
+
make probe REASON="investigate windows path handling"
|
|
42
49
|
```
|
|
43
50
|
|
|
44
51
|
**Why does `probe` need a reason?**
|
|
@@ -46,12 +53,12 @@ The Remote Probing Protocol requires a reason string because it is passed as the
|
|
|
46
53
|
|
|
47
54
|
### Logs
|
|
48
55
|
```shell
|
|
49
|
-
make logs 12345
|
|
50
|
-
make logs 12345 "Run tests" # extract logs for a specific step (substring match)
|
|
56
|
+
make logs RUN=12345 # extract logs for ALL failed steps
|
|
57
|
+
make logs RUN=12345 STEP="Run tests" # extract logs for a specific step (substring match)
|
|
51
58
|
```
|
|
52
59
|
|
|
53
60
|
**How does `make logs` work?**
|
|
54
|
-
The
|
|
61
|
+
The `RUN` value is the GitHub Actions run ID (as shown by `gh run list`). If `STEP` is omitted, it extracts and formats logs for **all failed steps** using `gh run view --log-failed`. An optional `STEP` value filters down to a specific step using substring matching, stripping ANSI escapes and GitHub boilerplate so you see the failure without noise. See [CI Log Extraction](#ci-log-extraction).
|
|
55
62
|
|
|
56
63
|
## Probe Script
|
|
57
64
|
|
|
@@ -85,13 +92,14 @@ EOF
|
|
|
85
92
|
Always use GNU Make native features for cross-platform compatibility instead of shell-specific constructs:
|
|
86
93
|
|
|
87
94
|
- **Native argument validation:** Use `$(if $(strip $(VAR)),,$(error Usage: ...))` instead of POSIX `[ -n "$$VAR" ]`. GNU Make validates parameters before spawning any shell process.
|
|
88
|
-
- **
|
|
95
|
+
- **Named inputs instead of positional goals:** Pass values as `NAME="value"`, as in `make commit MSG="feat(scope): add thing"`. GNU Make treats a command-line assignment as a variable, so no word of the value can become a goal. Positional capture through `$(MAKECMDGOALS)` is forbidden, because a word that names a real target executes that target.
|
|
96
|
+
- **Parse-time goal validation:** Compare `$(MAKECMDGOALS)` against a `_KNOWN_GOALS` list and abort with `$(error ...)` when a goal is unknown or when more than one goal is present. The check runs while Make reads the file, so no recipe line can run first.
|
|
89
97
|
- **POSIX shell preflight:** Every POSIX recipe target (`ci-watch`, `probe`, `logs`) depends on the internal `_preflight` target, which verifies `git`, `gh`, `awk`, and `sed` before any network call. It aborts with one actionable message instead of a generic `make: *** Error 1`.
|
|
90
98
|
- **Shell routing for Bash-only commands:** Make spawns a recipe line directly when the line carries no shell metacharacter. That direct spawn bypasses `SHELL`. On Windows it fails for Git Bash-only programs such as `sleep` and for shell builtins such as `echo`. Keep these commands inside a shell block that carries `;`, `&&`, or a variable expansion.
|
|
91
99
|
- **Windows shell selection:** Set `SHELL := bash.exe` when `OS` is `Windows_NT` so multi-line shell pipelines (`ci-watch`, `probe`, `logs`) execute through Git Bash. `_preflight` also confirms that the shell is Git Bash rather than the WSL `bash.exe` shim, and it names the `SHELL=` override when it is not.
|
|
92
100
|
- **Portable quoting:** Pass values with double quotes, as in `--field reason="..."`, because Windows `cmd.exe` keeps single quotes literally.
|
|
93
101
|
- **ASCII-only output:** Recipe output stays ASCII, because a Windows console turns a non-ASCII dash into mojibake in captured logs.
|
|
94
|
-
- **
|
|
102
|
+
- **Explicit advisory fallback:** The advisory pre-commit pass consumes its own exit code with `|| echo "<sentence>"`, so a failing run prints one plain sentence. Make's `-` prefix is forbidden here, because it prints a bare `Error 1 (ignored)` line that reads as an unexplained defect.
|
|
95
103
|
- **Error transparency:** The first pre-commit pass is advisory, so its non-zero exit is ignored and auto-fixed files are re-staged. Git then runs the same hooks again during `git commit`, and that second run is the blocking local gate. A hook failure there aborts the commit. The post-commit test gate is the final safety net. `make push` runs `git pull --rebase` and `git push` without suppression, so a rebase conflict or push rejection surfaces as a non-zero exit.
|
|
96
104
|
|
|
97
105
|
## Test Workflow
|
|
@@ -118,25 +126,22 @@ test:
|
|
|
118
126
|
### Example
|
|
119
127
|
|
|
120
128
|
```makefile
|
|
121
|
-
commit: ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
|
|
122
|
-
|
|
123
129
|
commit:
|
|
124
|
-
$(if $(strip $(
|
|
130
|
+
$(if $(strip $(MSG)),,$(error Usage: make commit MSG="<type>(<scope>): <description>"))
|
|
125
131
|
git add .
|
|
126
|
-
|
|
132
|
+
@uv run pre-commit run || echo "Advisory pre-commit reported issues. Auto-fixed files were re-staged and the commit continues."
|
|
127
133
|
git add .
|
|
128
|
-
git commit -m "$(
|
|
134
|
+
git commit -m "$(MSG)"
|
|
129
135
|
|
|
130
|
-
# Empty recipe absorbs extra arguments without invoking a subshell.
|
|
131
|
-
%: ;
|
|
132
136
|
```
|
|
133
137
|
|
|
134
138
|
**Usage:**
|
|
135
|
-
- `make commit
|
|
139
|
+
- `make commit MSG="feat(templates): add PROJECT.md template"`
|
|
136
140
|
|
|
137
|
-
**Message-input contract:** the
|
|
141
|
+
**Message-input contract:** the message arrives in the named variable `MSG`, so its words are data and never goals. Supported input:
|
|
138
142
|
|
|
139
|
-
- ✅ **Single-line Conventional Commits in double quotes survive verbatim** — e.g. `make commit "feat(scope): add thing"`. Always use double quotes across all operating systems.
|
|
143
|
+
- ✅ **Single-line Conventional Commits in double quotes survive verbatim** — e.g. `make commit MSG="feat(scope): add thing"`. Always use double quotes across all operating systems.
|
|
144
|
+
- ✅ **`#` survives** — Make keeps the character inside a quoted command-line value, so `MSG="fix: close #42"` commits that subject.
|
|
140
145
|
- ❌ **`$VAR` is swallowed or expanded** — `make` and shells expand `$(...)`/`$X`; avoid `$`.
|
|
141
146
|
- ❌ **Backticks trigger command substitution** in POSIX shells when inside double quotes; avoid backticks.
|
|
142
147
|
- ❌ **Multiline messages fail hard** (`unexpected EOF`).
|
|
@@ -169,7 +174,7 @@ The pushed RUN's own conclusion is authoritative: it already folds in `continue-
|
|
|
169
174
|
- **all green / non-blocking** → PASSED → **exit 0**.
|
|
170
175
|
- **job-less base** → NOT green: a base run that exists but carries zero jobs (an invalid-workflow failure) is treated as an unknown base and fails safe (block).
|
|
171
176
|
|
|
172
|
-
When any step fails — blocking or not — the target prints the failing step's name and its run id, then that step's log details (ANSI/timestamp-stripped and indented), bounded to `DETAIL_LINES` lines (default 50), and points to `make logs
|
|
177
|
+
When any step fails — blocking or not — the target prints the failing step's name and its run id, then that step's log details (ANSI/timestamp-stripped and indented), bounded to `DETAIL_LINES` lines (default 50), and points to `make logs RUN=<run-id> STEP="<step-name>"` for the full step log when needed.
|
|
173
178
|
|
|
174
179
|
Attribution is deterministic: SHA → run → run-level + per-job conclusion (never "the latest run").
|
|
175
180
|
|
|
@@ -229,8 +234,8 @@ ci-watch: _preflight
|
|
|
229
234
|
if [ -n "$$NEWSTEPS" ]; then \
|
|
230
235
|
echo "$$WF: failing step(s): $$NEWSTEPS (run $$NEW)"; \
|
|
231
236
|
gh run view "$$NEW" --log-failed 2>/dev/null | awk -F'\t' '{ l=$$3; p=index(l,"Z "); if(p>0)l=substr(l,p+2); gsub(/\x1B\[[0-9;]*[a-zA-Z]/,"",l); gsub(/\^\[\[[0-9;]*[a-zA-Z]/,"",l); if(l ~ /^##\[group\]/ || l ~ /^##\[endgroup\]/) next; gsub(/^##\[error\]/,"Error: ",l); print l }' | tail -n $(DETAIL_LINES) | sed 's/^/ /'; \
|
|
232
|
-
echo " view all failed logs: make logs
|
|
233
|
-
echo " view specific step: make logs
|
|
237
|
+
echo " view all failed logs: make logs RUN=$$NEW"; \
|
|
238
|
+
echo " view specific step: make logs RUN=$$NEW STEP=\"<step-name>\""; \
|
|
234
239
|
fi; \
|
|
235
240
|
if [ "$$NEWCONC" = "success" ]; then \
|
|
236
241
|
if [ -n "$$NEWFAIL" ]; then \
|
|
@@ -294,11 +299,10 @@ ci-watch: _preflight
|
|
|
294
299
|
### Example
|
|
295
300
|
|
|
296
301
|
```makefile
|
|
297
|
-
probe: REASON := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
|
|
298
302
|
probe: _preflight
|
|
299
303
|
|
|
300
304
|
probe:
|
|
301
|
-
$(if $(strip $(REASON)),,$(error Usage: make probe
|
|
305
|
+
$(if $(strip $(REASON)),,$(error Usage: make probe REASON="<reason>"))
|
|
302
306
|
git add -f spikes/debug/probe.sh
|
|
303
307
|
git commit -m "debug: probe" --no-verify --allow-empty
|
|
304
308
|
git push
|
|
@@ -321,7 +325,7 @@ probe:
|
|
|
321
325
|
cat spikes/debug/probe_output.txt 2>/dev/null || echo "(no output file)"
|
|
322
326
|
```
|
|
323
327
|
|
|
324
|
-
**Usage:** `make probe
|
|
328
|
+
**Usage:** `make probe REASON="investigate windows path handling"`
|
|
325
329
|
|
|
326
330
|
`make probe` resolves the dispatched run by the pushed SHA inside a bounded retry loop. It reuses `RETRY_POLLS` and `RETRY_SLEEP` from the CI watch section. The dispatch, the run resolution, the watch, and the download stay in one shell block, because a metacharacter-free line would bypass the recipe shell on Windows. The target rejects the probe with a stderr reason when no run registers for that SHA, so a stale run can never be mistaken for the new probe.
|
|
327
331
|
|
|
@@ -332,27 +336,22 @@ The Debugger's Reproduction phase needs to read CI logs without drowning in the
|
|
|
332
336
|
### Example
|
|
333
337
|
|
|
334
338
|
```makefile
|
|
335
|
-
logs: LOGS_RUN := $(word 2,$(MAKECMDGOALS))
|
|
336
|
-
logs: LOGS_STEP := $(wordlist 3,99,$(MAKECMDGOALS))
|
|
337
|
-
|
|
338
339
|
logs:
|
|
339
|
-
$(if $(strip $(
|
|
340
|
-
@if [ -z "$(
|
|
341
|
-
gh run view "$(
|
|
340
|
+
$(if $(strip $(RUN)),,$(error Usage: make logs RUN=<run-id> [STEP="<step-name>"]))
|
|
341
|
+
@if [ -z "$(STEP)" ]; then \
|
|
342
|
+
gh run view "$(RUN)" --log-failed 2>/dev/null | awk -F'\t' '{ if(j!=$$1||s!=$$2){j=$$1;s=$$2;print "\n["j" > "s"]"} l=$$3; p=index(l,"Z "); if(p>0)l=substr(l,p+2); gsub(/\x1B\[[0-9;]*[a-zA-Z]/,"",l); gsub(/\^\[\[[0-9;]*[a-zA-Z]/,"",l); if(l ~ /^##\[group\]Run /){k=1;next} if(k && l ~ /^##\[endgroup\]/){k=0;next} if(k)next; if(l ~ /^##\[group\]/ || l ~ /^##\[endgroup\]/)next; gsub(/^##\[error\]/,"Error: ",l); print l }'; \
|
|
342
343
|
else \
|
|
343
|
-
gh run view "$(
|
|
344
|
+
gh run view "$(RUN)" --log 2>/dev/null | awk -F'\t' -v step="$(STEP)" 'index($$2, step) > 0 { if(j!=$$1||s!=$$2){j=$$1;s=$$2;print "\n["j" > "s"]"} l=$$3; p=index(l,"Z "); if(p>0)l=substr(l,p+2); gsub(/\x1B\[[0-9;]*[a-zA-Z]/,"",l); gsub(/\^\[\[[0-9;]*[a-zA-Z]/,"",l); if(l ~ /^##\[group\]Run /){k=1;next} if(k && l ~ /^##\[endgroup\]/){k=0;next} if(k)next; if(l ~ /^##\[group\]/ || l ~ /^##\[endgroup\]/)next; gsub(/^##\[error\]/, "Error: ", l); print l }'; \
|
|
344
345
|
fi
|
|
345
346
|
|
|
346
|
-
# Empty recipe absorbs extra arguments without invoking a subshell.
|
|
347
|
-
%: ;
|
|
348
347
|
```
|
|
349
348
|
|
|
350
349
|
**Usage:**
|
|
351
|
-
- `make logs 12345` — extract logs for ALL failed steps from run `12345`.
|
|
352
|
-
- `make logs 12345 "Run tests"` — extract logs for a specific step (substring match) from run `12345`.
|
|
350
|
+
- `make logs RUN=12345` — extract logs for ALL failed steps from run `12345`.
|
|
351
|
+
- `make logs RUN=12345 STEP="Run tests"` — extract logs for a specific step (substring match) from run `12345`.
|
|
353
352
|
|
|
354
353
|
**How it works:**
|
|
355
|
-
-
|
|
354
|
+
- `RUN` carries the run ID and `STEP` carries the optional step name. Both arrive as command-line variables, so neither can become a goal.
|
|
356
355
|
- When no step name is provided, `gh run view --log-failed` is used so only failed steps are fetched and printed with `[job > step]` headers.
|
|
357
356
|
- When a step name is supplied, `index($2, step) > 0` performs substring matching against column 2.
|
|
358
357
|
- Timestamps and ANSI escapes are stripped, and `##[error]` lines are prefixed with `Error: `.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/adapters/__init__.py
RENAMED
|
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
|
{teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/domain/__init__.py
RENAMED
|
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
|
{teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/domain/models/plan.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/ports/inbound/init.py
RENAMED
|
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
|
{teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/services/__init__.py
RENAMED
|
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
|
{teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/utils/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/utils/editor_names.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/utils/markdown.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/utils/paths.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/utils/serialization.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/utils/string.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/core/utils/terminal.py
RENAMED
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/registries/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/registries/reviewer.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/registries/validators.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1416}/src/teddy_executor/resources/__init__.py
RENAMED
|
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
|