teddy-cli 0.1.17.dev1277__tar.gz → 0.1.17.dev1279__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 (166) hide show
  1. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/PKG-INFO +1 -1
  2. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/pyproject.toml +1 -1
  3. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/resources/MRP.xml +1 -1
  4. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/resources/config/prompts/architect.xml +2 -2
  5. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/resources/config/prompts/assistant.xml +1 -1
  6. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/resources/config/prompts/debugger.xml +1 -1
  7. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/resources/config/prompts/developer.xml +5 -4
  8. teddy_cli-0.1.17.dev1279/src/teddy_executor/resources/templates/ARCHITECTURE.md +68 -0
  9. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/resources/templates/PROJECT.md +18 -23
  10. teddy_cli-0.1.17.dev1279/src/teddy_executor/resources/templates/case-file.md +35 -0
  11. teddy_cli-0.1.17.dev1279/src/teddy_executor/resources/templates/component-design.md +38 -0
  12. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/resources/templates/makefile.md +19 -12
  13. teddy_cli-0.1.17.dev1279/src/teddy_executor/resources/templates/milestone.md +17 -0
  14. teddy_cli-0.1.17.dev1279/src/teddy_executor/resources/templates/specification-document.md +12 -0
  15. teddy_cli-0.1.17.dev1279/src/teddy_executor/resources/templates/vertical-slice.md +76 -0
  16. teddy_cli-0.1.17.dev1277/src/teddy_executor/resources/templates/ARCHITECTURE.md +0 -57
  17. teddy_cli-0.1.17.dev1277/src/teddy_executor/resources/templates/case-file.md +0 -49
  18. teddy_cli-0.1.17.dev1277/src/teddy_executor/resources/templates/component-design.md +0 -45
  19. teddy_cli-0.1.17.dev1277/src/teddy_executor/resources/templates/milestone.md +0 -23
  20. teddy_cli-0.1.17.dev1277/src/teddy_executor/resources/templates/specification-document.md +0 -29
  21. teddy_cli-0.1.17.dev1277/src/teddy_executor/resources/templates/vertical-slice.md +0 -65
  22. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/.gitignore +0 -0
  23. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/LICENSE +0 -0
  24. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/__init__.py +0 -0
  25. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/__main__.py +0 -0
  26. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/__init__.py +0 -0
  27. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/inbound/__init__.py +0 -0
  28. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/inbound/cli_formatter.py +0 -0
  29. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/inbound/cli_helpers.py +0 -0
  30. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/inbound/session_cli_handlers.py +0 -0
  31. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/inbound/textual_plan_reviewer.py +0 -0
  32. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_app.py +0 -0
  33. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_editor.py +0 -0
  34. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_execution.py +0 -0
  35. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_helpers.py +0 -0
  36. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_logic.py +0 -0
  37. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_previews.py +0 -0
  38. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_widgets.py +0 -0
  39. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/outbound/__init__.py +0 -0
  40. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/outbound/console_interactor.py +0 -0
  41. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/outbound/console_interactor_ask_loop.py +0 -0
  42. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/outbound/console_interactor_helpers.py +0 -0
  43. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/outbound/console_tooling.py +0 -0
  44. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/outbound/filesystem_helpers.py +0 -0
  45. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/outbound/litellm_adapter.py +0 -0
  46. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/outbound/local_file_system_adapter.py +0 -0
  47. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +0 -0
  48. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/outbound/openrouter_hydrator.py +0 -0
  49. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/outbound/shell_adapter.py +0 -0
  50. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/outbound/shell_command_builder.py +0 -0
  51. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/outbound/suppressed_logging.py +0 -0
  52. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/outbound/system_environment_adapter.py +0 -0
  53. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/outbound/system_environment_inspector.py +0 -0
  54. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/outbound/system_time_adapter.py +0 -0
  55. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/outbound/terminal_quit_key_listener.py +0 -0
  56. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/outbound/web_scraper_adapter.py +0 -0
  57. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/outbound/web_searcher_adapter.py +0 -0
  58. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/adapters/outbound/yaml_config_adapter.py +0 -0
  59. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/container.py +0 -0
  60. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/__init__.py +0 -0
  61. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/domain/__init__.py +0 -0
  62. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/domain/models/__init__.py +0 -0
  63. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/domain/models/action_ports.py +0 -0
  64. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/domain/models/change_set.py +0 -0
  65. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/domain/models/drift_report.py +0 -0
  66. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/domain/models/exceptions.py +0 -0
  67. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/domain/models/execution_report.py +0 -0
  68. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/domain/models/orchestrator_ports.py +0 -0
  69. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/domain/models/plan.py +0 -0
  70. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/domain/models/planning_ports.py +0 -0
  71. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/domain/models/project_context.py +0 -0
  72. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/domain/models/report_assembly_data.py +0 -0
  73. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/domain/models/session.py +0 -0
  74. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/domain/models/shell_output.py +0 -0
  75. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/domain/models/web_search_results.py +0 -0
  76. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/ports/__init__.py +0 -0
  77. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/ports/inbound/__init__.py +0 -0
  78. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/ports/inbound/edit_simulator.py +0 -0
  79. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/ports/inbound/get_context_use_case.py +0 -0
  80. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/ports/inbound/init.py +0 -0
  81. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/ports/inbound/plan_parser.py +0 -0
  82. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/ports/inbound/plan_reviewer.py +0 -0
  83. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/ports/inbound/plan_validator.py +0 -0
  84. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/ports/inbound/planning_use_case.py +0 -0
  85. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/ports/inbound/run_plan_use_case.py +0 -0
  86. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/ports/outbound/__init__.py +0 -0
  87. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/ports/outbound/config_service.py +0 -0
  88. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/ports/outbound/environment_inspector.py +0 -0
  89. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/ports/outbound/execution_report_assembler.py +0 -0
  90. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/ports/outbound/file_system_manager.py +0 -0
  91. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/ports/outbound/llm_client.py +0 -0
  92. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/ports/outbound/markdown_report_formatter.py +0 -0
  93. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/ports/outbound/prompt_manager.py +0 -0
  94. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/ports/outbound/quit_key_listener.py +0 -0
  95. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/ports/outbound/repo_tree_generator.py +0 -0
  96. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/ports/outbound/session_loop_guard.py +0 -0
  97. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/ports/outbound/session_manager.py +0 -0
  98. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/ports/outbound/session_repository.py +0 -0
  99. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/ports/outbound/shell_executor.py +0 -0
  100. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/ports/outbound/system_environment.py +0 -0
  101. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/ports/outbound/time_service.py +0 -0
  102. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/ports/outbound/user_interactor.py +0 -0
  103. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/ports/outbound/web_scraper.py +0 -0
  104. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/ports/outbound/web_searcher.py +0 -0
  105. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/__init__.py +0 -0
  106. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/action_changeset_builder.py +0 -0
  107. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/action_diff_manager.py +0 -0
  108. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/action_dispatcher.py +0 -0
  109. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/action_executor.py +0 -0
  110. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/action_factory.py +0 -0
  111. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/action_parser_complex.py +0 -0
  112. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/action_parser_strategies.py +0 -0
  113. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/context_service.py +0 -0
  114. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/edit_simulator.py +0 -0
  115. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/execution_orchestrator.py +0 -0
  116. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/execution_report_assembler.py +0 -0
  117. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/init_service.py +0 -0
  118. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/markdown_plan_parser.py +0 -0
  119. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/markdown_report_formatter.py +0 -0
  120. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/parser_infrastructure.py +0 -0
  121. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/parser_metadata.py +0 -0
  122. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/parser_reporting.py +0 -0
  123. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/plan_validator.py +0 -0
  124. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/planning_service.py +0 -0
  125. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/prompt_manager.py +0 -0
  126. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/session_lifecycle_manager.py +0 -0
  127. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/session_loop_guard.py +0 -0
  128. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/session_orchestrator.py +0 -0
  129. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/session_planner.py +0 -0
  130. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/session_pruning_service.py +0 -0
  131. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/session_replanner.py +0 -0
  132. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/session_repository.py +0 -0
  133. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/session_service.py +0 -0
  134. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/templates/execution_report.md.j2 +0 -0
  135. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/update_checker.py +0 -0
  136. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/validation_rules/__init__.py +0 -0
  137. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/validation_rules/edit.py +0 -0
  138. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/validation_rules/edit_matcher.py +0 -0
  139. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/validation_rules/edit_matcher_heuristics.py +0 -0
  140. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/validation_rules/execute.py +0 -0
  141. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/validation_rules/filesystem.py +0 -0
  142. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/validation_rules/helpers.py +0 -0
  143. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/services/validation_rules/message.py +0 -0
  144. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/utils/__init__.py +0 -0
  145. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/utils/diff.py +0 -0
  146. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/utils/interrupt_guard.py +0 -0
  147. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/utils/io.py +0 -0
  148. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/utils/markdown.py +0 -0
  149. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/utils/paths.py +0 -0
  150. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/utils/serialization.py +0 -0
  151. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/utils/stdin_ownership.py +0 -0
  152. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/utils/string.py +0 -0
  153. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/core/utils/terminal.py +0 -0
  154. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/prompts.py +0 -0
  155. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/registries/__init__.py +0 -0
  156. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/registries/infrastructure.py +0 -0
  157. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/registries/reviewer.py +0 -0
  158. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/registries/validators.py +0 -0
  159. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/resources/__init__.py +0 -0
  160. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/resources/config/__init__.py +0 -0
  161. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/resources/config/config.yaml +0 -0
  162. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/resources/config/init.context +0 -0
  163. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/resources/config/prompts/pathfinder.xml +0 -0
  164. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/resources/config/prompts/prototyper.xml +0 -0
  165. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/resources/templates/ci.md +0 -0
  166. {teddy_cli-0.1.17.dev1277 → teddy_cli-0.1.17.dev1279}/src/teddy_executor/resources/templates/pre-commit.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: teddy-cli
