teddy-cli 0.1.17.dev1415__tar.gz → 0.1.17.dev1418__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.dev1418}/PKG-INFO +1 -1
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/pyproject.toml +1 -1
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/resources/MRP.md +3 -3
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/resources/config/prompts/debugger.md +2 -2
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/resources/templates/ARCHITECTURE.md +2 -2
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/resources/templates/PROJECT.md +1 -1
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/resources/templates/ci.md +1 -1
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/resources/templates/makefile.md +57 -37
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/.gitignore +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/LICENSE +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/README.md +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/__main__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/inbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/inbound/cli_formatter.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/inbound/cli_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/inbound/session_cli_handlers.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/inbound/textual_plan_reviewer.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_app.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_editor.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_execution.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_logic.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_previews.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_widgets.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/outbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/outbound/console_interactor.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/outbound/console_interactor_ask_loop.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/outbound/console_interactor_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/outbound/console_tooling.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/outbound/filesystem_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/outbound/litellm_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/outbound/local_file_system_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/outbound/openrouter_hydrator.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/outbound/shell_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/outbound/shell_command_builder.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/outbound/suppressed_logging.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/outbound/system_environment_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/outbound/system_environment_inspector.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/outbound/system_time_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/outbound/terminal_quit_key_listener.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/outbound/web_scraper_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/outbound/web_searcher_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/adapters/outbound/yaml_config_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/container.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/domain/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/domain/models/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/domain/models/action_ports.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/domain/models/change_set.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/domain/models/config_schema.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/domain/models/drift_report.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/domain/models/exceptions.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/domain/models/execution_report.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/domain/models/orchestrator_ports.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/domain/models/plan.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/domain/models/planning_ports.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/domain/models/project_context.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/domain/models/report_assembly_data.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/domain/models/session.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/domain/models/shell_output.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/domain/models/web_search_results.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/ports/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/ports/inbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/ports/inbound/edit_simulator.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/ports/inbound/get_context_use_case.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/ports/inbound/init.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/ports/inbound/plan_parser.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/ports/inbound/plan_reviewer.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/ports/inbound/plan_validator.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/ports/inbound/planning_use_case.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/ports/inbound/run_plan_use_case.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/ports/outbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/ports/outbound/config_service.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/ports/outbound/environment_inspector.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/ports/outbound/execution_report_assembler.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/ports/outbound/file_system_manager.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/ports/outbound/llm_client.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/ports/outbound/markdown_report_formatter.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/ports/outbound/prompt_manager.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/ports/outbound/quit_key_listener.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/ports/outbound/repo_tree_generator.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/ports/outbound/session_loop_guard.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/ports/outbound/session_manager.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/ports/outbound/session_repository.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/ports/outbound/shell_executor.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/ports/outbound/system_environment.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/ports/outbound/time_service.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/ports/outbound/user_interactor.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/ports/outbound/web_scraper.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/ports/outbound/web_searcher.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/action_changeset_builder.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/action_diff_manager.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/action_dispatcher.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/action_executor.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/action_factory.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/action_parser_complex.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/action_parser_strategies.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/context_service.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/edit_simulator.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/execution_orchestrator.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/execution_report_assembler.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/init_service.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/markdown_plan_parser.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/markdown_report_formatter.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/parser_infrastructure.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/parser_metadata.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/parser_reporting.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/plan_validator.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/planning_service.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/prompt_manager.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/session_lifecycle_manager.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/session_loop_guard.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/session_orchestrator.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/session_planner.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/session_pruning_service.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/session_replanner.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/session_repository.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/session_service.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/templates/execution_report.md.j2 +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/update_checker.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/validation_rules/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/validation_rules/edit.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/validation_rules/edit_matcher.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/validation_rules/edit_matcher_heuristics.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/validation_rules/execute.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/validation_rules/filesystem.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/validation_rules/helpers.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/services/validation_rules/message.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/utils/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/utils/diff.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/utils/editor_names.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/utils/interrupt_guard.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/utils/interruptible_call.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/utils/io.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/utils/markdown.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/utils/paths.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/utils/serialization.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/utils/session_notices.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/utils/stdin_ownership.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/utils/string.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/utils/terminal.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/prompts.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/registries/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/registries/infrastructure.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/registries/reviewer.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/registries/validators.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/resources/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/resources/config/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/resources/config/config.yaml +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/resources/config/init.context +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/resources/config/prompts/architect.md +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/resources/config/prompts/assistant.md +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/resources/config/prompts/developer.md +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/resources/config/prompts/pathfinder.md +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/resources/config/prompts/prototyper.md +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/resources/templates/case-file.md +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/resources/templates/component-design.md +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/resources/templates/milestone.md +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/resources/templates/pre-commit.md +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/resources/templates/specification-document.md +0 -0
- {teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/resources/templates/vertical-slice.md +0 -0
|
@@ -56,7 +56,7 @@ Every EXECUTE action runs in a fresh subshell rooted at the project root (CWD).
|
|
|
56
56
|
|
|
57
57
|
### Information Gathering Workflow
|
|
58
58
|
|
|
59
|
-
If you are missing information critical to your immediate goal, gather it efficiently without getting sidetracked. You can chain multiple discovery actions in one turn. Discover locally via `EXECUTE` (`git grep`) and externally via `RESEARCH`. Never rely on search snippets; always `READ` target URLs. For opaque sources (JavaScript-rendered pages, PDFs, binary formats) where `READ` fails or yields unusable content, `CREATE` and `EXECUTE` a minimal extraction script to inspect the raw data or API. If static reading leaves behavioral ambiguity, validate assumptions via a minimal spike in `spikes/`. Check flags with `[tool] --help` before running complex CLI commands.
|
|
59
|
+
If you are missing information critical to your immediate goal, gather it efficiently without getting sidetracked. You can chain multiple discovery actions in one turn. Discover locally via `EXECUTE` (`git grep`) and externally via `RESEARCH`. Never rely on search snippets; always `READ` target URLs. For opaque sources (JavaScript-rendered pages, PDFs, binary formats) where `READ` fails or yields unusable content, `CREATE` and `EXECUTE` a minimal extraction script to inspect the raw data or API. If static reading leaves behavioral ambiguity, validate assumptions via a minimal spike in `spikes/`. Check flags with `[tool] --help` before running complex CLI commands. To read CI logs, use `make logs RUN=<run-id>` for all failed steps, or `make logs RUN=<run-id> STEP="<step-name>"` for one step.
|
|
60
60
|
|
|
61
61
|
### Version Control
|
|
62
62
|
|
|
@@ -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
|
|
70
|
+
6. CI Monitoring: If remote CI is configured and a push occurred, run `make ci-watch` to monitor workflow runs. If needed inspect details using `make 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
|
|
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 pull the failed step logs.
|
|
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.dev1418}/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
|
|
|
@@ -84,16 +91,39 @@ EOF
|
|
|
84
91
|
|
|
85
92
|
Always use GNU Make native features for cross-platform compatibility instead of shell-specific constructs:
|
|
86
93
|
|
|
87
|
-
- **
|
|
88
|
-
- **
|
|
89
|
-
- **
|
|
94
|
+
- **Required input validation:** Reject a missing required input in a parse-time block, not in the recipe. Make runs the check while it reads the file, so it aborts before any prerequisite and before any shell process starts. See [Parse-Time Input Validation](#parse-time-input-validation).
|
|
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.
|
|
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`. A missing required input aborts at parse time, before the tool gate runs.
|
|
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
|
|
|
105
|
+
### Parse-Time Input Validation
|
|
106
|
+
|
|
107
|
+
A required input is rejected while Make reads the file, so the check runs before any prerequisite and before any shell process starts. A recipe-level check is forbidden, because it runs after the `_preflight` prerequisite.
|
|
108
|
+
|
|
109
|
+
```makefile
|
|
110
|
+
ifneq ($(filter commit,$(MAKECMDGOALS)),)
|
|
111
|
+
ifeq ($(strip $(MSG)),)
|
|
112
|
+
$(error Usage: make commit MSG="<type>(<scope>): <description>")
|
|
113
|
+
endif
|
|
114
|
+
endif
|
|
115
|
+
ifneq ($(filter probe,$(MAKECMDGOALS)),)
|
|
116
|
+
ifeq ($(strip $(REASON)),)
|
|
117
|
+
$(error Usage: make probe REASON="<reason>")
|
|
118
|
+
endif
|
|
119
|
+
endif
|
|
120
|
+
ifneq ($(filter logs,$(MAKECMDGOALS)),)
|
|
121
|
+
ifeq ($(strip $(RUN)),)
|
|
122
|
+
$(error Usage: make logs RUN=<run-id> [STEP="<step-name>"])
|
|
123
|
+
endif
|
|
124
|
+
endif
|
|
125
|
+
```
|
|
126
|
+
|
|
97
127
|
## Test Workflow
|
|
98
128
|
|
|
99
129
|
### Example
|
|
@@ -118,25 +148,21 @@ test:
|
|
|
118
148
|
### Example
|
|
119
149
|
|
|
120
150
|
```makefile
|
|
121
|
-
commit: ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
|
|
122
|
-
|
|
123
151
|
commit:
|
|
124
|
-
$(if $(strip $(ARGS)),,$(error Usage: make commit '<message>'))
|
|
125
152
|
git add .
|
|
126
|
-
|
|
153
|
+
@uv run pre-commit run || echo "Advisory pre-commit reported issues. Auto-fixed files were re-staged and the commit continues."
|
|
127
154
|
git add .
|
|
128
|
-
git commit -m "$(
|
|
155
|
+
git commit -m "$(MSG)"
|
|
129
156
|
|
|
130
|
-
# Empty recipe absorbs extra arguments without invoking a subshell.
|
|
131
|
-
%: ;
|
|
132
157
|
```
|
|
133
158
|
|
|
134
159
|
**Usage:**
|
|
135
|
-
- `make commit
|
|
160
|
+
- `make commit MSG="feat(templates): add PROJECT.md template"`
|
|
136
161
|
|
|
137
|
-
**Message-input contract:** the
|
|
162
|
+
**Message-input contract:** the message arrives in the named variable `MSG`, so its words are data and never goals. Supported input:
|
|
138
163
|
|
|
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.
|
|
164
|
+
- ✅ **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.
|
|
165
|
+
- ✅ **`#` survives** — Make keeps the character inside a quoted command-line value, so `MSG="fix: close #42"` commits that subject.
|
|
140
166
|
- ❌ **`$VAR` is swallowed or expanded** — `make` and shells expand `$(...)`/`$X`; avoid `$`.
|
|
141
167
|
- ❌ **Backticks trigger command substitution** in POSIX shells when inside double quotes; avoid backticks.
|
|
142
168
|
- ❌ **Multiline messages fail hard** (`unexpected EOF`).
|
|
@@ -169,7 +195,7 @@ The pushed RUN's own conclusion is authoritative: it already folds in `continue-
|
|
|
169
195
|
- **all green / non-blocking** → PASSED → **exit 0**.
|
|
170
196
|
- **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
197
|
|
|
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
|
|
198
|
+
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
199
|
|
|
174
200
|
Attribution is deterministic: SHA → run → run-level + per-job conclusion (never "the latest run").
|
|
175
201
|
|
|
@@ -229,8 +255,8 @@ ci-watch: _preflight
|
|
|
229
255
|
if [ -n "$$NEWSTEPS" ]; then \
|
|
230
256
|
echo "$$WF: failing step(s): $$NEWSTEPS (run $$NEW)"; \
|
|
231
257
|
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
|
|
258
|
+
echo " view all failed logs: make logs RUN=$$NEW"; \
|
|
259
|
+
echo " view specific step: make logs RUN=$$NEW STEP=\"<step-name>\""; \
|
|
234
260
|
fi; \
|
|
235
261
|
if [ "$$NEWCONC" = "success" ]; then \
|
|
236
262
|
if [ -n "$$NEWFAIL" ]; then \
|
|
@@ -294,11 +320,9 @@ ci-watch: _preflight
|
|
|
294
320
|
### Example
|
|
295
321
|
|
|
296
322
|
```makefile
|
|
297
|
-
probe: REASON := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
|
|
298
323
|
probe: _preflight
|
|
299
324
|
|
|
300
325
|
probe:
|
|
301
|
-
$(if $(strip $(REASON)),,$(error Usage: make probe '<reason>'))
|
|
302
326
|
git add -f spikes/debug/probe.sh
|
|
303
327
|
git commit -m "debug: probe" --no-verify --allow-empty
|
|
304
328
|
git push
|
|
@@ -321,7 +345,7 @@ probe:
|
|
|
321
345
|
cat spikes/debug/probe_output.txt 2>/dev/null || echo "(no output file)"
|
|
322
346
|
```
|
|
323
347
|
|
|
324
|
-
**Usage:** `make probe
|
|
348
|
+
**Usage:** `make probe REASON="investigate windows path handling"`
|
|
325
349
|
|
|
326
350
|
`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
351
|
|
|
@@ -332,27 +356,23 @@ The Debugger's Reproduction phase needs to read CI logs without drowning in the
|
|
|
332
356
|
### Example
|
|
333
357
|
|
|
334
358
|
```makefile
|
|
335
|
-
logs:
|
|
336
|
-
logs: LOGS_STEP := $(wordlist 3,99,$(MAKECMDGOALS))
|
|
359
|
+
logs: _preflight
|
|
337
360
|
|
|
338
361
|
logs:
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
gh run view "$(LOGS_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 }'; \
|
|
362
|
+
@if [ -z "$(STEP)" ]; then \
|
|
363
|
+
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
364
|
else \
|
|
343
|
-
gh run view "$(
|
|
365
|
+
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
366
|
fi
|
|
345
367
|
|
|
346
|
-
# Empty recipe absorbs extra arguments without invoking a subshell.
|
|
347
|
-
%: ;
|
|
348
368
|
```
|
|
349
369
|
|
|
350
370
|
**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`.
|
|
371
|
+
- `make logs RUN=12345` — extract logs for ALL failed steps from run `12345`.
|
|
372
|
+
- `make logs RUN=12345 STEP="Run tests"` — extract logs for a specific step (substring match) from run `12345`.
|
|
353
373
|
|
|
354
374
|
**How it works:**
|
|
355
|
-
-
|
|
375
|
+
- `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
376
|
- 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
377
|
- When a step name is supplied, `index($2, step) > 0` performs substring matching against column 2.
|
|
358
378
|
- 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.dev1418}/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.dev1418}/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.dev1418}/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.dev1418}/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.dev1418}/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.dev1418}/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.dev1418}/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.dev1418}/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.dev1418}/src/teddy_executor/core/utils/markdown.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/core/utils/paths.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/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.dev1418}/src/teddy_executor/core/utils/string.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/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.dev1418}/src/teddy_executor/registries/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/registries/reviewer.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/src/teddy_executor/registries/validators.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1415 → teddy_cli-0.1.17.dev1418}/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
|