teddy-cli 0.1.17.dev1326__tar.gz → 0.1.17.dev1328__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.
Files changed (162) hide show
  1. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/PKG-INFO +1 -1
  2. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/pyproject.toml +1 -1
  3. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/ports/inbound/plan_validator.py +0 -4
  4. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/ports/outbound/markdown_report_formatter.py +0 -4
  5. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/update_checker.py +14 -5
  6. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/resources/MRP.md +2 -2
  7. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/resources/config/prompts/architect.md +1 -1
  8. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/resources/config/prompts/debugger.md +3 -1
  9. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/resources/config/prompts/developer.md +13 -8
  10. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/resources/config/prompts/pathfinder.md +2 -2
  11. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/resources/templates/ci.md +1 -1
  12. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/resources/templates/makefile.md +9 -3
  13. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/resources/templates/vertical-slice.md +14 -9
  14. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/.gitignore +0 -0
  15. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/LICENSE +0 -0
  16. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/README.md +0 -0
  17. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/__init__.py +0 -0
  18. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/__main__.py +0 -0
  19. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/__init__.py +0 -0
  20. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/inbound/__init__.py +0 -0
  21. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/inbound/cli_formatter.py +0 -0
  22. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/inbound/cli_helpers.py +0 -0
  23. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/inbound/session_cli_handlers.py +0 -0
  24. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/inbound/textual_plan_reviewer.py +0 -0
  25. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_app.py +0 -0
  26. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_editor.py +0 -0
  27. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_execution.py +0 -0
  28. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_helpers.py +0 -0
  29. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_logic.py +0 -0
  30. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_previews.py +0 -0
  31. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_widgets.py +0 -0
  32. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/outbound/__init__.py +0 -0
  33. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/outbound/console_interactor.py +0 -0
  34. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/outbound/console_interactor_ask_loop.py +0 -0
  35. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/outbound/console_interactor_helpers.py +0 -0
  36. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/outbound/console_tooling.py +0 -0
  37. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/outbound/filesystem_helpers.py +0 -0
  38. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/outbound/litellm_adapter.py +0 -0
  39. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/outbound/local_file_system_adapter.py +0 -0
  40. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +0 -0
  41. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/outbound/openrouter_hydrator.py +0 -0
  42. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/outbound/shell_adapter.py +0 -0
  43. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/outbound/shell_command_builder.py +0 -0
  44. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/outbound/suppressed_logging.py +0 -0
  45. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/outbound/system_environment_adapter.py +0 -0
  46. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/outbound/system_environment_inspector.py +0 -0
  47. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/outbound/system_time_adapter.py +0 -0
  48. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/outbound/terminal_quit_key_listener.py +0 -0
  49. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/outbound/web_scraper_adapter.py +0 -0
  50. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/outbound/web_searcher_adapter.py +0 -0
  51. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/adapters/outbound/yaml_config_adapter.py +0 -0
  52. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/container.py +0 -0
  53. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/__init__.py +0 -0
  54. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/domain/__init__.py +0 -0
  55. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/domain/models/__init__.py +0 -0
  56. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/domain/models/action_ports.py +0 -0
  57. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/domain/models/change_set.py +0 -0
  58. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/domain/models/drift_report.py +0 -0
  59. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/domain/models/exceptions.py +0 -0
  60. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/domain/models/execution_report.py +0 -0
  61. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/domain/models/orchestrator_ports.py +0 -0
  62. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/domain/models/plan.py +0 -0
  63. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/domain/models/planning_ports.py +0 -0
  64. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/domain/models/project_context.py +0 -0
  65. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/domain/models/report_assembly_data.py +0 -0
  66. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/domain/models/session.py +0 -0
  67. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/domain/models/shell_output.py +0 -0
  68. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/domain/models/web_search_results.py +0 -0
  69. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/ports/__init__.py +0 -0
  70. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/ports/inbound/__init__.py +0 -0
  71. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/ports/inbound/edit_simulator.py +0 -0
  72. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/ports/inbound/get_context_use_case.py +0 -0
  73. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/ports/inbound/init.py +0 -0
  74. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/ports/inbound/plan_parser.py +0 -0
  75. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/ports/inbound/plan_reviewer.py +0 -0
  76. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/ports/inbound/planning_use_case.py +0 -0
  77. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/ports/inbound/run_plan_use_case.py +0 -0
  78. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/ports/outbound/__init__.py +0 -0
  79. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/ports/outbound/config_service.py +0 -0
  80. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/ports/outbound/environment_inspector.py +0 -0
  81. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/ports/outbound/execution_report_assembler.py +0 -0
  82. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/ports/outbound/file_system_manager.py +0 -0
  83. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/ports/outbound/llm_client.py +0 -0
  84. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/ports/outbound/prompt_manager.py +0 -0
  85. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/ports/outbound/quit_key_listener.py +0 -0
  86. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/ports/outbound/repo_tree_generator.py +0 -0
  87. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/ports/outbound/session_loop_guard.py +0 -0
  88. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/ports/outbound/session_manager.py +0 -0
  89. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/ports/outbound/session_repository.py +0 -0
  90. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/ports/outbound/shell_executor.py +0 -0
  91. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/ports/outbound/system_environment.py +0 -0
  92. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/ports/outbound/time_service.py +0 -0
  93. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/ports/outbound/user_interactor.py +0 -0
  94. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/ports/outbound/web_scraper.py +0 -0
  95. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/ports/outbound/web_searcher.py +0 -0
  96. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/__init__.py +0 -0
  97. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/action_changeset_builder.py +0 -0
  98. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/action_diff_manager.py +0 -0
  99. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/action_dispatcher.py +0 -0
  100. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/action_executor.py +0 -0
  101. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/action_factory.py +0 -0
  102. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/action_parser_complex.py +0 -0
  103. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/action_parser_strategies.py +0 -0
  104. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/context_service.py +0 -0
  105. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/edit_simulator.py +0 -0
  106. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/execution_orchestrator.py +0 -0
  107. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/execution_report_assembler.py +0 -0
  108. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/init_service.py +0 -0
  109. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/markdown_plan_parser.py +0 -0
  110. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/markdown_report_formatter.py +0 -0
  111. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/parser_infrastructure.py +0 -0
  112. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/parser_metadata.py +0 -0
  113. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/parser_reporting.py +0 -0
  114. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/plan_validator.py +0 -0
  115. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/planning_service.py +0 -0
  116. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/prompt_manager.py +0 -0
  117. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/session_lifecycle_manager.py +0 -0
  118. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/session_loop_guard.py +0 -0
  119. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/session_orchestrator.py +0 -0
  120. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/session_planner.py +0 -0
  121. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/session_pruning_service.py +0 -0
  122. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/session_replanner.py +0 -0
  123. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/session_repository.py +0 -0
  124. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/session_service.py +0 -0
  125. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/templates/execution_report.md.j2 +0 -0
  126. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/validation_rules/__init__.py +0 -0
  127. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/validation_rules/edit.py +0 -0
  128. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/validation_rules/edit_matcher.py +0 -0
  129. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/validation_rules/edit_matcher_heuristics.py +0 -0
  130. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/validation_rules/execute.py +0 -0
  131. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/validation_rules/filesystem.py +0 -0
  132. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/validation_rules/helpers.py +0 -0
  133. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/services/validation_rules/message.py +0 -0
  134. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/utils/__init__.py +0 -0
  135. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/utils/diff.py +0 -0
  136. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/utils/interrupt_guard.py +0 -0
  137. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/utils/io.py +0 -0
  138. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/utils/markdown.py +0 -0
  139. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/utils/paths.py +0 -0
  140. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/utils/serialization.py +0 -0
  141. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/utils/session_notices.py +0 -0
  142. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/utils/stdin_ownership.py +0 -0
  143. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/utils/string.py +0 -0
  144. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/core/utils/terminal.py +0 -0
  145. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/prompts.py +0 -0
  146. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/registries/__init__.py +0 -0
  147. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/registries/infrastructure.py +0 -0
  148. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/registries/reviewer.py +0 -0
  149. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/registries/validators.py +0 -0
  150. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/resources/__init__.py +0 -0
  151. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/resources/config/__init__.py +0 -0
  152. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/resources/config/config.yaml +0 -0
  153. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/resources/config/init.context +0 -0
  154. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/resources/config/prompts/assistant.md +0 -0
  155. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/resources/config/prompts/prototyper.md +0 -0
  156. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/resources/templates/ARCHITECTURE.md +0 -0
  157. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/resources/templates/PROJECT.md +0 -0
  158. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/resources/templates/case-file.md +0 -0
  159. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/resources/templates/component-design.md +0 -0
  160. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/resources/templates/milestone.md +0 -0
  161. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/resources/templates/pre-commit.md +0 -0
  162. {teddy_cli-0.1.17.dev1326 → teddy_cli-0.1.17.dev1328}/src/teddy_executor/resources/templates/specification-document.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: teddy-cli