3
- Version: 0.1.17.dev1277
3
+ Version: 0.1.17.dev1279
4
4
  Summary: A local-first, file-based AI coding workflow that applies the UNIX philosophy to AI collaboration.
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.dev1277"
3
+ version = "0.1.17.dev1279"
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" }
@@ -51,7 +51,7 @@ NOTES:
51
51
  3. Execution: Run `make commit '<type>(<scope>): <description>'`. This stages all local changes (`git add .`) and runs Git's local hooks before committing.
52
52
  4. Post-conditions: All tests MUST pass: the post-commit hook reverts automatically on failure and cannot be bypassed.
53
53
  5. Push at Conclusion: In the Conclusion phase, run `make push` to rebase and push.
54
- 6. If needed: to verify remote CI run `make ci-watch` to monitor workflow runs and to inspect results: use `make logs <run-id> '<step-name>'` for full logs.
54
+ 6. If needed: to verify remote CI run `make ci-watch` to monitor workflow runs and to inspect results: use `make logs <run-id>` (or `make logs <run-id> '<step-name>'`) for full logs.
55
55
  </rule>
56
56
 
57
57
  <rule n="7" name="Standardized Plan Types">
@@ -17,12 +17,12 @@
17
17
 
18
18
  <phase n="2" name="Design">
19
19
  <goal>Codify strategic decisions and design the single next vertical slice.</goal>
20
- <step n="1" name="Milestone Management">If no active milestone exists, READ the Roadmap in `docs/project/PROJECT.md` to CREATE the next Milestone. Translate all Roadmap requirements into the milestone document and set status to In Progress.</step>
20
+ <step n="1" name="Milestone Management">If no active milestone exists, READ the Roadmap in `docs/project/PROJECT.md` to CREATE the next Milestone. Translate all Roadmap requirements into the milestone document and slice features vertically across all layers end-to-end to deliver a single coherent capability; horizontal slicing by technical layer is strictly forbidden. Set status to In Progress.</step>
21
21
  <step n="2" name="Targeted Integrity Audit">Audit components being modified for localized structural debt: Unnecessary Fragmentation, Tight Coupling, Leaky Abstractions, Silent Failures, Hidden Singletons and Eager Initialization, Boundary Contamination, Test Double Integrity (Ban Global Patching), Semantic Test Overlap, Quality Gate Bypasses, and Dead Code. Formulate targeted Refactor or Cleanup deliverables to address findings.</step>
22
22
  <step n="3" name="Draft Component Designs">CREATE or EDIT draft design docs for affected components. Focus strictly on strategic intent, purpose, conceptual Port responsibilities, operations, and invariants. Enforce Test Double Integrity (Ban Global Patching) and avoid leaky abstractions. Leave concrete typing and internal implementation details to the Developer. Transition updated existing docs to Refactoring status.</step>
23
23
  <step n="4" name="Architecture Maintenance">Update the Component and Boundary Map and Key Architectural Decisions in `docs/architecture/ARCHITECTURE.md` to reflect the design.</step>
24
24
  <step n="5" name="Delta Analysis">Use EXECUTE `git grep` and READ on all targeted components, contracts, interfaces, and DTOs. Catalog the delta: skip work that already exists, note remaining work for partially implemented pieces, and add only truly missing pieces as deliverables. Never create deliverables for code that demonstrably exists.</step>
25
- <step n="6" name="Create Slice">CREATE only the single next Vertical Slice following conventions in `docs/project/PROJECT.md`; do not draft all slices for a milestone upfront. Set initial status to Planned. Link component docs and include Gherkin scenarios. Place Wiring first as the tracer bullet deliverable connecting the outermost boundaries with skeleton data, followed by contract, logic, refactoring, cleanup, and harness deliverables in dependency order. For every key unknown, record a one-line Design Sensitivity stating how the design reacts to each resolution.</step>
25
+ <step n="6" name="Create Slice">CREATE only the single next Vertical Slice following conventions in `docs/project/PROJECT.md`; do not draft all slices for a milestone upfront. Set initial status to Planned. Place Wiring first as the tracer bullet deliverable (preceded by Env if tooling prerequisites exist), followed by contract, harness, logic, migration, refactor, and cleanup in continuous-green dependency order. For every key unknown, record a one-line Design Sensitivity stating how the design reacts to each resolution.</step>
26
26
  <step n="7" name="Impact Audit">Run EXECUTE `git grep` on target components. If a component has more than one consumer, categorize it as a Shared Seam and partition the work into a non-breaking parallel change: expand, migrate, contract. Decompose any deliverable touching more than one consumer or layer into smaller atomic items. Resolve stale hits for deleted or renamed components in documentation and ensure all seam changes have matching harness deliverables.</step>
