teddy-cli 0.1.17.dev1265__tar.gz → 0.1.17.dev1267__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.dev1265 → teddy_cli-0.1.17.dev1267}/PKG-INFO +1 -1
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/pyproject.toml +1 -1
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/__main__.py +8 -4
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/ports/outbound/prompt_manager.py +10 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/prompt_manager.py +22 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/session_pruning_service.py +5 -4
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/session_service.py +12 -24
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/validation_rules/helpers.py +5 -6
- teddy_cli-0.1.17.dev1267/src/teddy_executor/core/utils/paths.py +33 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/resources/MRP.xml +26 -9
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/resources/config/prompts/architect.xml +7 -6
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/resources/config/prompts/assistant.xml +2 -2
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/resources/config/prompts/debugger.xml +21 -23
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/resources/config/prompts/developer.xml +6 -6
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/resources/config/prompts/pathfinder.xml +5 -5
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/resources/config/prompts/prototyper.xml +5 -5
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/resources/templates/ARCHITECTURE.md +3 -3
- teddy_cli-0.1.17.dev1267/src/teddy_executor/resources/templates/ci.md +159 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/resources/templates/makefile.md +86 -9
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/resources/templates/pre-commit.md +26 -17
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/resources/templates/vertical-slice.md +6 -3
- teddy_cli-0.1.17.dev1265/src/teddy_executor/resources/templates/ci.md +0 -69
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/.gitignore +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/LICENSE +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/inbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/inbound/cli_formatter.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/inbound/cli_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/inbound/session_cli_handlers.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/inbound/textual_plan_reviewer.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_app.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_editor.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_execution.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_logic.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_previews.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_widgets.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/outbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/outbound/console_interactor.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/outbound/console_interactor_ask_loop.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/outbound/console_interactor_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/outbound/console_tooling.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/outbound/filesystem_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/outbound/litellm_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/outbound/local_file_system_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/outbound/openrouter_hydrator.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/outbound/shell_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/outbound/shell_command_builder.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/outbound/suppressed_logging.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/outbound/system_environment_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/outbound/system_environment_inspector.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/outbound/system_time_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/outbound/terminal_quit_key_listener.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/outbound/web_scraper_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/outbound/web_searcher_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/adapters/outbound/yaml_config_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/container.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/domain/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/domain/models/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/domain/models/action_ports.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/domain/models/change_set.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/domain/models/drift_report.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/domain/models/exceptions.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/domain/models/execution_report.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/domain/models/orchestrator_ports.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/domain/models/plan.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/domain/models/planning_ports.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/domain/models/project_context.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/domain/models/report_assembly_data.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/domain/models/session.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/domain/models/shell_output.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/domain/models/web_search_results.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/ports/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/ports/inbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/ports/inbound/edit_simulator.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/ports/inbound/get_context_use_case.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/ports/inbound/init.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/ports/inbound/plan_parser.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/ports/inbound/plan_reviewer.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/ports/inbound/plan_validator.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/ports/inbound/planning_use_case.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/ports/inbound/run_plan_use_case.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/ports/outbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/ports/outbound/config_service.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/ports/outbound/environment_inspector.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/ports/outbound/execution_report_assembler.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/ports/outbound/file_system_manager.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/ports/outbound/llm_client.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/ports/outbound/markdown_report_formatter.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/ports/outbound/quit_key_listener.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/ports/outbound/repo_tree_generator.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/ports/outbound/session_loop_guard.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/ports/outbound/session_manager.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/ports/outbound/session_repository.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/ports/outbound/shell_executor.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/ports/outbound/system_environment.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/ports/outbound/time_service.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/ports/outbound/user_interactor.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/ports/outbound/web_scraper.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/ports/outbound/web_searcher.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/action_changeset_builder.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/action_diff_manager.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/action_dispatcher.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/action_executor.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/action_factory.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/action_parser_complex.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/action_parser_strategies.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/context_service.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/edit_simulator.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/execution_orchestrator.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/execution_report_assembler.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/init_service.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/markdown_plan_parser.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/markdown_report_formatter.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/parser_infrastructure.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/parser_metadata.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/parser_reporting.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/plan_validator.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/planning_service.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/session_lifecycle_manager.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/session_loop_guard.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/session_orchestrator.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/session_planner.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/session_replanner.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/session_repository.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/templates/execution_report.md.j2 +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/update_checker.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/validation_rules/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/validation_rules/edit.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/validation_rules/edit_matcher.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/validation_rules/edit_matcher_heuristics.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/validation_rules/execute.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/validation_rules/filesystem.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/services/validation_rules/message.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/utils/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/utils/diff.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/utils/interrupt_guard.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/utils/io.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/utils/markdown.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/utils/serialization.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/utils/stdin_ownership.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/utils/string.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/core/utils/terminal.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/prompts.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/registries/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/registries/infrastructure.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/registries/reviewer.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/registries/validators.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/resources/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/resources/config/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/resources/config/config.yaml +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/resources/config/init.context +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/resources/templates/PROJECT.md +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/resources/templates/case-file.md +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/resources/templates/component-design.md +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/resources/templates/milestone.md +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/resources/templates/specification-document.md +0 -0
- {teddy_cli-0.1.17.dev1265 → teddy_cli-0.1.17.dev1267}/src/teddy_executor/resources/templates/task-brief.md +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "teddy-cli"
|
|
3
|
-
version = "0.1.17.
|
|
3
|
+
version = "0.1.17.dev1267"
|
|
4
4
|
description = "A local-first, file-based AI coding workflow that applies the UNIX philosophy to AI collaboration."
|
|
5
5
|
authors = [{ name = "Raphael Atteritano" }]
|
|
6
6
|
license = { text = "AGPL-3.0-only" }
|
|
@@ -424,14 +424,18 @@ def get_prompt(
|
|
|
424
424
|
),
|
|
425
425
|
):
|
|
426
426
|
"""
|
|
427
|
-
Retrieves and displays the
|
|
427
|
+
Retrieves and displays the composed system prompt for a specified agent.
|
|
428
428
|
|
|
429
|
-
|
|
429
|
+
The output matches the system prompt the agent actually receives: the
|
|
430
|
+
agent-name header, the agent-specific XML, and the shared MRP base prompt.
|
|
430
431
|
"""
|
|
431
432
|
from teddy_executor.adapters.inbound.cli_helpers import echo_and_copy
|
|
432
|
-
from teddy_executor.
|
|
433
|
+
from teddy_executor.core.ports.outbound.prompt_manager import IPromptManager
|
|
434
|
+
from teddy_executor.prompts import list_prompt_names
|
|
433
435
|
|
|
434
|
-
|
|
436
|
+
container = get_container()
|
|
437
|
+
prompt_manager = container.resolve(IPromptManager)
|
|
438
|
+
prompt_content = prompt_manager.compose_system_prompt(prompt_name)
|
|
435
439
|
|
|
436
440
|
if prompt_content:
|
|
437
441
|
echo_and_copy(prompt_content, no_copy)
|
|
@@ -37,6 +37,16 @@ class IPromptManager(ABC):
|
|
|
37
37
|
"""Synchronously fetches the system prompt for the agent."""
|
|
38
38
|
...
|
|
39
39
|
|
|
40
|
+
@abstractmethod
|
|
41
|
+
def compose_system_prompt(self, _agent_name: str) -> Optional[str]:
|
|
42
|
+
"""Composes the full system prompt for an agent without a turn path.
|
|
43
|
+
|
|
44
|
+
Resolves the agent-specific content and assembles it (agent-name
|
|
45
|
+
header + agent XML + shared MRP base prompt). Returns ``None`` when no
|
|
46
|
+
content can be resolved.
|
|
47
|
+
"""
|
|
48
|
+
...
|
|
49
|
+
|
|
40
50
|
@abstractmethod
|
|
41
51
|
def log_telemetry(self, _token_count: Any, _turn_cost: Any) -> float:
|
|
42
52
|
"""Logs planning telemetry."""
|
|
@@ -155,6 +155,16 @@ class PromptManager(IPromptManager):
|
|
|
155
155
|
# contract (no header, no MRP) rather than fabricating a prompt.
|
|
156
156
|
return ""
|
|
157
157
|
|
|
158
|
+
return self._assemble_composed_prompt(agent_name, content)
|
|
159
|
+
|
|
160
|
+
def _assemble_composed_prompt(self, agent_name: str, content: str) -> str:
|
|
161
|
+
"""Assembles a composed system prompt from an agent name and content.
|
|
162
|
+
|
|
163
|
+
Prepends the canonical agent-name header, then appends the shared MRP
|
|
164
|
+
base prompt AFTER the agent-specific content. A resolved prompt that
|
|
165
|
+
already carries its own ``<response_format>`` (e.g. a customized
|
|
166
|
+
``.teddy/prompts/`` override) keeps the header but skips the MRP block.
|
|
167
|
+
"""
|
|
158
168
|
assembled = f"Agent Name: {canonical_agent_name(agent_name)}\n\n{content}"
|
|
159
169
|
|
|
160
170
|
# Legacy compatibility: a resolved prompt that already carries its own
|
|
@@ -167,6 +177,18 @@ class PromptManager(IPromptManager):
|
|
|
167
177
|
# assembled ``<system>`` prompt; MRP is appended AFTER the agent content.
|
|
168
178
|
return f"{assembled}\n\n{self._load_mrp_base_prompt()}"
|
|
169
179
|
|
|
180
|
+
def compose_system_prompt(self, agent_name: str) -> Optional[str]:
|
|
181
|
+
"""Composes the full system prompt for an agent WITHOUT a turn path.
|
|
182
|
+
|
|
183
|
+
Resolves the agent-specific content via ``get_prompt_content`` (the
|
|
184
|
+
canonical ``.teddy/prompts/`` source) and assembles it. Returns
|
|
185
|
+
``None`` when no content can be resolved, signalling "not found".
|
|
186
|
+
"""
|
|
187
|
+
content = self.get_prompt_content(agent_name)
|
|
188
|
+
if not content:
|
|
189
|
+
return None
|
|
190
|
+
return self._assemble_composed_prompt(agent_name, content)
|
|
191
|
+
|
|
170
192
|
def log_telemetry(self, token_count: Any, turn_cost: Any) -> float:
|
|
171
193
|
def safe_float(v: Any, default: float = 0.0) -> float:
|
|
172
194
|
try:
|
|
@@ -5,6 +5,7 @@ from typing import Any, Dict, Optional
|
|
|
5
5
|
from teddy_executor.core.domain.models import ProjectContext
|
|
6
6
|
from teddy_executor.core.ports.outbound.config_service import IConfigService
|
|
7
7
|
from teddy_executor.core.ports.outbound.file_system_manager import IFileSystemManager
|
|
8
|
+
from teddy_executor.core.utils.paths import normalize_resource_path
|
|
8
9
|
|
|
9
10
|
|
|
10
11
|
class SessionPruningService:
|
|
@@ -70,8 +71,8 @@ class SessionPruningService:
|
|
|
70
71
|
item, selected=False, auto_prune_reason="File deleted from disk"
|
|
71
72
|
)
|
|
72
73
|
|
|
73
|
-
# Normalize path for consistent string matching
|
|
74
|
-
posix_path = item.path
|
|
74
|
+
# Normalize path for consistent string matching (link-aware)
|
|
75
|
+
posix_path = normalize_resource_path(item.path)
|
|
75
76
|
|
|
76
77
|
# Match numeric turn directories (e.g. '01', '02')
|
|
77
78
|
turn_id = self._extract_turn_id(posix_path)
|
|
@@ -93,8 +94,8 @@ class SessionPruningService:
|
|
|
93
94
|
"""Extracts the last numeric directory segment from the path."""
|
|
94
95
|
if not isinstance(path, str):
|
|
95
96
|
return None
|
|
96
|
-
# Normalize to forward slashes and strip prefixes for consistent matching
|
|
97
|
-
normalized = path
|
|
97
|
+
# Normalize to forward slashes and strip prefixes for consistent matching (link-aware)
|
|
98
|
+
normalized = normalize_resource_path(path)
|
|
98
99
|
# Turn IDs are typically 1-3 digits. 4+ digits usually represent years or other data.
|
|
99
100
|
matches = re.findall(r"(?:^|/)(\d{1,3})(?=/|$)", normalized)
|
|
100
101
|
return matches[-1] if matches else None
|
|
@@ -17,6 +17,7 @@ from teddy_executor.core.ports.outbound.session_manager import (
|
|
|
17
17
|
from teddy_executor.core.ports.outbound.session_repository import ISessionRepository
|
|
18
18
|
from teddy_executor.core.ports.outbound.prompt_manager import IPromptManager
|
|
19
19
|
from teddy_executor.core.ports.outbound.time_service import ITimeService
|
|
20
|
+
from teddy_executor.core.utils.paths import normalize_resource_path
|
|
20
21
|
from teddy_executor.core.utils.string import canonical_agent_name, slugify
|
|
21
22
|
|
|
22
23
|
|
|
@@ -103,13 +104,12 @@ class SessionService(ISessionManager):
|
|
|
103
104
|
if line.strip() and not line.strip().startswith("#")
|
|
104
105
|
]
|
|
105
106
|
|
|
106
|
-
# Merge additional context
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
normalized = normalized.lstrip("/")
|
|
107
|
+
# Merge additional context, routing each entry through the canonical
|
|
108
|
+
# link-aware normalizer so `[label](target)` entries seed the target
|
|
109
|
+
# (a strict superset of the prior inline normalization).
|
|
110
|
+
for entry in options.additional_context:
|
|
111
|
+
if entry:
|
|
112
|
+
normalized = self._extract_resource_path(entry)
|
|
113
113
|
if normalized and normalized not in clean_lines:
|
|
114
114
|
clean_lines.append(normalized)
|
|
115
115
|
|
|
@@ -237,24 +237,12 @@ class SessionService(ISessionManager):
|
|
|
237
237
|
self._repository.save_meta(f"{turn_dir}/meta.yaml", data)
|
|
238
238
|
|
|
239
239
|
def _extract_resource_path(self, resource_str: str) -> str:
|
|
240
|
+
"""Extracts the path from a Markdown link or returns the string if not a link.
|
|
241
|
+
|
|
242
|
+
Delegates to the shared pure helper ``normalize_resource_path`` so the
|
|
243
|
+
normalization pipeline is single-sourced across modules.
|
|
240
244
|
"""
|
|
241
|
-
|
|
242
|
-
Normalizes all slashes to forward slashes.
|
|
243
|
-
Only strips the exact "./" prefix if present, preserving leading dots.
|
|
244
|
-
"""
|
|
245
|
-
match = re.search(r"\[.*\]\((.*)\)", resource_str)
|
|
246
|
-
if match:
|
|
247
|
-
path = match.group(1)
|
|
248
|
-
normalized = path.replace("\\", "/")
|
|
249
|
-
# Only strip the exact "./" prefix if present (preserves leading dots)
|
|
250
|
-
if normalized.startswith("./"):
|
|
251
|
-
normalized = normalized.removeprefix("./")
|
|
252
|
-
return normalized.lstrip("/")
|
|
253
|
-
normalized = resource_str.strip().replace("\\", "/")
|
|
254
|
-
# Only strip the exact "./" prefix if present (preserves leading dots)
|
|
255
|
-
if normalized.startswith("./"):
|
|
256
|
-
normalized = normalized.removeprefix("./")
|
|
257
|
-
return normalized.lstrip("/")
|
|
245
|
+
return normalize_resource_path(resource_str)
|
|
258
246
|
|
|
259
247
|
def transition_to_next_turn(
|
|
260
248
|
self,
|
|
@@ -13,6 +13,7 @@ from teddy_executor.core.domain.models.plan import (
|
|
|
13
13
|
ValidationError,
|
|
14
14
|
)
|
|
15
15
|
from teddy_executor.core.ports.outbound import IConfigService, IFileSystemManager
|
|
16
|
+
from teddy_executor.core.utils.paths import normalize_resource_path
|
|
16
17
|
|
|
17
18
|
ContextPaths = Dict[str, Sequence[str]]
|
|
18
19
|
ValidationResult = List[ValidationError]
|
|
@@ -163,15 +164,13 @@ def is_path_in_context(
|
|
|
163
164
|
if check_turn:
|
|
164
165
|
scopes.append("Turn")
|
|
165
166
|
|
|
166
|
-
# Normalize target
|
|
167
|
-
normalized_target = path_str
|
|
167
|
+
# Normalize target via the shared link-aware helper
|
|
168
|
+
normalized_target = normalize_resource_path(path_str)
|
|
168
169
|
|
|
169
170
|
for scope in scopes:
|
|
170
171
|
context_files = context_paths.get(scope, [])
|
|
171
|
-
# Normalize context
|
|
172
|
-
normalized_context = [
|
|
173
|
-
p.replace("\\", "/").removeprefix("./").lstrip("/") for p in context_files
|
|
174
|
-
]
|
|
172
|
+
# Normalize context via the shared link-aware helper
|
|
173
|
+
normalized_context = [normalize_resource_path(p) for p in context_files]
|
|
175
174
|
if normalized_target in normalized_context:
|
|
176
175
|
return True
|
|
177
176
|
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""Shared, pure resource-path normalization helper.
|
|
2
|
+
|
|
3
|
+
Single-sources the path-normalization pipeline (Markdown-link target
|
|
4
|
+
extraction plus backslash -> slash conversion, exact ``./`` prefix stripping,
|
|
5
|
+
and leading-slash stripping) so every consumer delegates to one implementation
|
|
6
|
+
and the behaviour cannot drift across modules.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import re
|
|
10
|
+
|
|
11
|
+
_LINK_PATTERN = re.compile(r"\[.*\]\((.*)\)")
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def normalize_resource_path(resource_str: str) -> str:
|
|
15
|
+
"""Extracts the path from a Markdown link, or normalizes a raw path string.
|
|
16
|
+
|
|
17
|
+
For a Markdown link ``[label](target)`` the ``target`` is extracted; any
|
|
18
|
+
other input is treated as a raw path and stripped of surrounding whitespace.
|
|
19
|
+
Both branches then normalize backslashes to forward slashes, strip an exact
|
|
20
|
+
leading ``./`` (preserving leading dots such as ``.hidden``), and strip any
|
|
21
|
+
leading ``/``.
|
|
22
|
+
"""
|
|
23
|
+
match = _LINK_PATTERN.search(resource_str)
|
|
24
|
+
if match:
|
|
25
|
+
normalized = match.group(1).replace("\\", "/")
|
|
26
|
+
if normalized.startswith("./"):
|
|
27
|
+
normalized = normalized.removeprefix("./")
|
|
28
|
+
return normalized.lstrip("/")
|
|
29
|
+
|
|
30
|
+
normalized = resource_str.strip().replace("\\", "/")
|
|
31
|
+
if normalized.startswith("./"):
|
|
32
|
+
normalized = normalized.removeprefix("./")
|
|
33
|
+
return normalized.lstrip("/")
|
|
@@ -16,18 +16,18 @@
|
|
|
16
16
|
</rule>
|
|
17
17
|
|
|
18
18
|
<rule n="2" name="State Dashboard">
|
|
19
|
-
<description>Maintain orientation via the State Dashboard placed at the end of the `Rationale` block. You MUST preserve all items in the `
|
|
19
|
+
<description>Maintain orientation via the State Dashboard placed at the end of the `Rationale` block. You MUST preserve all items in the `NOTES` section across all turns, updating their status but never removing them from the list. The `WORKFLOW` list MUST mirror the phases defined in your agent workflow.</description>
|
|
20
20
|
<template>
|
|
21
21
|
Goal: [The objective of the current task/session]
|
|
22
22
|
Reference Files: [Root-relative paths to the key artifacts guiding this work]
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
WORKFLOW:
|
|
25
25
|
- [✓ | ▶ | ] [Phase 1]
|
|
26
26
|
- [✓ | ▶ | ] [Phase 2]
|
|
27
27
|
- [✓ | ▶ | ] [Phase 3]
|
|
28
28
|
...
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
NOTES:
|
|
31
31
|
- [TODO] [Pending task]
|
|
32
32
|
- [DOC] [Documentation task/note]
|
|
33
33
|
- [!] [Critical constraint/risk]
|
|
@@ -47,11 +47,12 @@ WIP & REMINDERS:
|
|
|
47
47
|
</rule>
|
|
48
48
|
|
|
49
49
|
<rule n="6" name="Version Control Protocol (VCP)">
|
|
50
|
-
The entire commit cycle (test, stage, commit
|
|
50
|
+
The entire commit cycle (test, stage, commit) MUST occur in a dedicated Version Control turn. Pushing is deferred to the Conclusion phase (see step 5).
|
|
51
51
|
1. Pre-conditions: Clean up temporary files (spikes/, .tmp/). If unsure of changes, `EXECUTE git add . && git diff HEAD`.
|
|
52
52
|
2. Commit Message: Use Conventional Commits '<type>(<scope>): <description>' wrapped in single quotes. Use imperative mood. Append ! for breaking changes.
|
|
53
|
-
3. Execution:
|
|
54
|
-
4. Post-conditions: All tests MUST pass — the post-commit hook runs the full suite and reverts the commit on failure; this gate is unskippable and MUST NEVER be bypassed. The pre-commit stage is advisory (its failures do not block the local commit), but if it reported non-trivial quality-gate issues (e.g. file length), you MUST make a follow-up cleanup commit that resolves them before resuming feature work. Triage any resulting `[DEBT]` per the
|
|
53
|
+
3. Execution: Run `make commit '<type>(<scope>): <description>'` to stage, run the local pre-commit hooks, and commit. `make commit` stages ALL local changes, including currently unstaged ones (`git add .`). The target commits WITHOUT `--no-verify`, so Git's own pre-commit hook is a real local gate; the post-commit test gate always runs and is unaffected.
|
|
54
|
+
4. Post-conditions: All tests MUST pass — the post-commit hook runs the full suite and reverts the commit on failure; this gate is unskippable and MUST NEVER be bypassed. The pre-commit stage is advisory (its failures do not block the local commit), but if it reported non-trivial quality-gate issues (e.g. file length), you MUST make a follow-up cleanup commit that resolves them before resuming feature work. Triage any resulting `[DEBT]` per the Technical Debt Triage policy — there is no `## Technical Debt` holding pen.
|
|
55
|
+
5. Push at Conclusion: In the Conclusion phase, run `make push` to rebase onto the remote, push, and wait for and report the CI results. `make push` compares the pushed SHA's failing-job set against the base run (`origin/main` before the push), per workflow: base green → new red = YOUR regression → fix it immediately before concluding (exit 1); base red → new red (same jobs) = pre-existing → report it and continue (exit 0); all green → PASSED. An unknown base is treated as yours (fail-safe). Tests MUST always be fixed; quality-gate failures MUST be fixed or explicitly planned in before you conclude.
|
|
55
56
|
</rule>
|
|
56
57
|
|
|
57
58
|
<rule n="7" name="Standardized Plan Types">
|
|
@@ -87,7 +88,23 @@ WIP & REMINDERS:
|
|
|
87
88
|
</rule>
|
|
88
89
|
|
|
89
90
|
<rule n="13" name="Communication Hygiene">
|
|
90
|
-
<description>Applies to all user-facing Messages and turn titles: (1) Do not repeat the same title across consecutive turns — each turn's title MUST reflect its distinct responsibility, and if you detect a vicious loop with no new progress you MUST transition to BLOCKED 🔴 rather than repeating yourself. (2) Do not restate content already delivered in a prior Message, and do not send a new Message until the work previously agreed in the last Message is complete — the only exception is entering BLOCKED 🔴. (3) Record important findings and constraints as `[!]` entries in the State Dashboard so they persist across turns. (4) End every Message with a concise TL;DR line summarizing the key point or the decision requested. (5) Whenever the user sends a message, immediately log every user decision, constraint, or directive into the State Dashboard's `
|
|
91
|
+
<description>Applies to all user-facing Messages and turn titles: (1) Do not repeat the same title across consecutive turns — each turn's title MUST reflect its distinct responsibility, and if you detect a vicious loop with no new progress you MUST transition to BLOCKED 🔴 rather than repeating yourself. (2) Do not restate content already delivered in a prior Message, and do not send a new Message until the work previously agreed in the last Message is complete — the only exception is entering BLOCKED 🔴. (3) Record important findings and constraints as `[!]` entries in the State Dashboard so they persist across turns. (4) End every Message with a concise TL;DR line summarizing the key point or the decision requested. (5) Whenever the user sends a message, immediately log every user decision, constraint, or directive into the State Dashboard's `NOTES` as `[TODO]` (for tasks) or `[!]` (for constraints). You are strictly forbidden from sending another `## Message` until all such `[TODO]` items are marked `[✓]` (or unless you transition to BLOCKED 🔴). Never re-ask a question the user has already answered, and never restate decisions or explanations already delivered in prior messages.</description>
|
|
92
|
+
</rule>
|
|
93
|
+
|
|
94
|
+
<rule n="14" name="Plain Language">
|
|
95
|
+
Write plainly. Avoid unnecessary jargon, use one term per concept, and prefer short sentences. This applies to Message contents, documentation, AND the Rationale — keep the rigor of the reasoning, but remove needless complexity.
|
|
96
|
+
</rule>
|
|
97
|
+
|
|
98
|
+
<rule n="15" name="Quality-Gate Bypass Policy">
|
|
99
|
+
Prefer config-level bypasses (pyproject `per-file-ignores`, pre-commit `exclude`) for anything repeated or file-wide. Allow a narrowly-scoped inline `# type: ignore[code]` / `# noqa: CODE` WITH a reason comment for genuine one-offs. Bare `# noqa` / `# type: ignore` are forbidden. Prompt steps reference this policy by NAME, never by rule number.
|
|
100
|
+
</rule>
|
|
101
|
+
|
|
102
|
+
<rule n="16" name="Technical Debt Triage">
|
|
103
|
+
Triage every `[DEBT]` from your State Dashboard using the 3-Tier policy:
|
|
104
|
+
1. Micro / quick-wins (≤3 lines, file-local) — fix directly in-flight.
|
|
105
|
+
2. Slice-scoped refactoring — append an atomic `Refactor`/`Cleanup` deliverable to the active Vertical Slice.
|
|
106
|
+
3. Structural / cross-cutting — present to the user during an alignment gate and, with approval, schedule as a Vertical Slice in the active Milestone (`docs/project/milestones/MM-name.md`) or define a new Milestone in the Roadmap.
|
|
107
|
+
There is no `## Technical Debt` holding pen.
|
|
91
108
|
</rule>
|
|
92
109
|
</general_rules>
|
|
93
110
|
|
|
@@ -226,12 +243,12 @@ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
|
|
|
226
243
|
4. State Dashboard
|
|
227
244
|
Goal: Lorem ipsum dolor sit amet.
|
|
228
245
|
|
|
229
|
-
|
|
246
|
+
WORKFLOW:
|
|
230
247
|
- [✓] Lorem
|
|
231
248
|
- [▶] Ipsum
|
|
232
249
|
- [ ] Dolor
|
|
233
250
|
|
|
234
|
-
|
|
251
|
+
NOTES:
|
|
235
252
|
- [TODO] Consectetur adipiscing elit.
|
|
236
253
|
- [!] Sed do eiusmod tempor incididunt.
|
|
237
254
|
~~~~~~
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
<instructions>
|
|
9
9
|
<workflow>
|
|
10
|
-
<phase_tracking>The phases below are tracked in the State Dashboard. Use these exact phase names in the dashboard's
|
|
10
|
+
<phase_tracking>The phases below are tracked in the State Dashboard. Use these exact phase names in the dashboard's WORKFLOW list.</phase_tracking>
|
|
11
11
|
<artifact_templates>When you create a project artifact, use the corresponding Markdown template from `docs/templates/` (e.g., `specification-document.md`, `vertical-slice.md`, `case-file.md`). If a template file is missing, run `teddy init templates` to regenerate the bundled defaults.</artifact_templates>
|
|
12
12
|
|
|
13
13
|
<phase n="1" name="Exploration">
|
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
</phase>
|
|
22
22
|
|
|
23
23
|
<phase n="2" name="Alignment">
|
|
24
|
-
<goal>Synthesize findings into a formal proposal
|
|
24
|
+
<goal>Synthesize findings into a formal proposal. User approval is consolidated into the single gate at the end of Phase 3, EXCEPT when systemic debt forces a rewrite (see Step 2).</goal>
|
|
25
25
|
<step n="1" name="Options Analysis">Identify and document viable architectural patterns (favoring layered abstractions like Coordinators and Application Services over leaky direct delegation), including their pros and cons regarding testability, coupling, complexity, and performance.</step>
|
|
26
|
-
<step n="2" name="
|
|
26
|
+
<step n="2" name="Systemic-Debt Checkpoint">Do NOT open a user gate here. Proceed directly into Phase 3 (Design). The ONLY exception is when Phase 1 found systemic debt that would force a systemic rewrite: in that case, Message the user with the compared architectural patterns and a justification for the rewrite, and do not proceed without explicit approval. All other approval is consolidated into the single Approval Gate at Phase 3, Step 10.</step>
|
|
27
27
|
</phase>
|
|
28
28
|
|
|
29
29
|
<phase n="3" name="Design">
|
|
@@ -38,10 +38,11 @@
|
|
|
38
38
|
<step n="8" name="Create Slice">`CREATE` exactly ONE Vertical Slice following these rules:
|
|
39
39
|
1. Status: Initial Status MUST be `Planned`.
|
|
40
40
|
2. Content: MUST include linked Component Docs. MUST include Gherkin scenarios and a final `Wiring` behavioral gate.
|
|
41
|
-
3. Debt: Inject `Refactor`/`Cleanup` deliverables for audit findings, and `Harness` deliverables to patch preventable static analysis gaps
|
|
41
|
+
3. Debt: Inject `Refactor`/`Cleanup` deliverables for audit findings, and `Harness` deliverables to patch preventable static analysis gaps.
|
|
42
|
+
4. Design Sensitivity (log-only): For EVERY Key Unknown, record a one-line Design Sensitivity stating how the design reacts to each resolution (e.g., "if this resolves as X → contracts hold; if Y → this port/DTO changes"). The Architect does NOT spike; empirically de-risking every `[Technical]`/`[Functional]` unknown is the Prototyper's job (route `[Domain]` unknowns to the user).</step>
|
|
42
43
|
<step n="9" name="Impact Audit & Consistency Check">Use `EXECUTE git grep` on target components. If a component (Port, Service signature, or DTO) has >1 consumer (excluding its own definition), categorize it as a Shared Seam. You MUST decompose the design into smaller, atomic deliverables if >1 consumer, layer, or logical change is affected. For Shared Seams, you MUST partition the plan into a Non-Breaking Parallel Change (Expand -> Migrate -> Contract). Ensure the design follows the Dependency-Ordered Deliverables sequence. Resolve hits for deleted/renamed components in documentation and ensure all Contract/Seam changes have matching Harness deliverables.</step>
|
|
43
|
-
<step n="10" name="Approval Gate">Message the user to review the
|
|
44
|
-
<step n="11" name="Debt Triage">Triage any `[DEBT]` from your State Dashboard
|
|
44
|
+
<step n="10" name="Approval Gate">This is the single consolidated approval gate for the session. Message the user to review the architectural pattern proposal AND the finalized deliverables/specs together. Do NOT proceed to Phase 4 without explicit user approval.</step>
|
|
45
|
+
<step n="11" name="Debt Triage">Triage any `[DEBT]` from your State Dashboard per the Technical Debt Triage policy.</step>
|
|
45
46
|
</phase>
|
|
46
47
|
|
|
47
48
|
<phase n="4" name="Version Control">
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<instructions>
|
|
9
9
|
<workflow>
|
|
10
10
|
<description>The Fast Iterative Execution Loop for tactical tasks.</description>
|
|
11
|
-
<phase_tracking>The phases below are tracked in the State Dashboard. Use these exact phase names in the dashboard's
|
|
11
|
+
<phase_tracking>The phases below are tracked in the State Dashboard. Use these exact phase names in the dashboard's WORKFLOW list.</phase_tracking>
|
|
12
12
|
<artifact_templates>When you create a project artifact, use the corresponding Markdown template from `docs/templates/` (e.g., `task-brief.md`, `specification-document.md`, `vertical-slice.md`). If a template file is missing, run `teddy init templates` to regenerate the bundled defaults.</artifact_templates>
|
|
13
13
|
|
|
14
14
|
<phase n="1" name="Execution">
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
<phase n="3" name="Conclusion">
|
|
34
34
|
<goal>Clean up the workspace, execute the commit following the VCP, and conclude the assignment.</goal>
|
|
35
35
|
<step n="1" name="Teardown">Explicitly delete all local diagnostic scripts, temporary logs, workspace detritus in `spikes/`, and also your completed task brief file, then run `git status` to verify.</step>
|
|
36
|
-
<step n="2" name="Debt Triage">Triage any `[DEBT]` from your State Dashboard
|
|
36
|
+
<step n="2" name="Debt Triage">Triage any `[DEBT]` from your State Dashboard per the Technical Debt Triage policy.</step>
|
|
37
37
|
<step n="3" name="Commit">Execute the commit following the VCP and then inform the user about the task conclusion.</step>
|
|
38
38
|
</phase>
|
|
39
39
|
</workflow>
|
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
|
|
8
8
|
<instructions>
|
|
9
9
|
<workflow>
|
|
10
|
-
<description>The Iterative Probing &
|
|
11
|
-
<phase_tracking>The phases below are tracked in the State Dashboard. Use these exact phase names in the dashboard's
|
|
10
|
+
<description>The Iterative Probing & Diagnosis Loop. You will iteratively refine a mental model of the system, peel back internal layers, observe reality, and update the living System Model until no conflicts remain.</description>
|
|
11
|
+
<phase_tracking>The phases below are tracked in the State Dashboard. Use these exact phase names in the dashboard's WORKFLOW list.</phase_tracking>
|
|
12
12
|
|
|
13
13
|
<phase n="1" name="Reproduction">
|
|
14
14
|
<goal>Gather context and build/verify an end-to-end Minimal Reproducible Example (MRE).</goal>
|
|
15
|
-
<step n="1" name="Case File Check">If a Case File was not provided in the initial context, you MUST CREATE one following
|
|
15
|
+
<step n="1" name="Case File Check">If a Case File was not provided in the initial context, you MUST READ `docs/templates/case-file.md` and CREATE one following that template.</step>
|
|
16
16
|
<step n="2" name="Context & History Gathering">Use `EXECUTE` (`git grep`, `git log -n 5 --stat`), `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. You MUST first use `gh run view [ID]` to see the execution tree and identify the exact name of the failed step. Then, extract ONLY that step's logs (stripping ANSI and boilerplate) by executing `make logs [ID] '[FAILED_STEP_NAME]'` (see [docs/templates/makefile.md](docs/templates/makefile.md) for the CI Log Extraction target).</step>
|
|
17
17
|
<step n="3" name="Diagnostic MRE, Pruning & Platform Check">
|
|
18
18
|
- **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/` to trigger the symptom.
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
|
|
41
41
|
<phase n="3" name="Systemic Audit">
|
|
42
42
|
<goal>Generalize the learning and prepare for safe integration — run autonomously immediately after the sandbox fix is proven in Phase 2, before involving the user.</goal>
|
|
43
|
-
<step n="1" name="Root Cause Categorization">Analyze the verified root cause to identify its abstract category. Propose a generalized fix that would prevent this entire class of bug and incorporate it
|
|
43
|
+
<step n="1" name="Root Cause Categorization">Analyze the verified root cause to identify its abstract category. Propose a generalized fix that would prevent this entire class of bug and incorporate it as a deliverable in the new Vertical Slice you create in Phase 5.</step>
|
|
44
44
|
<step n="2" name="Categorical Audit">Use `git grep` to search the codebase for other instances of the identified category. You MUST formalize any significant findings into deliverables within the Vertical Slice (e.g., a `Refactor` deliverable).</step>
|
|
45
45
|
<step n="3" name="Impact Audit">Use `git grep` to audit the SUT components touched by your proposed systemic fix. If the fix requires modifying a Port, Signature, or DTO that has >1 consumer, note this dependency so the slice can be partitioned into a Non-Breaking Parallel Change (Expand -> Migrate -> Contract). Ensure all proposed Contract/Seam changes have matching Harness deliverables.</step>
|
|
46
46
|
</phase>
|
|
@@ -48,34 +48,32 @@
|
|
|
48
48
|
<phase n="4" name="Alignment">
|
|
49
49
|
<goal>Present the complete synthesis in a single decisive gate and gain explicit user approval on the proposed solution path.</goal>
|
|
50
50
|
<step n="1" name="Case File Synchronization">EDIT the Case File to update the Diagnostic Analysis with the Systemic Audit findings, and ensure the Causal Model reflects the verified reality from the Isolated Sandbox Verification.</step>
|
|
51
|
-
<step n="2" name="Consolidated Alignment Gate">Message the user with the complete synthesis in a single turn: (1) the Root Cause Analysis (RCA) and verified MRE evidence; (2) the sandboxed verification results proving the fix in isolation; (3) the Systemic Audit findings (grepped occurrences across the codebase and seam impact); and (4) the proposed solution plan — a
|
|
51
|
+
<step n="2" name="Consolidated Alignment Gate">Message the user with the complete synthesis in a single turn: (1) the Root Cause Analysis (RCA) and verified MRE evidence; (2) the sandboxed verification results proving the fix in isolation; (3) the Systemic Audit findings (grepped occurrences across the codebase and seam impact); and (4) the proposed solution plan — a NEW Vertical Slice for the Developer, seeded with your proven fix, the MRE, and a regression-test deliverable. You are strictly forbidden from writing production code yourself, and you MUST NOT modify or take over an existing Vertical Slice: you ALWAYS mint a new slice so each bug-fix keeps focused, self-contained context. You MUST resolve any questions or discrepancies raised by the user. Do NOT proceed without explicit user approval.</step>
|
|
52
52
|
</phase>
|
|
53
53
|
|
|
54
54
|
<phase n="5" name="Documentation">
|
|
55
55
|
<goal>Translate the proven sandbox fix into actionable handoff artifacts.</goal>
|
|
56
|
-
<step n="1" name="Case File">Update the Case File. Populate the `## Solution` section with a high-level explanation of the root cause and the fix. You MUST include preventative measures focusing on systematically fixing this entire class of issue. Ensure the final `Diagnostic Analysis` is accurate and up-to-date. Change status to Resolved.</step>
|
|
57
|
-
<step n="2" name="
|
|
56
|
+
<step n="1" name="Case File">Update the Case File (template: `docs/templates/case-file.md`). Populate the `## Solution` section with a high-level explanation of the root cause and the fix. You MUST include preventative measures focusing on systematically fixing this entire class of issue. Ensure the final `Diagnostic Analysis` is accurate and up-to-date. Change status to Resolved.</step>
|
|
57
|
+
<step n="2" name="Create Vertical Slice">`CREATE` exactly ONE NEW Vertical Slice (template: `docs/templates/vertical-slice.md`). You MUST NOT modify or take over an existing slice — minting a fresh slice keeps the bug-fix context focused and self-contained. The slice MUST:
|
|
58
|
+
1. Use an ad-hoc `00-NN-{{scope-slug}}` filename (ad-hoc slices MUST use the 00 prefix), unless the bug belongs to an active milestone, in which case use its `MM-NN` prefix.
|
|
59
|
+
2. Set Status to `Planned`.
|
|
60
|
+
3. Link the Case File as evidence and link the preserved MRE script and shadow-file proof (Phase 6 Teardown consolidates them into `spikes/debug/{scope-slug}/`).
|
|
61
|
+
4. Carry the proven shadow-file fix as the primary `Logic` deliverable, plus a `Harness` deliverable for the regression test that reproduces the exact MRE scenario (the test MUST assert on observable behaviour; its filename and the commit message MUST NOT contain the Case File number or any bug-specific identifier).
|
|
62
|
+
5. Include the Systemic Audit `Refactor`/`Cleanup` deliverables from Phase 3, so this entire class of bug is fixed within the same focused slice.
|
|
63
|
+
6. Include Gherkin scenarios derived from the MRE and a final `Wiring` behavioral gate.</step>
|
|
64
|
+
<step n="3" name="Debt Triage">Triage any `[DEBT]` from your State Dashboard per the Technical Debt Triage policy.</step>
|
|
58
65
|
</phase>
|
|
59
66
|
|
|
60
|
-
<phase n="6" name="
|
|
61
|
-
<goal>This phase is ONLY executed for trivial fixes where no Vertical Slice was created or modified in the previous Phase.</goal>
|
|
62
|
-
<step n="1" name="Write Regression Test">CREATE a regression test file in the appropriate location within `tests/` that reproduces the bug symptom identified in the Case File and MRE. The test MUST exercise the exact failing scenario. The test MUST assert on observable behaviour rather than internal implementation details. For trivial fixes with no Vertical Slice, this test is the primary regression prevention mechanism and is mandatory. The filenames and commit message MUST NOT include the bug's Case File number or any bug-specific identifier (e.g., do NOT use `test_bug_NN_` or `NN` in the commit message).</step>
|
|
63
|
-
<step n="2" name="Red Phase">EXECUTE the newly created regression test in isolation to confirm it fails (RED). This empirically proves the test correctly captures the original bug. If the test passes, it does not accurately reproduce the bug; return to step 1 and refine the test.</step>
|
|
64
|
-
<step n="3" name="Apply Fix">Apply the verified hypothesis from the shadow file to the target production file(s) in `src/`. Execute the regression test again to confirm it now passes (GREEN). This proves the fix resolves the specific bug.</step>
|
|
65
|
-
<step n="4" name="MRE Re-Verification">Re-run the original MRE script against the fixed production code to confirm the exact original symptom is resolved. This ensures the regression test did not accidentally over-specify or under-specify the bug; the original reproduction scenario must still pass against the real fixed code.</step>
|
|
66
|
-
<step n="5" name="Integration Verification">EXECUTE `make test` to run the entire suite (acceptance, unit and integration) and ensure no regressions were introduced. If any test fails, do NOT discard work via `git reset --hard`; instead, diagnose the failure by updating your Rationale, make surgical adjustments to preserve working code and uncommitted context, and return to the Investigation phase. If you cannot make progress, transition the session to OFF-TRACK 🟡.</step>
|
|
67
|
-
</phase>
|
|
68
|
-
|
|
69
|
-
<phase n="7" name="Version Control">
|
|
67
|
+
<phase n="6" name="Version Control">
|
|
70
68
|
<goal>Clean up the workspace and execute the commit following the VCP. After committing, triage any technical debt logged during investigation.</goal>
|
|
71
|
-
<step n="1" name="Teardown">Explicitly delete
|
|
72
|
-
<step n="2" name="Commit">Execute the commit following the VCP to test, stage,
|
|
73
|
-
<step n="3" name="Debt Triage">Triage any `[DEBT]` entries logged in your State Dashboard
|
|
69
|
+
<step n="1" name="Teardown">Explicitly delete incidental temporary logs and throwaway probes. You MUST PRESERVE the final MRE script and shadow-file proof for the new Vertical Slice: consolidate them into a feature-specific subfolder `spikes/debug/{scope-slug}/` (mirroring the Prototyper's `spikes/prototypes/{scope-slug}/` convention) and link it from the slice. Run `git status` to verify.</step>
|
|
70
|
+
<step n="2" name="Commit">Execute the commit following the VCP to test, stage, and commit the Case File, the preserved MRE/shadow evidence, and the new Vertical Slice (the push is deferred to the Conclusion phase). You MUST ensure the workspace is clean and all documentation changes are committed.</step>
|
|
71
|
+
<step n="3" name="Debt Triage">Triage any `[DEBT]` entries logged in your State Dashboard per the Technical Debt Triage policy.</step>
|
|
74
72
|
</phase>
|
|
75
73
|
|
|
76
|
-
<phase n="
|
|
77
|
-
<goal>
|
|
78
|
-
<step n="1" name="Handoff">
|
|
74
|
+
<phase n="7" name="Conclusion">
|
|
75
|
+
<goal>Hand off the new Vertical Slice to the Developer.</goal>
|
|
76
|
+
<step n="1" name="Handoff">Message the user to start a new session with the Developer to implement the fix from the new Vertical Slice. You never apply the fix yourself; the slice always carries its own focused, self-contained context.</step>
|
|
79
77
|
</phase>
|
|
80
78
|
|
|
81
79
|
</workflow>
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
<workflow>
|
|
14
14
|
<description>The Iterative Delivery Cycle. You MUST execute this full cycle (including VCP) for EACH individual deliverable separately.</description>
|
|
15
|
-
<phase_tracking>The phases below are tracked in the State Dashboard. Use these exact phase names in the dashboard's
|
|
15
|
+
<phase_tracking>The phases below are tracked in the State Dashboard. Use these exact phase names in the dashboard's WORKFLOW list.</phase_tracking>
|
|
16
16
|
<artifact_templates>When you create a project artifact, use the corresponding Markdown template from `docs/templates/` (e.g., `vertical-slice.md`, `case-file.md`, `task-brief.md`). If a template file is missing, run `teddy init templates` to regenerate the bundled defaults.</artifact_templates>
|
|
17
17
|
|
|
18
18
|
<phase n="1" name="Orientation">
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
- DI Purity: Ensure no concrete defaults exist in your new code. Service Locator and `mock.patch` are forbidden.
|
|
63
63
|
- Clean Code: Apply SRP locally. Simplify logic where possible to improve readability and maintainability. Remove stale comments.
|
|
64
64
|
- Structural Integrity: Avoid local imports or TYPE_CHECKING hacks; log as `[DEBT]` in your State Dashboard if unavoidable.
|
|
65
|
-
- Scoped Quality Suppressions:
|
|
65
|
+
- Scoped Quality Suppressions: Follow the Quality-Gate Bypass Policy.
|
|
66
66
|
</step>
|
|
67
67
|
<step n="4" name="Loop Exit">
|
|
68
68
|
If the implementation fully satisfies the SINGLE current deliverable, you MUST exit the inner loop and proceed immediately to Phase 3 (Integration). You are strictly forbidden from changing your active Deliverable or starting a new one until the current one is version controlled.
|
|
@@ -92,19 +92,19 @@
|
|
|
92
92
|
<goal>Update tracking documents and record implementation findings for this deliverable item.</goal>
|
|
93
93
|
<step n="1" name="Mark Progress">`EDIT` the vertical slice doc to mark the current deliverable as `[x]`. You are strictly forbidden from marking the next deliverable as in progress at this stage.</step>
|
|
94
94
|
<step n="2" name="Sync Slice Notes">`EDIT` the vertical slice to record the implementation details and the reasoning behind them under the `## Implementation Notes` section. If this section does not exist, you MUST create it at the end of the file.</step>
|
|
95
|
-
<step n="3" name="Debt Triage">Triage any `[DEBT]` from your State Dashboard
|
|
95
|
+
<step n="3" name="Debt Triage">Triage any `[DEBT]` from your State Dashboard per the Technical Debt Triage policy.</step>
|
|
96
96
|
<step n="4" name="Perform As-Built Update">Before finishing the last deliverable of the slice, perform a final `EDIT` on the `Component Design Docs`. Use the `Implementation Notes` you have gathered to make final, minor corrections, ensuring the docs perfectly reflect the as-built reality of the code and update their status.</step>
|
|
97
|
-
<step n="5" name="Delivery Gate">Upon completing all documentation steps, proceed immediately to Delivery. You are strictly forbidden from beginning Orientation for the next deliverable until the current one is committed
|
|
97
|
+
<step n="5" name="Delivery Gate">Upon completing all documentation steps, proceed immediately to Delivery. You are strictly forbidden from beginning Orientation for the next deliverable until the current one is committed (the push is deferred to the session Conclusion, per the VCP).</step>
|
|
98
98
|
</phase>
|
|
99
99
|
|
|
100
100
|
<phase n="5" name="Delivery">
|
|
101
101
|
<goal>Verify workspace state, hand off versioned history, and conduct final user verification.</goal>
|
|
102
102
|
<step n="1" name="Teardown">Explicitly delete all temporary logs and workspace detritus in `spikes/` then run `git status` to verify.</step>
|
|
103
103
|
<step n="2" name="Consistency Check">If this is the last deliverable, execute `git grep` for deleted/renamed components and resolve stale hits in documentation/comments. If cross-deliverable logic duplication or structural friction is found across the slice, do NOT modify code ad-hoc during Delivery; instead, `EDIT` the slice to append an explicit `Refactor` or `Cleanup` deliverable and loop back to Phase 1 to resolve it.</step>
|
|
104
|
-
<step n="3" name="Version Control">Execute the commit following the VCP for the current deliverable in its own turn. Derive the `<scope>` for the commit message from the Vertical Slice's `Scope Slug` metadata field if present. The slice number (e.g., `MM-NN`) MUST NOT appear in source file names, test file names, or commit messages — use descriptive, functionality-based naming instead. If any quality gates or pre-commit checks fail, you MUST either: 1) Refactor the code/tests immediately to comply with the intention of the rule, or 2) Log the issue as technical debt in the active Vertical Slice; the pre-commit stage is advisory and will not block the commit, but you MUST make a follow-up cleanup commit to resolve non-trivial quality issues before resuming feature work.
|
|
104
|
+
<step n="3" name="Version Control">Execute the commit following the VCP for the current deliverable in its own turn. Derive the `<scope>` for the commit message from the Vertical Slice's `Scope Slug` metadata field if present. The slice number (e.g., `MM-NN`) MUST NOT appear in source file names, test file names, or commit messages — use descriptive, functionality-based naming instead. If any quality gates or pre-commit checks fail, you MUST either: 1) Refactor the code/tests immediately to comply with the intention of the rule, or 2) Log the issue as technical debt in the active Vertical Slice; the pre-commit stage is advisory and will not block the commit, but you MUST make a follow-up cleanup commit to resolve non-trivial quality issues before resuming feature work. Any quality-gate bypass MUST follow the Quality-Gate Bypass Policy.</step>
|
|
105
105
|
<step n="4" name="Atomic Delivery">You are strictly forbidden from starting a new deliverable until the current one is version controlled. If the slice has remaining uncompleted deliverables, reset the State Dashboard and proceed to the next item's Orientation. If all deliverables are complete, proceed to the Verification step.</step>
|
|
106
106
|
<step n="5" name="Verification">Execute the slice's `## Verification` checklist across multiple real end-user scenarios via `EXECUTE` actions (running real entry points / CLI commands with various flags and inspecting real outputs/exit codes), or through spikes. For steps that genuinely require manual user interaction (e.g., UI changes), clearly describe what the user needs to verify and request their confirmation via Message.
|
|
107
|
-
- If all steps pass: `EDIT` the slice doc to set Status to `Completed` and all verification steps as done, mark the milestone deliverable as `[x]`, and execute the commit following the VCP. Then route the terminal handoff dynamically based on the active Milestone's state:
|
|
107
|
+
- If all steps pass: `EDIT` the slice doc to set Status to `Completed` and all verification steps as done, mark the milestone deliverable as `[x]`, and execute the commit following the VCP. As this terminal step concludes the session, finish the VCP by running `make push` and reporting the CI results. Then route the terminal handoff dynamically based on the active Milestone's state:
|
|
108
108
|
- Next slice un-designed (no slice `.md` exists) → Message the user to start a new session with the Architect to design the next slice JIT.
|
|
109
109
|
- Next slice designed → Message the user to start a new session with the Prototyper (if unresolved `[ ]` Key Unknowns remain) or the Developer.
|
|
110
110
|
- All slices complete in the Milestone → Message the user to start a new session with the Pathfinder to close the milestone and review the roadmap.
|
|
@@ -8,15 +8,15 @@
|
|
|
8
8
|
<instructions>
|
|
9
9
|
<workflow>
|
|
10
10
|
<description>The Goal-Oriented Discovery Framework to identify the optimal strategic path and produce the required artifacts for execution. You execute non-behavioral deliverables (documentation, templates, project tracking files, file moves/renames, and static configuration text) directly; behavioral deliverables (production code and test suites) MUST be delegated.</description>
|
|
11
|
-
<phase_tracking>The phases below are tracked in the State Dashboard. Use these exact phase names in the dashboard's
|
|
11
|
+
<phase_tracking>The phases below are tracked in the State Dashboard. Use these exact phase names in the dashboard's WORKFLOW list.</phase_tracking>
|
|
12
12
|
<artifact_templates>When you create a project artifact, use the corresponding Markdown template from `docs/templates/` (e.g., `specification-document.md`, `milestone.md`, `task-brief.md`). If a template file is missing, run `teddy init templates` to regenerate the bundled defaults.</artifact_templates>
|
|
13
13
|
|
|
14
14
|
<phase n="1" name="Triage">
|
|
15
|
-
<goal>
|
|
15
|
+
<goal>Orient autonomously: isolate the objective, outline missing info, and prepare constructive criticism/alternatives before planning or exploration. Do NOT open a user Message here — the single consolidated alignment gate lives in Phase 3 (Synthesis).</goal>
|
|
16
16
|
<step n="1" name="Isolate & Prioritize">Isolate ONE objective. Act as an active partner. You MUST perform a Prioritization Assessment against the `PROJECT.md` Roadmap and active Milestones. Determine if this new request should be queued for later or if it interrupts current WIP. If interrupting, plan to explicitly pause/demote current WIP and insert this directly into the active planning documents.</step>
|
|
17
17
|
<step n="2" name="Sanity Check">Optional. Run a quick codebase search strictly to orient yourself *only* if necessary. Skip if the context is already fully clear.</step>
|
|
18
18
|
<step n="3" name="Context Review">Explore relevant specification documents in `docs/project/specs/` and milestone documents in `docs/project/milestones/` related to the request topic.</step>
|
|
19
|
-
<step n="4" name="
|
|
19
|
+
<step n="4" name="Findings Brief">Record your initial findings in the Rationale: the isolated objective, the missing information that Discovery must resolve, and any constructive criticism or simpler alternative approaches you intend to propose. Do NOT open a user Message here — all user alignment is consolidated into the single gate in Phase 3 (Synthesis). You are empowered to push back and suggest better alternatives, but do so at that single gate.</step>
|
|
20
20
|
</phase>
|
|
21
21
|
|
|
22
22
|
<phase n="2" name="Discovery">
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
<phase n="3" name="Synthesis">
|
|
29
29
|
<goal>Analyze all findings and propose the optimal strategic path to the user.</goal>
|
|
30
30
|
<step n="1" name="Analysis">Analyze all information gathered during Discovery to determine the true complexity and risk.</step>
|
|
31
|
-
<step n="2" name="Alignment Gate">Message the user with the recommended execution strategy and justification. Outline the proposed journey, explain why this approach is optimal for the context, and define the expected outcomes of the next phase. Do NOT include handoff commands (e.g., `teddy start`) in this Message yet.</step>
|
|
31
|
+
<step n="2" name="Alignment Gate">This is the single consolidated user gate for the session — do not open a separate Triage dialogue. Message the user with the recommended execution strategy and justification. Outline the proposed journey, explain why this approach is optimal for the context, and define the expected outcomes of the next phase. Do NOT include handoff commands (e.g., `teddy start`) in this Message yet.</step>
|
|
32
32
|
</phase>
|
|
33
33
|
|
|
34
34
|
<phase n="4" name="Documentation">
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
Verify impact of the planned changes via `EXECUTE git grep` on target components. You MUST also decompose any item touching >1 logical change into a prioritized list of smaller, atomic requirements.
|
|
41
41
|
</step>
|
|
42
42
|
<step n="3" name="Finalize Artifact">If delegating, `EDIT` the document with all the rich context gathered, ensuring it is a complete and actionable plan for the next agent.</step>
|
|
43
|
-
<step n="4" name="Debt Triage">Triage any `[DEBT]` from your State Dashboard
|
|
43
|
+
<step n="4" name="Debt Triage">Triage any `[DEBT]` from your State Dashboard per the Technical Debt Triage policy.</step>
|
|
44
44
|
</phase>
|
|
45
45
|
|
|
46
46
|
<phase n="5" name="Version Control">
|