3
- Version: 0.1.17.dev1326
3
+ Version: 0.1.17.dev1328
4
4
  Summary: The local-first, test-driven agentic engineering harness. Because you should own the means of development.
5
5
  Author: Raphael Atteritano
6
6
  License: AGPL-3.0-only
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "teddy-cli"
3
- version = "0.1.17.dev1326"
3
+ version = "0.1.17.dev1328"
4
4
  description = "The local-first, test-driven agentic engineering harness. Because you should own the means of development."
5
5
  readme = "README.md"
6
6
  keywords = [
@@ -2,10 +2,6 @@
2
2
  This module defines the inbound port for plan validation.
3
3
  """
4
4
 
5
- # Placeholder content
6
- # The Developer will implement this based on the design document.
7
- # See: docs/core/ports/inbound/plan_validator.md
8
-
9
5
  from abc import ABC, abstractmethod
10
6
  from typing import Dict, Optional, Sequence
11
7
 
@@ -2,10 +2,6 @@
2
2
  This module defines the outbound port for markdown report formatting.
3
3
  """
4
4
 
5
- # Placeholder content
6
- # The Developer will implement this based on the design document.
7
- # See: docs/core/ports/outbound/markdown_report_formatter.md
8
-
9
5
  from abc import ABC, abstractmethod
10
6
 
11
7
 
@@ -178,6 +178,8 @@ def write_update_cache(cache_path: Path, latest_version: str) -> None:
178
178
  """
179
179
  Atomically write the cache file (write to temp file, rename).
180
180
  Ensures the main thread never reads a partially written file.
181
+ The write is best-effort: a directory-creation or write failure is
182
+ logged at debug level and swallowed.
181
183
  """
182
184
  import json
183
185
  from datetime import datetime, timezone
@@ -186,9 +188,9 @@ def write_update_cache(cache_path: Path, latest_version: str) -> None:
186
188
  "latest_version": latest_version,
187
189
  "checked_at": datetime.now(timezone.utc).isoformat(),
188
190
  }