27
27
  </phase>
28
28
 
@@ -10,7 +10,7 @@
10
10
  <phase n="1" name="Execution">
11
11
  <goal>Execute the task immediately via an iterative loop: make minimal verifiable progress, verify, then repeat until the task is complete.</goal>
12
12
  <step n="1" name="Make Minimal Verifiable Progress">Use EDIT, CREATE, or EXECUTE to make progress on the current task. You may batch multiple tightly-related modifications together, but prioritize incremental steps rather than implementing everything before verification.</step>
13
- <step n="2" name="Verify">After each round of progress, verify correctness immediately. Use EXECUTE `git grep` to check upstream consumers and downstream dependencies. Run targeted tests via EXECUTE to confirm no regressions.</step>
13
+ <step n="2" name="Verify">After each round of progress, verify correctness immediately. Use EXECUTE `git grep` to check upstream consumers and downstream dependencies. EXECUTE `make test` to confirm no regressions.</step>
14
14
  <step n="3" name="Iterate">Assess whether the current task is complete. If more work is needed, return to Make Minimal Verifiable Progress. If the task is complete, advance to the Alignment phase.</step>
15
15
  </phase>
16
16
 
@@ -9,7 +9,7 @@
9
9
  <phase n="1" name="Reproduction">
10
10
  <goal>Gather context and build or verify an end-to-end Minimal Reproducible Example (MRE).</goal>
11
11
  <step n="1" name="Case File Check">If a Case File was not provided in the initial context, READ `docs/templates/case-file.md` and CREATE one following that template.</step>
12
- <step n="2" name="Context and History Gathering">Use EXECUTE `git grep`, EXECUTE `git log`, READ, and RESEARCH to understand the codebase, recent changes, and identify the last known green CI run or commit. For historical CI failures, do not try to read the entire log. First use `gh run view [ID]` to inspect the execution tree and identify the exact name of the failed step. Then, extract only that step logs by executing `make logs [ID] '[FAILED_STEP_NAME]'`.</step>
12
+ <step n="2" name="Context and History Gathering">Use EXECUTE `git grep`, EXECUTE `git log`, READ, and RESEARCH to understand the codebase, recent changes, and identify the last known green CI run or commit. For historical CI failures, do not try to read the entire log: extract failed step logs by executing `make logs [ID]` (for all failed steps) or `make logs [ID] '[STEP_NAME]'` (for a specific step).</step>
13
13
  <step n="3" name="Diagnostic MRE and Platform Check">
14
14
  Trigger the symptom: if an existing command, test, or CI failure exists, execute it to observe the failure live. If the bug is reported verbally or without an existing test, write a targeted probe script in `spikes/debug/{scope-slug}/` to trigger the symptom.
15
15
 
@@ -24,10 +24,11 @@
24
24
  <phase n="2" name="Implementation">
25
25
  <goal>Satisfy the current deliverable requirements via Just-In-Time implementation without overbuilding.</goal>
26
26
  <step n="1" name="Red">
27
- Map the current deliverable type to its testing layer, strictly adhering to the three test-layer boundaries:
28
- Acceptance (`tests/suites/acceptance/`, happy-path scenarios only): Wiring. This step MUST establish the End-to-End Skeleton Wiring Tracer Bullet. Write a test that hits the outermost boundary (such as an API endpoint) and expects the final success state. Use Public Boundary Acceptance Testing: drive the outermost entry point without importing internal core models or services.
29
- Integration (`tests/suites/integration/`, adapters only): Harness, Migration. Importing internal core models or services is banned.
30
- Unit (`tests/suites/unit/`, isolated core logic): Contract, Seam, Logic, Refactor, Cleanup. Must contain all granular edge cases, errors, and permutations.
27
+ Map the current deliverable type to its verification strategy:
28
+ 1. Wiring (Acceptance, `tests/suites/acceptance/`): MUST establish the End-to-End Skeleton Wiring Tracer Bullet. Drive the public outermost entry point expecting final success.
29
+ 2. Harness / Migration (Integration, `tests/suites/integration/`): Modifying shared test infrastructure (drivers, observers, fakes) or adapting callers.
30
+ 3. Contract / Logic / Refactor / Cleanup (Unit, `tests/suites/unit/`): Isolated core logic covering granular edge cases and invariants.
31
+ 4. Env (Declarative / Tooling): For purely declarative files (Makefile, CI workflows, hooks, .gitignore), do NOT write throwaway test scripts. The Red step is executing the target CLI command directly via EXECUTE to observe failure/absence; the Green step is applying the declarative change and observing it succeed.
31
32
 
32
33
  Create or locate the appropriate test file. Set up the test function using the Test Harness (Setup: Fixtures and Arrange, Driver: Act, Observer: Assert). Use parameterized tests for data permutations.
33
34
 
@@ -0,0 +1,68 @@
1
+ # System Architecture: {{project_name}}
2
+
3
+ ## Conventions & Standards
4
+
5
+ This section defines foundational engineering practices. Each entry MUST be a specific, enforceable rule.
6
+
7
+ **Template format:** `- **Rule Name:** Description and enforcement mechanism.`
8
+
9
+ ### Recommended: customize per project
10
+ - **Version Control:** Branch strategy and commit conventions. Every commit MUST leave the suite in a **Continuous Green State** — the full test suite passes before and after each change. Commit locally per deliverable; defer the push to the session Conclusion and report CI results back (blocking only on failures the push introduced).
11
+ - **Run Environment:** Designated runner (e.g., `uv run`, `poetry run`).
12
+ - **Failure Transparency:** Error handling policy — specific exceptions only, no silent suppression.
13
+ - **Testing Strategy:** Test types (Unit/Integration/Acceptance), boundaries, and filesystem hygiene. Mandate **Test Double Integrity**: ban global patching, use in-memory fakes for state-managing outbound ports, and strictly autospec-bound mocks only for un-fakeable external side-effects.
14
+ - **Runtime Contract Assertions:** Enforce Design-by-Contract with native `assert condition, "message"` for pre/post-conditions and invariants (strippable via `python -O`); never custom exceptions for contract checks.
15
+ - **Dependency Injection:** Constructor injection mandate; forbid Service Locator and global containers.
16
+ - **Centralized Configuration:** Config file location, prohibition of magic numbers.
17
+ - **Continuous Integration & Remote Diagnostics:** Parallel CI jobs: 1) Blocking OS matrix test suite. 2) Non-blocking (`continue-on-error: true`) quality checks running fast formatters, linters, security scanners, type checkers, and repository-wide structural checks. Platform-specific and CI-only issues are investigated via the Remote Probing Protocol (`make probe '<reason>'`). See [docs/templates/ci.md](docs/templates/ci.md).
18
+ - **Local Quality Gates (Pre-commit & Post-commit):** Local pre-commit hooks MUST stay fast, checking only staged files (formatters, secret detection, merge conflict markers). Heavy, false-positive-prone checks run non-blocking in CI. The full test suite runs via the post-commit hook (`.githooks/post-commit.py`) as an unskippable safety net, reverting automatically on failure. See [docs/templates/pre-commit.md](docs/templates/pre-commit.md).
19
+ - **Diagnostic Instrumentation:** High-value diagnostics MUST use zero-cost language-native dead-code elimination (e.g. `if __debug__:`) and Composition Root toggles; mid-logic environment checks are forbidden.
20
+ - **Experimental Code:** The `spikes/` directory is reserved for rapid, isolated experimentation (`debug/`, `prototypes/`, `showcases/`) and is explicitly excluded from all quality gates (linters, type checkers, test suites).
21
+ - **Directory Conventions:**
22
+ `docs/architecture/BOUNDARY/LAYER/TYPE/name.md` -> Source path: `src/{pkg}/BOUNDARY/LAYER/TYPE/name.ext` -> Test path: `tests/suites/TEST_TYPE/BOUNDARY/LAYER/TYPE/test_name.ext`
23
+ - **Makefile Commands:** The `Makefile` is the canonical entry point for the version control workflow and on-demand test runs: `make test` (full suite), `make commit '<msg>'` (local commit with advisory auto-fix and unskippable post-commit test gate), `make push` (rebase and push), `make ci-watch` (CI monitoring), and `make probe '<reason>'` (Remote Probing Protocol). See [docs/templates/makefile.md](docs/templates/makefile.md).
24
+
25
+ ## Component & Boundary Map
26
+
27
+ Single source of truth for system structure, organized by architectural layer.
28
+
29
+ ### Hexagonal Core
30
+ Domain entities, value objects, ports, and orchestrating services.
31
+
32
+ | Component | Description | Contract |
33
+ | ----------------- | ------------------------------- | -------------------------------------------- |
34
+ | **ComponentName** | One-line responsibility summary | [Link to design doc](./path/to/component.md) |
35
+
36
+ ### Inbound Adapters (Driving)
37
+ Entry points initiating calls into the core (CLI, Web UI, API controllers, message consumers).
38
+
39
+ | Component | Description | Contract |
40
+ | ----------------- | ------------------------------- | -------------------------------------------- |
41
+ | **ComponentName** | One-line responsibility summary | [Link to design doc](./path/to/component.md) |
42
+
43
+ ### Outbound Adapters (Driven)
44
+ Infrastructure implementations fulfilling outbound port contracts (file system, database, external APIs, shell).
45
+
46
+ | Component | Description | Contract |
47
+ | ----------------- | ------------------------------- | -------------------------------------------- |
48
+ | **ComponentName** | One-line responsibility summary | [Link to design doc](./path/to/component.md) |
49
+
50
+ ### Test Harness
51
+ Test drivers, observers, shared fakes, and test setup fixtures.
52
+
53
+ | Component | Description | Contract |
54
+ | ----------------- | ------------------------------- | -------------------------------------------- |
55
+ | **ComponentName** | One-line responsibility summary | [Link to design doc](./path/to/component.md) |
56
+
57
+ Each Contract column links to the Component Design Document or Interface definition.
58
+
59
+ ## Key Architectural Decisions
60
+
61
+ A living "System Law" document capturing explicit, prescriptive design decisions.
62
+
63
+ **Template format:** `- **Subject:** Strict Rule. (Rationale.)`
64
+
65
+ ### Rules for this section:
66
+ - Each entry MUST be a single enforceable rule with a brief rationale.
67
+ - Add new entries as decisions are made; never remove without deprecation notice.
68
+ - Note exceptions explicitly with their rationale.
@@ -1,4 +1,4 @@
1
- # Project: {{project_name}}
1
+ # Project Dashboard: {{project_name}}
2
2
 
3
3
  ## Product Vision
4
4
  The overarching goals, target audience, unique value proposition, and major future directions for the product.
@@ -23,8 +23,7 @@ Defines the high-level artifact lifecycle and conventions for project management
23
23
  - **Case Files (Debugger):** `NN-name.md` — numbered sequentially.
24
24
  - **Milestone 0 (bootstrapping) & Ad-hoc work (not tied to a milestone):** `00-NN-name.md` — `00` is used as the Milestone prefix for Milestone 0 bootstrapping slices and for ad-hoc slices. Ad-hoc slices are NOT tracked in Milestone documents or the Roadmap.
25
25
  - **Archiving Policy:** When and how completed artifacts are archived or deleted.
26
- - **Spec Organization:** Specification documents live in a single flat directory `docs/project/specs/` and are reserved strictly for **permanent system invariants** — formats, contracts, protocols (e.g. the MRP), core data models, and non-negotiable architectural rules. Feature goals, requirements, and acceptance criteria belong in Milestone documents (`docs/project/milestones/`), not in specs. There is no ephemeral `specs/features/` lifecycle.
27
- - **Run Environment:** Specify the project's designated environment/dependency manager (e.g., `uv`, `poetry`, `pip`) and prefix ALL execution commands with its runner (e.g., `uv run pytest`). The chosen runner MUST be reflected in the `Makefile`.
26
+ - **Spec Organization:** Specification documents live in a single flat directory `docs/project/specs/` and are reserved strictly for **permanent system invariants** — formats, contracts, protocols (e.g. the MRP), core data models, and non-negotiable architectural rules. Feature goals, requirements, and acceptance criteria belong in Milestone documents (`docs/project/milestones/`), not in specs.
28
27
  - **Build & Run Commands:** Document the standard commands in the project `Makefile` (see [docs/templates/makefile.md](docs/templates/makefile.md)). At minimum: `make test` (full suite), `make commit '<msg>'` (VCP), `make push`, `make ci-watch` (CI monitoring), and `make probe '<reason>'` (Remote Probing Protocol).
29
28
  - **Release Process:** Document how releases are cut. At minimum: (1) **Triage** the scope (patch/minor/major) from conventional commits since the last tag; (2) write **release notes** to `docs/project/releases/v<version>.md`; (3) bump the `version` field in the project manifest; (4) present the notes and version bump at an **approval gate**; (5) **commit** (`chore(release): bump version to <version>`) and **tag** (`git tag -a v<version>`); and (6) **publish** (e.g. create a GitHub Release). Adapt the concrete commands to the project's packaging and distribution channel.
30
29
 
@@ -32,18 +31,18 @@ Defines the high-level artifact lifecycle and conventions for project management
32
31
 
33
32
  Before creating or modifying any documentation artifact, agents MUST read the corresponding template from `docs/templates/`. The bundled templates are:
34
33
 