189
- cache_path.parent.mkdir(parents=True, exist_ok=True)
190
191
  tmp_path = cache_path.with_suffix(".tmp")
191
192
  try:
193
+ cache_path.parent.mkdir(parents=True, exist_ok=True)
192
194
  tmp_path.write_text(
193
195
  json.dumps(cache_data, indent=2), encoding="utf-8", newline=""
194
196
  )
@@ -206,8 +208,15 @@ def background_check(cache_path: Path, index_url: str = PYPI_URL) -> None:
206
208
  """
207
209
  Non-blocking background version check.
208
210
  Intended to run in a daemon thread. Fetches latest version from PyPI
209
- and writes it to cache. All errors are silently caught.
211
+ and writes it to cache. Every error is swallowed and logged at debug
212
+ level, so a late cache write can never fail the owning process.
210
213
  """
211
- latest = fetch_latest_version(index_url)
212
- if latest is not None:
213
- write_update_cache(cache_path, latest)
214
+ import logging
215
+
216
+ try:
217
+ latest = fetch_latest_version(index_url)
218
+ if latest is not None:
219
+ write_update_cache(cache_path, latest)
220
+ except Exception as e:
221
+ logger = logging.getLogger(__name__)
222
+ logger.debug("background_check failed: %s", e)
@@ -118,7 +118,7 @@ Applies to all user-facing Messages and turn titles:
118
118
  ### Pragmatic Simplified Technical English