35
- | Template | Purpose |
36
- | -------- | ------- |
37
- | `specification-document.md` | Specification documents (permanent system invariants) |
38
- | `milestone.md` | Milestone documents |
39
- | `vertical-slice.md` | Vertical slice definitions |
40
- | `component-design.md` | Component design documents (ports and contracts) |
41
- | `case-file.md` | Debugger case files |
42
- | `PROJECT.md` | This project dashboard |
43
- | `ARCHITECTURE.md` | System architecture document |
44
- | `makefile.md` | Makefile (VCP commit + Remote Probing Protocol commands) |
45
- | `ci.md` | CI workflow template (debug workflow for the Remote Probing Protocol) |
46
- | `pre-commit.md` | Pre-commit framework setup (pre-commit + post-commit test gate) |
34
+ | Template | Purpose |
35
+ | --------------------------- | --------------------------------------------------------------------- |
36
+ | `specification-document.md` | Specification documents (permanent system invariants) |
37
+ | `milestone.md` | Milestone documents |
38
+ | `vertical-slice.md` | Vertical slice definitions |
39
+ | `component-design.md` | Component design documents (ports and contracts) |
40
+ | `case-file.md` | Debugger case files |
41
+ | `PROJECT.md` | This project dashboard |
42
+ | `ARCHITECTURE.md` | System architecture document |
43
+ | `makefile.md` | Makefile (VCP commit + Remote Probing Protocol commands) |
44
+ | `ci.md` | CI workflow template (debug workflow for the Remote Probing Protocol) |
45
+ | `pre-commit.md` | Pre-commit framework setup (pre-commit + post-commit test gate) |
47
46
 
48
47
  These files live in `docs/templates/` and are created or refreshed by `teddy init templates`.
49
48
 
@@ -65,13 +64,9 @@ A living list of upcoming Milestones and their high-level features.
65
64
  ```
66
65
 
67
66
  ### Milestone 0: Project Bootstrapping [PLANNED]
68
- - **Core Goal:** Establish the foundational project infrastructure for testing, CI/CD, and pre-commit quality gates.
67
+ - **Core Goal:** Establish foundational infrastructure for testing, quality gates, and automated delivery.
69
68
  - **Specs:** N/A — Milestone 0 is self-defining.
70
69
  - **Requirements:**
71
- - **Testing Framework Setup:** Configure the project's designated test runner (e.g., `pytest`) with test discovery conventions, exposed via a `make test` target (see the Makefile below).
72
- - **CI/CD Pipeline:** Set up two parallel jobs: 1) Blocking OS matrix test suite with coverage targets. 2) Non-blocking quality checks (formatters, linters, security scanners).
73
- - **Pre-commit Hooks:** Install the Pre-commit framework with hooks for formatters, linters, security scanners.
74
- - **Post-commit Hook:** Implement a hook that runs the full test suite via `make test` and reverts the commit on failure (via `git reset --soft HEAD~1`, keeping changes staged). This is the unskippable safety net — `--no-verify` MUST NOT bypass it.
75
- - **Debug Workflow:** Create `.github/workflows/debug.yml` following [docs/templates/ci.md](docs/templates/ci.md) to enable the Remote Probing Protocol.
76
- - **Makefile:** Create a `Makefile` following [docs/templates/makefile.md](docs/templates/makefile.md) with `make commit`, `make probe`, and `make test` commands. `make commit` implements the VCP workflow, `make probe` implements the Debugger's Remote Probing Protocol, and `make test` runs the full suite on demand.
77
- - **`.gitignore` Configuration:** Configure a project-tailored `.gitignore` covering language/OS cache files, build artifacts, virtual environments, and the transient `.tmp/` directory. The `spikes/` directory MUST remain tracked so prototypes and probes stay version-controlled.
70
+ - **Testing & Tooling Entry Points:** Configure the test runner (`pytest`) exposed via `make test`, along with standard `Makefile` targets (`make commit`, `make push`, `make ci-watch`, `make probe`). Configure project `.gitignore` keeping `spikes/` tracked.
71
+ - **Local Quality Gates:** Install Pre-commit with fast local hooks (formatters, secret detection, merge conflict checks) and the unskippable post-commit test gate (`.githooks/post-commit.py`) that runs `make test` and reverts on failure.
72
+ - **CI/CD & Remote Diagnostics:** Set up parallel GitHub Actions jobs: 1) Blocking OS matrix test suite. 2) Non-blocking quality checks. Configure `.github/workflows/debug.yml` for the Remote Probing Protocol.
@@ -0,0 +1,35 @@
1
+ # Bug: {{bug_title}}
2
+ - **Status:** Unresolved
3
+ - **Milestone:** [link or N/A]
4
+ - **Vertical Slice:** [link or N/A]
5
+ - **Specs:** [links or N/A]
6
+
7
+ ## Symptoms
8
+ Expected vs. actual behavior and minimal reproduction steps.
9
+
10
+ ## Context & Scope
11
+ ### Regressing Delta
12
+ Git commit hash, file paths, and line numbers of the regressing change.
13
+
14
+ ### Environmental Triggers
15
+ OS, runtime version, environment variables, or specific configurations required to reproduce.
16
+
17
+ ### Ruled Out
18
+ Components, modules, or hypotheses definitively eliminated during investigation.
19
+
20
+ ## Diagnostic Analysis
21
+ ### Causal Model
22
+ Concise description of how the faulty system operates based strictly on verified observations.
23
+
24
+ ### Discrepancies
25
+ <!-- Check off items and append `(Resolved: <explanation>)` ONLY once verified. Do NOT add resolution before proof. -->
26
+ - [ ] Discrepancy between expected and observed behavior.
27
+ - [x] Discrepancy between expected and observed behavior (Resolved: explanation of root cause).
28
+
29
+ ### Investigation History
30
+ Continuously log diagnostic attempts and findings in chronological order:
31
+ 1. Investigated whether [hypothesis] by [action/probe]; observed [outcome], which [conclusion].
32
+ 2. Investigated whether [hypothesis] by [action/probe]; observed [outcome], which [conclusion].
33
+
34
+ ## Solution
35
+ Root cause summary, verified sandbox fix, and systemic preventative measures to eliminate this bug class globally.
@@ -0,0 +1,38 @@
1
+ # Component Design: {{component_name}}
2
+ - **Status:** [Planned | Implemented | Refactoring]
3
+ - **Source:** [`src/path/to/file.ext`](/src/path/to/file.ext)
4
+
5
+ ## Purpose
6
+ 1-2 sentences summarizing the core responsibility and boundary role of this component.
7
+
8
+ ## Consumers
9
+ Upstream callers, controllers, or services that depend on or invoke this component:
10
+ - [`CallerComponent`](./path/to/caller.md): Invokes this component to execute [workflow/operation].
11
+
12
+ ## Dependencies
13
+ Downstream components, outbound ports, or external libraries required by this component:
14
+ - [`DependencyComponent`](./path/to/dependency.md): Injected via constructor to fulfill [outbound operation].
15
+
16
+ ## Class Invariants
17
+ Conditions that must hold true throughout the component lifecycle. If stateless, state: `None — stateless component.`
18
+ - `invariant_statement`: description of condition.
19
+
20
+ ## Inbound Ports
21
+ Use-case interfaces or API signatures this component exposes to consumers:
22
+ - **`PortName`**: Signature and operations provided.
23
+
24
+ ## Outbound Ports
25
+ Dependency contracts this component requires injected:
26
+ - **`PortName`**: Signature and operations consumed.
27
+
28
+ ## Data Contracts
29
+ Data transfer objects, schemas, payloads, or immutable models managed or exchanged by this component:
30
+ - **`DtoOrPayloadName`**: Structure, fields, types, and constraints.
31
+
32
+ ## Operations
33
+ Public method specifications. Avoid pseudocode; specify signatures, preconditions, postconditions, and error modes:
34
+
35
+ ### `method_name(args) -> ReturnType`
36
+ - **Preconditions:** What must hold before calling (validated via guard clauses or runtime assertions).
37
+ - **Postconditions:** What is guaranteed upon successful return.
38
+ - **Exceptions:** Specific exceptions raised when preconditions or operations fail (never generic or swallowed errors).
@@ -46,11 +46,12 @@ The Remote Probing Protocol requires a reason string because it is passed as the
46
46
 
47
47
  ### Logs
48
48
  ```shell
49
- make logs 12345 'Run tests'
49
+ make logs 12345 # extract logs for ALL failed steps
50
+ make logs 12345 'Run tests' # extract logs for a specific step (substring match)
50
51
  ```
51
52
 
52
- **Why does `logs` take two arguments?**
53
- The first argument is the GitHub Actions run ID (as shown by `gh run list`); the second is the exact name of a step in that run's execution tree (as shown by `gh run view <id>`). The target extracts ONLY that step's logs, stripping ANSI escapes and GitHub's group/boilerplate markers so you see the failure without the noise of the full log. See the [CI Log Extraction](#ci-log-extraction) section for the recipe.
53
+ **How does `make logs` work?**
54
+ The first argument is the GitHub Actions run ID (as shown by `gh run list`). If invoked without a second argument, it extracts and formats logs for **all failed steps** using `gh run view --log-failed`. An optional second argument filters down to a specific step using substring matching, stripping ANSI escapes and GitHub boilerplate so you see the failure without noise. See [CI Log Extraction](#ci-log-extraction).
54
55
 
55
56
  ## Probe Script
56
57
 
@@ -204,7 +205,8 @@ ci-watch:
204
205
  if [ -n "$$NEWSTEPS" ]; then \
205
206
  echo "$$WF: failing step(s): $$NEWSTEPS (run $$NEW)"; \
206
207
  gh run view "$$NEW" --log-failed 2>/dev/null | awk -F'\t' '{ l=$$3; p=index(l,"Z "); if(p>0)l=substr(l,p+2); gsub(/\x1B\[[0-9;]*[a-zA-Z]/,"",l); gsub(/\^\[\[[0-9;]*[a-zA-Z]/,"",l); if(l ~ /^##\[group\]/ || l ~ /^##\[endgroup\]/) next; gsub(/^##\[error\]/,"Error: ",l); print l }' | tail -n $(DETAIL_LINES) | sed 's/^/ /'; \
207
- echo " full log: make logs $$NEW '$$NEWSTEPS'"; \
208
+ echo " view all failed logs: make logs $$NEW"; \
209
+ echo " view specific step: make logs $$NEW '<step-name>'"; \
208
210
  fi; \
209
211
  if [ "$$NEWCONC" != "failure" ]; then \
210
212
  if [ -n "$$NEWFAIL" ]; then \
@@ -267,7 +269,7 @@ probe:
267
269
 
268
270
  ## CI Log Extraction
269
271
 
270
- The Debugger's Reproduction phase needs to read the logs of a specific failed CI step without drowning in the full run log. The `make logs` target wraps the `gh run view <id> --log | awk ...` pipeline that isolates the named step's output, strips ANSI escapes, and removes GitHub's `##[group]`/`##[endgroup]` boilerplate.
272
+ The Debugger's Reproduction phase needs to read CI logs without drowning in the full run output. The `make logs` target wraps the `gh run view` pipeline, strips ANSI escapes, and removes GitHub's `##[group]`/`##[endgroup]` boilerplate.
271
273
 
272
274
  ### Example
273
275
 
@@ -276,21 +278,26 @@ logs: LOGS_RUN := $(word 2,$(MAKECMDGOALS))
276
278
  logs: LOGS_STEP := $(wordlist 3,99,$(MAKECMDGOALS))
277
279
 
278
280
  logs:
279
- @[ -n "$(LOGS_RUN)" ] || { echo "Usage: make logs <run-id> '<step-name>'"; exit 1; }
280
- @gh run view "$(LOGS_RUN)" --log | awk -F'\t' -v step="$(LOGS_STEP)" '$$2==step { if(j!=$$1){j=$$1; print "\n["j"]"} l=$$3; p=index(l,"Z "); if(p>0)l=substr(l,p+2); gsub(/\x1B\[[0-9;]*[a-zA-Z]/, "", l); gsub(/\^\[\[[0-9;]*[a-zA-Z]/, "", l); if(l ~ /^##\[group\]Run /){k=1;next} if(k && l ~ /^##\[endgroup\]/){k=0;next} if(k)next; if(l ~ /^##\[group\]/ || l ~ /^##\[endgroup\]/)next; gsub(/^##\[error\]/, "Error: ", l); print l }'
281
+ @[ -n "$(LOGS_RUN)" ] || { echo "Usage: make logs <run-id> ['<step-name>']"; exit 1; }
282
+ @if [ -z "$(LOGS_STEP)" ]; then \
283
+ gh run view "$(LOGS_RUN)" --log-failed 2>/dev/null | awk -F'\t' '{ if(j!=$$1||s!=$$2){j=$$1;s=$$2;print "\n["j" > "s"]"} l=$$3; p=index(l,"Z "); if(p>0)l=substr(l,p+2); gsub(/\x1B\[[0-9;]*[a-zA-Z]/,"",l); gsub(/\^\[\[[0-9;]*[a-zA-Z]/,"",l); if(l ~ /^##\[group\]Run /){k=1;next} if(k && l ~ /^##\[endgroup\]/){k=0;next} if(k)next; if(l ~ /^##\[group\]/ || l ~ /^##\[endgroup\]/)next; gsub(/^##\[error\]/,"Error: ",l); print l }'; \
284
+ else \
285
+ gh run view "$(LOGS_RUN)" --log 2>/dev/null | awk -F'\t' -v step="$(LOGS_STEP)" 'index($$2, step) > 0 { if(j!=$$1||s!=$$2){j=$$1;s=$$2;print "\n["j" > "s"]"} l=$$3; p=index(l,"Z "); if(p>0)l=substr(l,p+2); gsub(/\x1B\[[0-9;]*[a-zA-Z]/,"",l); gsub(/\^\[\[[0-9;]*[a-zA-Z]/,"",l); if(l ~ /^##\[group\]Run /){k=1;next} if(k && l ~ /^##\[endgroup\]/){k=0;next} if(k)next; if(l ~ /^##\[group\]/ || l ~ /^##\[endgroup\]/)next; gsub(/^##\[error\]/, "Error: ", l); print l }'; \
286
+ fi
281
287
 
282
288
  %:
283
289
  @:
284
290
  ```
285
291
 
286
292
  **Usage:**
287
- - `make logs 12345 'Run tests'` — extract the logs of the step named `Run tests` from run `12345`.
288
- - First discover the run ID and the failed step name with `gh run view 12345` (the execution tree), then pass both to `make logs`.
293
+ - `make logs 12345` — extract logs for ALL failed steps from run `12345`.
294
+ - `make logs 12345 'Run tests'` — extract logs for a specific step (substring match) from run `12345`.
289
295
 
290
296
  **How it works:**
291
- - `$(word 2,$(MAKECMDGOALS))` takes the run ID and `$(wordlist 3,99,$(MAKECMDGOALS))` takes the (space-containing) step name; the first goal (the `logs` target itself) is dropped.
292
- - The `awk` program matches rows whose second tab-separated field equals the step name via `-v step=...`, trims the leading timestamp, strips ANSI escape sequences, and removes GitHub's group boilerplate, prefixing `##[error]` lines with `Error: `.
293
- - It reuses the same cross-platform Make constructs as the other targets (see [Cross-Platform Design](#cross-platform-design)); the `%: @:` catch-all prevents the extra `make` goals from being treated as files.
297
+ - `$(word 2,$(MAKECMDGOALS))` takes the run ID and `$(wordlist 3,99,$(MAKECMDGOALS))` captures any optional step name.
298
+ - When no step name is provided, `gh run view --log-failed` is used so only failed steps are fetched and printed with `[job > step]` headers.
299
+ - When a step name is supplied, `index($2, step) > 0` performs substring matching against column 2.
300
+ - Timestamps and ANSI escapes are stripped, and `##[error]` lines are prefixed with `Error: `.
294
301
 
295
302
  ## Implementation Notes
296
303
 
@@ -0,0 +1,17 @@
1
+ # Milestone: {{milestone_title}}
2
+ - **Status:** [Planned | In Progress | Completed]
3
+ - **Specs:** [links]
4
+
5
+ ## Goal
6
+ Problem definition and core objectives.
7
+
8
+ ## Proposed Solution
9
+ Technical architecture, selected patterns, and trade-offs.
10
+
11
+ ## Guidelines
12
+ Actionable strategy, architectural boundaries, and test harness considerations.
13
+
14
+ ## Vertical Slices
15
+ <!-- Decompose into end-to-end vertical slices cutting across all layers; do not slice horizontally by technical layer. -->
16
+ - [ ] {{MM-NN}}: [Slice Title] — [Tackles Req X: brief scope statement]
17
+ - [ ] {{MM-NN}}: [Slice Title] — [Tackles Req Y: brief scope statement]
@@ -0,0 +1,12 @@
1
+ # Spec: {{invariant}}
2
+ - **Status:** Active
3
+
4
+ ## Overview
5
+ Context for the permanent system invariant, the contract it establishes, and the architectural risk it mitigates.
6
+
7
+ ## Guiding Principles
8
+ Foundational rules and philosophical constraints governing this specification.
9
+ - **PrincipleName:** Description of constraint and how it binds design decisions.
10
+
11
+ ## Technical Specifications
12
+ Use flexible subheadings tailored to the invariant (e.g. Data Models, Payload Schemas, CLI Syntax, File Formats, State Transitions, Sequence Flow). May contain logic, formats, directory structures, or workflow diagrams.
@@ -0,0 +1,76 @@
1
+ # Slice: {{feature_name}}
2
+ - **Status:** [Planned | In Progress | Completed]
3
+ - **Milestone:** [link]
4
+ - **Specs:** [links]
5
+ - **Prototype:** [link]
6
+ - **Component Docs:** [links]
7
+ - **Scope Slug:** `feature-slug` <!-- 1-2 kebab-case words only. -->
8
+
9
+ ## Business Goal
10
+ 1-2 sentences describing the user need and measurable value delivered by this slice.
11
+
12
+ ## Scenarios
13
+ > As a [user type], I want to [action] so that [benefit].
14
+
15
+ ```gherkin
16
+ Given [precondition]
17
+ When [action]
18
+ Then [expected outcome]
19
+ ```
20
+
21
+ ## Edge Cases
22
+ - **Title**: If [condition], then [behavior], because [reason/invariant].
23
+
24
+ ## Key Unknowns
25
+
26
+ **Taxonomy:**
27
+ - `[Domain]` = Ambiguities in business rules, policy decisions, domain definitions, or scope boundaries. Resolve by asking the user directly.
28
+ - `[Technical]` = External dependencies, third-party libraries, APIs, runtime performance, concurrency, or data-storage feasibility. Resolve via automated assertion probes in `spikes/`.
29
+ - `[Functional]` = User-facing ergonomics, CLI flags, terminal rendering, interactive flows, or layout aesthetic. Resolve via interactive scenario runners in `spikes/`.
30
+
31
+ **Mandatory De-risking Triggers:**
32
+ 1. Log any new or modified integration with an external system, library, API, storage layer, or performance constraint as `[Technical]`.
33
+ 2. Log any new or modified user interaction, CLI flags, terminal formatting, or interactive UX flow as `[Functional]`.
34
+ 3. Log any business rule, policy, or scope ambiguity as `[Domain]`.
35
+
36
+ **Design Sensitivity:** For every 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").
37
+
38
+ **Format:**
39
+ - [ ] [Tag] Title: Description of the unknown. Design Sensitivity.
40
+
41
+ ## Scope & Impact
42
+ Surface of affected components classified by the Parallel Change model:
43
+ - `[NEW]` `ComponentOrModule` — role and responsibility
44
+ - `[EXPAND]` `ComponentOrModule.method` — additive/non-breaking extension
45
+ - `[MIGRATE]` `ConsumerComponent` — updating callers to new contract
46
+ - `[CONTRACT]` `ObsoleteComponentOrMethod` — removal of retired code/shims
47
+
48
+ ## Deliverables
49
+
50
+ **Types:**
51
+ - **Env:** Declarative tooling, build files, CI workflows, hooks, or config templates.
52
+ - **Wiring:** Outermost boundary tracer bullet returning skeleton/fake data.
53
+ - **Contract:** Signatures, ports, interfaces, DTOs, domain models.
54
+ - **Harness:** Modifying or extending shared test infrastructure (Drivers, Observers, Fakes, Setup fixtures).
55
+ - **Logic:** Core domain logic and business rules driven by unit tests.
56
+ - **Migration:** Adapting existing consumers to new contracts.
57
+ - **Refactor:** Improving code design without altering behavior (DRY, SRP, extracting helpers).
58
+ - **Cleanup:** Removing deprecated methods, dead code, and temporary shims.
59
+
60
+ **Order:** Order deliverables to maintain a Continuous Green State (`make test` passes at every commit). `(Env)` is placed first whenever tooling or environment setup is a prerequisite:
61
+ `(Env) -> Wiring -> Contract -> Harness -> Logic -> Migration -> Refactor -> Cleanup`
62
+
63
+ **Format:**
64
+ - [ ] **Wiring** - Connect outermost boundaries with skeleton response.
65
+ - [ ] **Contract** - Define port interfaces and DTOs.
66
+ - [ ] **Logic** - Implement business logic replacing skeleton responses.
67
+
68
+ ## Implementation Notes
69
+ Free-form notes recording decisions, deviations, or discoveries during implementation.
70
+
71
+ ## Verification
72
+ Action-oriented black-box checks executed strictly from the outside as an end user would (e.g. CLI commands, flags, observable output, exit codes). All must pass before slice completion.
73
+
74
+ **Format:**
75
+ - [ ] Run `command <args>` and verify output contains `expected output` and exits with code 0.
76
+ - [ ] Run `command <invalid-args>` and verify error message and non-zero exit.
@@ -1,57 +0,0 @@
1
- # System Architecture: {{project_name}}
2
-
3
- ## 1. Conventions & Standards
4
-
5
- This section defines foundational engineering practices. Each entry MUST be a specific, enforceable rule.
6
-
7
- **Template format:** `- **Rule Name:** Description and enforcement mechanism.`
8
-
9
- ### Recommended: customize per project
10
- - **Version Control:** Branch strategy and commit conventions. Every commit MUST leave the suite in a **Continuous Green State** — the full test suite passes before and after each change. Commit locally per deliverable; defer the push to the session Conclusion and report CI results back (blocking only on failures the push introduced).
11
- - **Run Environment:** Designated runner (e.g., `uv run`, `poetry run`).
12
- - **Failure Transparency:** Error handling policy — specific exceptions only, no silent suppression.
13
- - **Testing Strategy:** Test types (Unit/Integration/Acceptance), boundaries, and filesystem hygiene. Mandate **Test Double Integrity**: ban global patching, use in-memory fakes for state-managing outbound ports, and strictly autospec-bound mocks only for un-fakeable external side-effects.
14
- - **Runtime Contract Assertions:** Enforce Design-by-Contract with native `assert condition, "message"` for pre/post-conditions and invariants (strippable via `python -O`); never custom exceptions for contract checks.
15
- - **Dependency Injection:** Constructor injection mandate; forbid Service Locator and global containers.
16
- - **Centralized Configuration:** Config file location, prohibition of magic numbers.
17
- - **CI Pipeline:** Two parallel jobs — 1) Blocking OS matrix test suite with strict test coverage targets. 2) Non-blocking (continue-on-error: true) quality checks running fast formatters, linters, security/secret scanners, type checkers, and repository-wide structural checks (excluding sandboxes and third-party dependencies).
18
- - **Pre-commit Hooks:** Scope (staged files only) and keep the local loop fast — formatters, secret scanners, and merge-conflict checks only. Move heavy, false-positive-prone checks (type checkers, security scanners, repository-wide structural checkers) to the non-blocking CI quality job, scoped to a non-default pre-commit stage.
19
- - **Post-commit Execution:** Full test suite run on commit, automatic revert on failure.
20
- - **Makefile Commands:** The `Makefile` is the canonical entry point for the VCP commit workflow and on-demand test runs. `make test` runs the full suite, `make commit '<msg>'` performs a LOCAL-ONLY VCP commit (it runs the pre-commit hooks once as an advisory auto-fix pass and commits WITHOUT `--no-verify`, so Git's own pre-commit hook is the real local gate, while the post-commit test gate remains unskippable), `make push` rebases and pushes, `make ci-watch` watches remote CI and reports results (used by Developer at slice conclusion), and `make probe '<reason>'` runs the Remote Probing Protocol. See [docs/templates/makefile.md](docs/templates/makefile.md).
21
-
22
- ### Pre-commit Quick-Start
23
-
24
- ```shell
25
- pre-commit install # install the pre-commit stage hook
26
- pre-commit install --hook-type post-commit # install the post-commit test gate
27
- pre-commit run --all-files # run all hooks manually against the repo
28
- ```
29
-
30
- ## 2. Component & Boundary Map
31
-
32
- Single source of truth for system structure, organized by architectural layer.
33
-
34
- **Template format (table):**
35
-
36
- | Component | Description | Contract |
37
- | ----------------- | ------------------------------- | -------------------------------------------- |
38
- | **ComponentName** | One-line responsibility summary | [Link to design doc](./path/to/component.md) |
39
-
40
- ### Required Layers:
41
- - **Hexagonal Core:** Domain models, Ports (inbound/outbound), Services.
42
- - **Primary Adapters:** CLI, web UI, API controllers.
43
- - **Outbound Adapters:** File system, database, external APIs, shell.
44
- - **Test Harness:** Drivers, Observers, Setup fixtures.
45
-
46
- Each Contract column links to the Component Design Document or Interface definition.
47
-
48
- ## 3. Key Architectural Decisions
49
-
50
- A living "System Law" document capturing explicit, prescriptive design decisions.
51
-
52
- **Template format:** `- **Subject:** Strict Rule. (Rationale.)`
53
-
54
- ### Rules for this section:
55
- - Each entry MUST be a single enforceable rule with a brief rationale.
56
- - Add new entries as decisions are made; never remove without deprecation notice.
57
- - Note exceptions explicitly with their rationale.
@@ -1,49 +0,0 @@
1
- # Bug: {{bug_title}}
2
- - **Status:** Unresolved
3
- - **Milestone:** [link or N/A]
4
- - **Vertical Slice:** [link or N/A]
5
- - **Specs:** [links or N/A]
6
-
7
- ## Symptoms
8
-
9
- **Format:** Describe what should happen vs. what actually happens. Include concrete, reproducible steps to trigger the bug.
10
- Expected vs. Actual behavior and minimal reproduction steps.
11
-
12
- ## Context & Scope
13
- ### Regressing Delta
14
-
15
- **Format:** Git commit hash, file paths, and line numbers of the changes that introduced the bug.
16
- [Identify the exact changes responsible for the regression to narrow the search space.]
17
-
18
- ### Environmental Triggers
19
-
20
- **Format:** OS, Python version, config values, environment variables, or any other necessary conditions.
21
- [Describe the specific OS, configurations, or state conditions required to reproduce the issue.]
22
-
23
- ### Ruled Out
24
-
25
- **Format:** Bulleted list of investigated and ruled-out items.
26
- [List any components, layers, or files definitively proven to be unrelated to the bug.]
27
-
28
- ## Diagnostic Analysis
29
- ### Causal Model
30
-
31
- **Format:** 1-3 paragraphs explaining the chain of events leading to the bug. Continuously updated as investigation progresses.
32
- A concise, causal description of how the faulty SUT operates.
33
-
34
- ### Discrepancies
35
-
36
- **Format:** `- Observation. Conflict. (Resolved: Explanation)` — keep resolved items with their resolution.
37
- A concise list of observations that contradict the current Causal Model.
38
- - Observation. Conflict. (Resolved: Explanation)
39
-
40
- ### Investigation History
41
-
42
- **Format:** `N. Hypothesis. Observation. Conclusion.`
43
- A concise, numbered log of investigation attempts.
44
- N. Hypothesis. Observation. Conclusion.
45
-
46
- ## Solution
47
-
48
- **Format:** 1-2 paragraphs explaining the root cause, the specific fix applied, and any systemic changes needed to prevent this class of bug.
49
- A high-level explanation of the root cause, the proven fix, and the systemic preventative measures to prevent this class of issue globally.