119
119
 
120
120
  All text in Rationale, Message, action descriptions, and documentation must adhere to Pragmatic STE:
121
- Write in grammatically complete sentences using active voice, standard articles, and no semicolons, avoiding conversational fluff and clipped fragments. Limit procedural instructions to 20 words in the imperative mood with conditions placed before actions. Limit descriptive statements to 25 words with one fact per sentence. Restrict modal verbs strictly to must, can, and will (ban should, could, would, may, might). Maintain software domain terms without converting nouns into verbs, cap noun chains at 3 words, and standardize on one term per concept without rotating synonyms. Use only standard industry terms instead of invented jargon and metaphors.
121
+ Write in grammatically complete sentences using active voice, standard articles, and no semicolons, avoiding conversational fluff and clipped fragments. Limit procedural instructions to 20 words in the imperative mood with conditions placed before actions. Limit descriptive statements to 25 words with one fact per sentence. Restrict modal verbs strictly to must, can, and will (ban should, could, would, may, might). Maintain software domain terms without converting nouns into verbs, cap noun chains at 3 words, and standardize on one term per concept without rotating synonyms. Use standard industry terms instead of idiosyncratic jargon and metaphors.
122
122
 
123
123
  ### Quality-Gate Bypass Policy
124
124
 
@@ -126,7 +126,7 @@ Prefer config-level bypasses (pyproject `per-file-ignores`, pre-commit `exclude`
126
126
 
127
127
  ### Code and Naming Hygiene
128
128
 
129
- All code comments and file names must remain self-contained without fragile document citations. Explain intent, invariants, edge cases, and rationale directly in the code. Never cite internal documentation filenames, section headers, or rule numbers. Name files, functions, and tests after the domain concept, scenario, or behavior under test. Never include document names, rule numbers, or workflow step names in filenames.
129
+ Write semantic, self-documenting code where naming and structure make what the code does immediately obvious. Reserve comments exclusively for why (business rationale, non-obvious invariants, constraints, or algorithmic trade-offs); never repeat what code already states. Write comments as full, natural sentences without artificial line-breaking or column wrapping. When editing existing code, update or improve confusing comments rather than leaving stale text. Never cite internal documentation filenames, section headers, rule numbers, or workflow steps in code comments, action descriptions, or turn titles. Name files, functions, and tests after the domain concept, scenario, or behavior under test.
130
130
 
131
131
  ## Response Format
132
132
 
@@ -56,4 +56,4 @@ Follow these phases and steps in order. Keep track of your progress in your Stat
56
56
  2. **Commit and Push:**
57
57
  Execute `make commit`. If a remote is configured, run `make push`.
58
58
  3. **Handoff:**
59
- Message the user with an overview of the drafted milestone slices and their dependency order. Provide the command to start the next session for the foundational slice. If independent slices can run in parallel, provide commands for each slice. When providing multiple commands for parallel execution, instruct the user to run each session in a separate workspace (such as a git worktree) to prevent conflicts. Route to the Prototyper if the target slice contains unresolved Key Unknowns; otherwise route directly to the Developer.
59
+ Message the user with an overview of the drafted milestone slices and their dependency order. Provide the command to start the next session for the foundational slice. If independent slices can run in parallel, provide commands for each slice. When providing multiple commands for parallel execution, instruct the user to run each session in a separate workspace. Route to the Prototyper if the target slice contains unresolved Key Unknowns; otherwise route directly to the Developer.
@@ -58,13 +58,15 @@ Follow these phases and steps in order. Keep track of your progress in your Stat
58
58
 
59
59
  Repeat until all discrepancies are resolved.
60
60
  6. **Isolated Sandbox Verification:**
61
- You are strictly forbidden from modifying `src/` or `tests/` to test your fix. Once you have a high-confidence hypothesis, prove it using a Sandbox Replica:
61
+ You are strictly forbidden from modifying `src/` or `tests/` to test hypotheses. Once you have a high-confidence hypothesis, prove it using a Sandbox Replica:
62
62
  1. CREATE a replica of the faulty source file at `spikes/debug/{scope-slug}/replica_{filename}.ext`.
63
63
  2. Adjust relative imports inside the replica to resolve unaltered dependencies from `src/`.
64
64
  3. Apply your proposed fix to the replica.
65
65
  4. EDIT your MRE script to import the replica instead of the production module.
66
66
  5. EXECUTE the MRE. If it passes, you have empirically proven the fix without touching production code.
67
67
  6. Always EDIT the Case File to record verification results. If it fails, update the Causal Model and restart investigation.
68
+
69
+ Direct Resolution vs. Handoff: If the proven fix is a small self-contained change, apply the fix to `src/`, add or update a permanent regression test in `tests/`, and verify via `make test`. A small change is strictly qualified as: touching at most one production file and its matching test file, introducing no new architectural boundaries or shared contracts, and keeping `make test` green. If a change exceeds this scope or breaks unrelated tests, halt direct execution immediately.
68
70
  7. **Impact Audit:**
69
71
  Analyze components touched by the proposed fix. Use EXECUTE `git grep` to search for direct upstream callers (including test files and harness fixtures) and downstream dependencies (for orphaned code, unused parameters, or dead functions) that the change affects. If the fix modifies a shared port, signature, or data contract with multiple consumers, document the required migration path so the Developer can partition the change into non-breaking steps.
70
72
  8. **Case File Synchronization:**
@@ -17,13 +17,11 @@ Follow these phases and steps in order. Keep track of your progress in your Stat
17
17
  2. **Discovery:**
18
18
  Use EXECUTE `git grep`, READ, and RESEARCH to gather codebase context and artifacts required for implementation. Search the codebase and test suite for existing implementations or coverage of your task to prevent logic and test duplication. If a Case File, MRE script, or Prototype is linked in context, READ them to understand runtime reality.
19
19
  3. **Plan Initialization / Audit:**
20
- If no slice exists, CREATE one following conventions in `docs/project/PROJECT.md` informed by discovery findings, linking any reference files and placing Wiring first as the tracer bullet.
20
+ If no slice exists, CREATE one following conventions in `docs/project/PROJECT.md` informed by discovery findings, linking any reference files, placing Wiring first as the tracer bullet, and run `make commit` to version control the new plan.
21
21
 
22
- If a slice already exists, audit target components via EXECUTE `git grep`. Verify that all deliverables keep all tests passing at every commit. If a deliverable attempts a breaking signature change to a Shared Seam (git grep count greater than 1) without a migration plan, immediately EDIT the slice to re-partition the work into non-breaking steps (expand -> migrate -> contract). Decompose any item touching more than one logical change into smaller atomic deliverables. Verify Wiring is placed first.
23
-
24
- Set slice Status to In Progress. If the slice was newly created or modified during audit, run `make commit` to version control the plan before starting work.
25
- 4. **Mark Deliverable:**
26
- Identify the next uncompleted deliverable in the vertical slice. Immediately EDIT the vertical slice to mark this single focused deliverable as in progress using `[▶]`. Batching deliverables into one cycle execution is strictly forbidden.
22
+ If a slice already exists, audit target components via EXECUTE `git grep`. Verify that all deliverables keep all tests passing at every commit. If a deliverable attempts a breaking signature change to a Shared Seam (git grep count greater than 1) without a migration plan, immediately EDIT the slice to re-partition the work into non-breaking steps (expand -> migrate -> contract). Decompose any item touching more than one logical change into smaller atomic deliverables. Verify Wiring is placed first. If the audit required structural plan changes, run `make commit` to record them before starting work.
23
+ 4. **Activate Slice & Mark Deliverable:**
24
+ Set slice Status to In Progress. Identify the next uncompleted deliverable in the vertical slice and mark it in progress using `[▶]`. Do not commit this status change separately; commit it alongside the deliverable in the Delivery phase. Batching deliverables into one cycle execution is strictly forbidden.
27
25
 
28
26
  ### Implementation
29
27
  **Goal:** Satisfy the current deliverable requirements via Just-In-Time implementation without overbuilding.
@@ -65,8 +63,12 @@ Follow these phases and steps in order. Keep track of your progress in your Stat
65
63
  if your new tests render existing tests obsolete, delete the redundant tests.
66
64
  - **DI Purity:**
67
65
  make sure that no concrete defaults exist in new code. Service Locator and `mock.patch` are forbidden.
66
+ - **Apply KISS:**
67
+ simplify logic by removing redundant steps, intermediate variables, or consolidating convoluted branches without altering behavior.
68
+ - **Apply SRP:**
69
+ ensure each class, function, and module has exactly one reason to change. Extract distinct responsibilities into cohesive helpers.
68
70
  - **Clean Code:**
69
- apply SRP locally to simplify logic, improve readability, and remove stale comments.
71
+ simplify logic, improve readability, and update or improve confusing comments rather than leaving stale text.
70
72
  - **Structural Refactoring:**
71
73
  if refactoring requires cross-cutting or structural changes outside the slice scope, record it in the roadmap in `docs/project/PROJECT.md` rather than attempting out-of-scope rewrites.
72
74
  4. **Loop Exit:**
@@ -121,6 +123,8 @@ Follow these phases and steps in order. Keep track of your progress in your Stat
121
123
  verify that NO skeleton responses, hardcoded mock values, or temporary stubs remain in `src/`. All outputs must derive from production logic.
122
124
  - **Upstream & Downstream Audit:**
123
125
  run EXECUTE `git grep` to audit upstream callers (verifying all callers, test files, and harness fixtures use updated contracts) and downstream dependencies (pruning orphaned helper methods, unused parameters, or dead functions).
126
+ - **Test Suite Hygiene & Shared Harness Audit:**
127
+ audit test suites for redundant test coverage. Consolidate tests that assert identical execution paths with no variation in invariant coverage. Delete obsolete unit tests superseded by broader regression suites. Verify tests consistently use shared test harness fixtures (drivers, observers, fakes) instead of ad-hoc mocks or duplicated setup logic; extract repeated test infrastructure into the shared harness.
124
128
  - **Immediate or slice-scoped:**
125
129
  append Refactor or Cleanup deliverables to the active Vertical Slice and execute them through the delivery cycle before completing the slice.
126
130
  - **Systemic or out-of-scope:**
@@ -136,8 +140,9 @@ Follow these phases and steps in order. Keep track of your progress in your Stat
136
140
  If a remote is configured, run `make push`. If remote CI is configured, run `make ci-watch` to monitor and inspect remote CI results. If blocking test failures occur, fix them immediately, commit, and push again. For non-blocking quality gate issues, address them if contained or record them in the roadmap in `docs/project/PROJECT.md`.
137
141
  2. **User Verification & Handoff:**
138
142
  Message the user with concise step-by-step instructions extracted from the slice `Verification` section so the user can test the delivered capability.
143
+ State the current branch, commit hash, and remote CI outcome, noting when a pull request must be opened.
139
144
  Include dynamic routing instructions for the next session based on project state:
140
- - **Next Slice Ready:** Route to the Developer for the next slice whose dependencies are met. If multiple independent slices are ready for parallel execution, provide start commands for each and instruct the user to run them in separate workspaces (such as git worktrees).
145
+ - **Next Slice Ready:** Route to the Developer for the next slice whose dependencies are met. If multiple independent slices are ready for parallel execution, provide start commands for each and instruct the user to run them in separate workspaces.
141
146
  - **Unresolved Unknowns:** Route to the Prototyper if the next slice contains unresolved Key Unknowns.
142
147
  - **Milestone Complete:** Route to the Architect if the milestone is complete and planned milestones remain in the Roadmap. The Architect will perform the health check, initialize the next milestone, and draft its slices.
143
148
  - **Roadmap Complete:** Route to the Pathfinder only if all roadmap milestones are complete and the product requires new strategic direction.
@@ -31,8 +31,8 @@ Follow these phases and steps in order. Keep track of your progress in your Stat
31
31
 
32
32
  1. **Routing Decision:**
33
33
  Analyze discovery findings to classify the request into one execution track: Non-Behavioral, Milestone Feature, Standalone Behavioral, or Bug Report.
34
- 2. **Non-Behavioral Direct Execution:**
35
- If the deliverable is purely non-behavioral (documentation, configs, static type annotations, renames, dead code deletion, or simple non-behavioral code changes), execute it directly in this phase yourself.
34
+ 2. **Direct Execution:**
35
+ If the deliverable is non-behavioral (documentation, configs, static typing, cleanup), or a small self-contained change, execute it directly in this phase. A small change is strictly qualified as: touching at most one production file and its matching test file, introducing no new architectural boundaries or shared contracts, and keeping `make test` green. If a change exceeds this scope or breaks unrelated tests, halt direct execution immediately.
36
36
  3. **Milestone & Specification:**
37
37
  For systemic or milestone features, update the Roadmap in `docs/project/PROJECT.md` and route to the Architect. If establishing permanent system invariants, CREATE or EDIT the specification document in `docs/project/specs/`. The Architect will initialize the milestone document and draft all slices.
38
38
  4. **Ad-hoc Slice Generation:**
@@ -39,7 +39,7 @@ name: CI
39
39
 
40
40
  on:
41
41
  push:
42
- branches: [ main ]
42
+ branches: [ "**" ]
43
43
  pull_request:
44
44
  branches: [ main ]
45
45
  workflow_dispatch: {}
@@ -169,7 +169,7 @@ Attribution is deterministic: SHA → run → run-level + per-job conclusion (ne
169
169
 
170
170
  Key behaviors:
171
171
 
172
- 1. **Automatic SHA and BASE resolution.** `SHA` defaults to current `HEAD` (or `COMMIT=<sha>`), and `BASE` resolves per workflow to the most recent ancestor of `SHA` that carries a run for that workflow (bounded by `BASE_DEPTH`, default 50).
172
+ 1. **Automatic SHA and BASE resolution.** `SHA` defaults to current `HEAD` (or `COMMIT=<sha>`), and `BASE` resolves per workflow to the most recent ancestor of `SHA` that carries a run for that workflow (bounded by `BASE_DEPTH`, default 50). An explicit `BASE=<sha>` pins the baseline verbatim and skips resolution; if the pinned commit carries no run for the workflow, the target fails safe as an unknown base.
173
173
  2. **Registration lag is tolerated by a bounded retry.** CI can fail to register a run for the pushed SHA immediately. The target polls `gh run list --commit <sha>` up to `RETRY_POLLS × RETRY_SLEEP` (default 10 × 2s ≈ 20s) before attributing. It fails safe if the run never registers.
174
174
  3. **No CI is non-blocking.** If the repository has no workflow files under `.github/workflows/` (`*.yml`/`*.yaml`), the target logs `No CI configured - skipping attribution` and exits 0.
175
175
 
@@ -180,6 +180,7 @@ RETRY_POLLS ?= 10
180
180
  RETRY_SLEEP ?= 2
181
181
  DETAIL_LINES ?= 50
182
182
  BASE_DEPTH ?= 50
183
+ BASE ?=
183
184
 
184
185
  ci-watch:
185
186
  @SHA=$$(git rev-parse $${COMMIT:-HEAD}); \
@@ -223,8 +224,8 @@ ci-watch:
223
224
  echo "$$WF: BLOCKING (run=$$NEWCONC) — unknown conclusion — fail-safe block"; \
224
225
  STATUS=1; continue; \
225
226
  fi; \
226
- BASE=""; CUR="$$SHA"; DEPTH=0; \
227
- while [ $$DEPTH -lt $(BASE_DEPTH) ]; do \
227
+ BASE="$(BASE)"; CUR="$$SHA"; DEPTH=0; \
228
+ while [ -z "$$BASE" ] && [ $$DEPTH -lt $(BASE_DEPTH) ]; do \
228
229
  CUR=$$(git rev-parse "$$CUR~1" 2>/dev/null) || break; \
229
230
  [ -n "$$CUR" ] || break; \
230
231
  if [ -n "$$(gh run list --commit "$$CUR" --workflow "$$WF" --json databaseId --jq '.[0].databaseId')" ]; then \
@@ -237,6 +238,10 @@ ci-watch:
237
238
  STATUS=1; continue; \
238
239
  fi; \
239
240
  OLD=$$(gh run list --commit "$$BASE" --workflow "$$WF" --json databaseId --jq '.[0].databaseId'); \
241
+ if [ -z "$$OLD" ]; then \
242
+ echo "$$WF: BLOCKING failure ($$NEWFAIL) — pinned base has no run (unknown base) — YOUR regression"; \
243
+ STATUS=1; continue; \
244
+ fi; \
240
245
  OLDJOBS=$$(gh run view "$$OLD" --json jobs --jq '.jobs | length'); \
241
246
  if [ "$$OLDJOBS" = "0" ]; then \
242
247
  echo "$$WF: BLOCKING failure ($$NEWFAIL) — base run is job-less (invalid workflow, not green) — YOUR regression"; \
@@ -257,6 +262,7 @@ ci-watch:
257
262
  **Usage:**
258
263
  - `make ci-watch` (watches CI for current `HEAD`)
259
264
  - `make ci-watch COMMIT=<sha>` (watches CI for a specific commit)
265
+ - `make ci-watch BASE=<sha>` (pins the comparison baseline to a commit)
260
266
 
261
267
  ## Remote Probing Protocol (RPP)
262
268
 
@@ -7,9 +7,14 @@
7
7
  - **Component Docs:** [links]
8
8
  - **Scope Slug:** `feature-slug` <!-- 1-2 kebab-case words only. -->
9
9
 
10
- ## Business Goal
10
+ ## Goal
11
11
  1-2 sentences describing the user need and measurable value delivered by this slice.
12
12
 
13
+ ## Context
14
+ Key findings, existing contracts, and technical constraints discovered through static code reading or library documentation.
15
+ - `ComponentName`: Description of existing contracts, internal interfaces, or invariants.
16
+ - `LibraryName`: Description of external dependency behavior, configuration, or API signatures.
17
+
13
18
  ## Scenarios
14
19
  Primary user journeys and happy paths. These drive End-to-End Acceptance Tests in the Wiring deliverable.
15
20
 
@@ -32,7 +37,7 @@ Boundary conditions, errors, and validation edge cases. These drive granular Uni
32
37
 
33
38
  **Taxonomy:**
34
39
  - `[Domain]` = Ambiguities in business rules, policy decisions, domain definitions, or scope boundaries. Resolve by asking the user directly.
35
- - `[Technical]` = External dependencies, third-party libraries, APIs, internal state machines, complex algorithms, concurrency, performance, or data storage. Resolve via works-like prototypes.
40
+ - `[Technical]` = External dependencies, third-party libraries, APIs, internal state machines, complex algorithms, concurrency, performance, or data storage. Resolve via works-like prototypes. Do not log items that can be verified through static code reading or library documentation; resolve and record those under Context instead.
36
41
  - `[Functional]` = User-facing ergonomics, CLI flags, terminal rendering, interactive flows, or layout aesthetics. Resolve via looks-like prototypes.
37
42
 
38
43
  **Mandatory De-risking Triggers (must include, but are not limited to):**
@@ -80,10 +85,10 @@ Free-form notes recording decisions, deviations, or discoveries during implement
80
85
  Manual verification steps for user execution at slice conclusion. Provide clear instructions with copy-pasteable commands or interactive UI steps. Do not include automated test commands.
81
86
 
82
87
  **Format:**
83
- - [ ] **Title:**
84
- Run `command <args>`.
85
- Verify output contains `expected output`.
86
- - [ ] **Title:**
87
- Navigate to `[View/Screen]`.
88
- Trigger `[Action]`.
89
- Confirm `[Observed State/Element]`.
88
+ 1. **Title:**
89
+ Run `command <args>`.
90
+ Verify output contains `expected output`.
91
+ 2. **Title:**
92
+ Navigate to `[View/Screen]`.
93
+ Trigger `[Action]`.
94
+ Confirm `[Observed State/Element]`.