minitest-cli 0.32.0__tar.gz → 0.33.0__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 (195) hide show
  1. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/PKG-INFO +5 -4
  2. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/README.md +4 -3
  3. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/pyproject.toml +1 -1
  4. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/apps_dependencies.py +4 -4
  5. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/batch.py +5 -5
  6. minitest_cli-0.33.0/src/minitest_cli/commands/deprecated_alias.py +16 -0
  7. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/flow_types_write.py +1 -1
  8. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/issues.py +1 -1
  9. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/issues_helpers.py +1 -1
  10. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/maintenance.py +1 -1
  11. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/maintenance_callbacks.py +1 -1
  12. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/run.py +7 -7
  13. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/run_cancel.py +2 -2
  14. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/run_commit.py +2 -2
  15. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/run_display.py +1 -1
  16. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/run_helpers.py +3 -3
  17. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/run_recording.py +1 -1
  18. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/tags_helpers.py +2 -1
  19. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/test_profile_default.py +1 -1
  20. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/user_story.py +14 -10
  21. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/user_story_bindings.py +13 -11
  22. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/user_story_create.py +6 -6
  23. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/user_story_delete.py +3 -3
  24. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/user_story_helpers.py +3 -4
  25. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/user_story_modify.py +5 -5
  26. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/user_story_setup_commit.py +7 -7
  27. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/user_story_update.py +1 -1
  28. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/verdicts.py +1 -1
  29. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/main.py +2 -0
  30. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/utils/dependency_sim.py +3 -3
  31. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_issues.py +1 -1
  32. minitest_cli-0.33.0/tests/test_scenario_command.py +74 -0
  33. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_user_story_commands.py +1 -1
  34. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/uv.lock +1 -1
  35. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/.env.example +0 -0
  36. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/.github/workflows/ci.yml +0 -0
  37. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/.github/workflows/install-scripts.yml +0 -0
  38. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/.github/workflows/release.yml +0 -0
  39. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/.gitignore +0 -0
  40. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/.opencode/skill/release/SKILL.md +0 -0
  41. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/AGENTS.md +0 -0
  42. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/RELEASE.md +0 -0
  43. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/install.ps1 +0 -0
  44. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/install.sh +0 -0
  45. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/pyrightconfig.json +0 -0
  46. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/renovate.json +0 -0
  47. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/__init__.py +0 -0
  48. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/api/__init__.py +0 -0
  49. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/api/apps_manager_client.py +0 -0
  50. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/api/client.py +0 -0
  51. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/api/errors.py +0 -0
  52. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/assets/__init__.py +0 -0
  53. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/assets/callback.html +0 -0
  54. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/__init__.py +0 -0
  55. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/_response_errors.py +0 -0
  56. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/app_knowledge.py +0 -0
  57. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/app_knowledge_helpers.py +0 -0
  58. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/app_skill.py +0 -0
  59. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/app_skill_helpers.py +0 -0
  60. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/app_skill_secret.py +0 -0
  61. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/app_skill_write.py +0 -0
  62. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/apps.py +0 -0
  63. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/apps_get.py +0 -0
  64. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/apps_helpers.py +0 -0
  65. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/auth.py +0 -0
  66. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/auth_api_key.py +0 -0
  67. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/batch_helpers.py +0 -0
  68. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/batch_warnings.py +0 -0
  69. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/build.py +0 -0
  70. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/build_commit.py +0 -0
  71. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/build_fix_prompts.py +0 -0
  72. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/build_helpers.py +0 -0
  73. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/capabilities.py +0 -0
  74. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/commit_helpers.py +0 -0
  75. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/draft_feature.py +0 -0
  76. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/draft_feature_apply.py +0 -0
  77. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/draft_feature_conflicts.py +0 -0
  78. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/draft_feature_helpers.py +0 -0
  79. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/draft_feature_show.py +0 -0
  80. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/env.py +0 -0
  81. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/env_helpers.py +0 -0
  82. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/flow_types.py +0 -0
  83. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/flow_types_helpers.py +0 -0
  84. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/init.py +0 -0
  85. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/init_helpers.py +0 -0
  86. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/init_playbook.py +0 -0
  87. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/issues_fix.py +0 -0
  88. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/issues_projection.py +0 -0
  89. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/issues_service.py +0 -0
  90. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/maintenance_helpers.py +0 -0
  91. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/maintenance_state.py +0 -0
  92. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/recording_timeline.py +0 -0
  93. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/run_commit_helpers.py +0 -0
  94. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/run_feedback.py +0 -0
  95. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/run_recording_helpers.py +0 -0
  96. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/run_tagged.py +0 -0
  97. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/run_targets.py +0 -0
  98. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/screens.py +0 -0
  99. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/screens_detail.py +0 -0
  100. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/screens_format.py +0 -0
  101. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/screens_helpers.py +0 -0
  102. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/screens_tree.py +0 -0
  103. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/skill.py +0 -0
  104. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/tags.py +0 -0
  105. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/test_file.py +0 -0
  106. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/test_file_helpers.py +0 -0
  107. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/test_file_list.py +0 -0
  108. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/test_profile.py +0 -0
  109. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/test_profile_card.py +0 -0
  110. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/test_profile_helpers.py +0 -0
  111. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/test_profile_list.py +0 -0
  112. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/test_profile_update.py +0 -0
  113. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/upgrade.py +0 -0
  114. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/user_story_camera.py +0 -0
  115. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/user_story_criteria.py +0 -0
  116. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/user_story_criterion_edits.py +0 -0
  117. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/user_story_device_count.py +0 -0
  118. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/user_story_overrides.py +0 -0
  119. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/user_story_profiles.py +0 -0
  120. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/verdicts_helpers.py +0 -0
  121. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/commands/verdicts_projection.py +0 -0
  122. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/core/__init__.py +0 -0
  123. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/core/app_context.py +0 -0
  124. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/core/auth.py +0 -0
  125. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/core/config.py +0 -0
  126. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/core/credentials.py +0 -0
  127. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/core/oauth.py +0 -0
  128. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/core/tenants.py +0 -0
  129. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/core/token_exchange.py +0 -0
  130. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/models/__init__.py +0 -0
  131. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/models/app.py +0 -0
  132. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/models/app_env_vars.py +0 -0
  133. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/models/app_failure.py +0 -0
  134. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/models/app_screen.py +0 -0
  135. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/models/base.py +0 -0
  136. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/models/batch.py +0 -0
  137. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/models/build.py +0 -0
  138. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/models/commit_build.py +0 -0
  139. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/models/draft_feature.py +0 -0
  140. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/models/flow_type.py +0 -0
  141. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/models/issues.py +0 -0
  142. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/models/recording.py +0 -0
  143. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/models/story_run.py +0 -0
  144. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/models/tag.py +0 -0
  145. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/models/targets.py +0 -0
  146. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/models/user_story.py +0 -0
  147. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/utils/__init__.py +0 -0
  148. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/utils/confirm.py +0 -0
  149. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/utils/mermaid.py +0 -0
  150. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/utils/output.py +0 -0
  151. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/utils/skill_refresh.py +0 -0
  152. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/utils/update_check.py +0 -0
  153. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/src/minitest_cli/utils/video_frames.py +0 -0
  154. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/__init__.py +0 -0
  155. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/_commit_transport.py +0 -0
  156. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_api_client_auth.py +0 -0
  157. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_app_knowledge_commands.py +0 -0
  158. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_app_skill_commands.py +0 -0
  159. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_apps_commands.py +0 -0
  160. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_apps_dependencies.py +0 -0
  161. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_auth.py +0 -0
  162. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_auth_api_key.py +0 -0
  163. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_auth_commands.py +0 -0
  164. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_batch_commands.py +0 -0
  165. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_build_commands.py +0 -0
  166. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_build_fix_prompts.py +0 -0
  167. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_capabilities_command.py +0 -0
  168. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_channel_header.py +0 -0
  169. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_code_quality.py +0 -0
  170. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_commit_commands.py +0 -0
  171. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_draft_feature_commands.py +0 -0
  172. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_env.py +0 -0
  173. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_flow_types_commands.py +0 -0
  174. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_init_command.py +0 -0
  175. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_issues_commands.py +0 -0
  176. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_mermaid.py +0 -0
  177. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_native_device_types.py +0 -0
  178. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_network_errors.py +0 -0
  179. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_recording_timeline.py +0 -0
  180. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_response_errors.py +0 -0
  181. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_run_cancel.py +0 -0
  182. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_run_commands.py +0 -0
  183. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_run_frames_command.py +0 -0
  184. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_screens_commands.py +0 -0
  185. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_skill_command.py +0 -0
  186. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_suite_change_provenance.py +0 -0
  187. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_tags_commands.py +0 -0
  188. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_test_file_commands.py +0 -0
  189. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_test_profile_commands.py +0 -0
  190. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_upgrade_command.py +0 -0
  191. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_user_story_bindings_commands.py +0 -0
  192. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_user_story_setup_commit.py +0 -0
  193. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_verdicts.py +0 -0
  194. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_verdicts_actionable.py +0 -0
  195. {minitest_cli-0.32.0 → minitest_cli-0.33.0}/tests/test_version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: minitest-cli
3
- Version: 0.32.0
3
+ Version: 0.33.0
4
4
  Summary: Minitest CLI – command-line interface for the Minitest testing platform
5
5
  Project-URL: Homepage, https://minitap.ai/
6
6
  Project-URL: Source, https://github.com/minitap-ai/minitest-cli
@@ -167,7 +167,8 @@ app defaults.
167
167
  | ---------------- | ------------------------- |
168
168
  | `minitest auth` | Authentication management |
169
169
  | `minitest apps` | List, inspect, and create apps |
170
- | `minitest user-story` | User-story operations |
170
+ | `minitest scenario` | Create, update, list and delete scenarios (`user-story` is a deprecated alias) |
171
+ | `minitest scenario-binding` | Bind test profiles, files or skills to scenarios (`user-story-binding` is a deprecated alias) |
171
172
  | `minitest df` | Draft features — branches of the test suite |
172
173
  | `minitest flow-types` | List flow types, create/rename/delete custom ones |
173
174
  | `minitest screens` | Inspect the screens exploration mapped for an app |
@@ -177,7 +178,7 @@ app defaults.
177
178
 
178
179
  ## CLI-only maintenance
179
180
 
180
- `minitest maintenance` lets a coding agent keep Minitest user stories in sync
181
+ `minitest maintenance` lets a coding agent keep Minitest scenarios in sync
181
182
  without connecting GitHub. Run it from the app repository: the code stays on the
182
183
  machine, while the CLI sends only proposed test-flow edits and the local HEAD SHA.
183
184
 
@@ -189,7 +190,7 @@ minitest maintenance --agent
189
190
  minitest --json maintenance context
190
191
  minitest maintenance affected --file affected.json
191
192
  minitest maintenance change --file change.json
192
- minitest maintenance status --phase writing --message "Updating affected stories"
193
+ minitest maintenance status --phase writing --message "Updating affected scenarios"
193
194
  minitest maintenance complete --changed
194
195
 
195
196
  # Apply proposed edits now, or open the web review queue
@@ -134,7 +134,8 @@ app defaults.
134
134
  | ---------------- | ------------------------- |
135
135
  | `minitest auth` | Authentication management |
136
136
  | `minitest apps` | List, inspect, and create apps |
137
- | `minitest user-story` | User-story operations |
137
+ | `minitest scenario` | Create, update, list and delete scenarios (`user-story` is a deprecated alias) |
138
+ | `minitest scenario-binding` | Bind test profiles, files or skills to scenarios (`user-story-binding` is a deprecated alias) |
138
139
  | `minitest df` | Draft features — branches of the test suite |
139
140
  | `minitest flow-types` | List flow types, create/rename/delete custom ones |
140
141
  | `minitest screens` | Inspect the screens exploration mapped for an app |
@@ -144,7 +145,7 @@ app defaults.
144
145
 
145
146
  ## CLI-only maintenance
146
147
 
147
- `minitest maintenance` lets a coding agent keep Minitest user stories in sync
148
+ `minitest maintenance` lets a coding agent keep Minitest scenarios in sync
148
149
  without connecting GitHub. Run it from the app repository: the code stays on the
149
150
  machine, while the CLI sends only proposed test-flow edits and the local HEAD SHA.
150
151
 
@@ -156,7 +157,7 @@ minitest maintenance --agent
156
157
  minitest --json maintenance context
157
158
  minitest maintenance affected --file affected.json
158
159
  minitest maintenance change --file change.json
159
- minitest maintenance status --phase writing --message "Updating affected stories"
160
+ minitest maintenance status --phase writing --message "Updating affected scenarios"
160
161
  minitest maintenance complete --changed
161
162
 
162
163
  # Apply proposed edits now, or open the web review queue
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "minitest-cli"
3
- version = "0.32.0"
3
+ version = "0.33.0"
4
4
  description = "Minitest CLI – command-line interface for the Minitest testing platform"
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -45,7 +45,7 @@ def dependencies(
45
45
  "--simulate",
46
46
  help=(
47
47
  "Simulate dependency edits without writing: reports cycle "
48
- "verdict, affected stories, and the new run order."
48
+ "verdict, affected scenarios, and the new run order."
49
49
  ),
50
50
  ),
51
51
  ] = False,
@@ -54,7 +54,7 @@ def dependencies(
54
54
  typer.Option(
55
55
  "--add",
56
56
  help=(
57
- "Edge to add, as <story_id>:<depends_on_id> — the story will "
57
+ "Edge to add, as <story_id>:<depends_on_id> — the scenario will "
58
58
  "depend on (run after) the second id. Repeatable; requires --simulate."
59
59
  ),
60
60
  ),
@@ -69,7 +69,7 @@ def dependencies(
69
69
  ),
70
70
  ] = None,
71
71
  ) -> None:
72
- """Print the user-story dependency graph as a Mermaid flowchart.
72
+ """Print the scenario dependency graph as a Mermaid flowchart.
73
73
 
74
74
  Fetches the dependency graph for the app and renders it as a Mermaid
75
75
  ``flowchart TD`` diagram to stdout. With ``--json``, outputs the raw
@@ -129,7 +129,7 @@ def dependencies(
129
129
 
130
130
  mermaid = build_dependency_graph(nodes, edges)
131
131
  if not mermaid:
132
- print_info("No user stories found for this app.")
132
+ print_info("No scenarios found for this app.")
133
133
  raise typer.Exit(code=0)
134
134
 
135
135
  print(mermaid) # noqa: T201
@@ -26,7 +26,7 @@ from minitest_cli.utils.output import (
26
26
  print_table,
27
27
  )
28
28
 
29
- app = typer.Typer(name="batch", help="Manage batch runs (multi-story executions).")
29
+ app = typer.Typer(name="batch", help="Manage batch runs (multi-scenario executions).")
30
30
 
31
31
  BATCH_TABLE_HEADERS = ["ID", "Status", "Source", "Commit", "Tag", "Targets", "Created"]
32
32
 
@@ -110,7 +110,7 @@ def list_batches(
110
110
  def get_batch(
111
111
  batch_id: Annotated[str, typer.Argument(help="Batch ID.")],
112
112
  ) -> None:
113
- """Get a single batch with its story runs."""
113
+ """Get a single batch with its scenario runs."""
114
114
  settings, app_id, json_mode = resolve_app()
115
115
  ensure_uuid(batch_id, kind="batch id")
116
116
 
@@ -165,9 +165,9 @@ def get_batch(
165
165
  )
166
166
  if rows:
167
167
  print_table(
168
- ["Run ID", "User Story", "Status", "Created"],
168
+ ["Run ID", "Scenario", "Status", "Created"],
169
169
  rows,
170
- title=f"Story runs ({len(rows)})",
170
+ title=f"Scenario runs ({len(rows)})",
171
171
  )
172
172
 
173
173
 
@@ -175,7 +175,7 @@ def get_batch(
175
175
  def cancel(
176
176
  batch_id: Annotated[str, typer.Argument(help="Batch ID to cancel.")],
177
177
  ) -> None:
178
- """Cancel a batch and all its pending/running story runs."""
178
+ """Cancel a batch and all its pending/running scenario runs."""
179
179
  settings, app_id, json_mode = resolve_app()
180
180
  ensure_uuid(batch_id, kind="batch id")
181
181
 
@@ -0,0 +1,16 @@
1
+ import typer
2
+
3
+ from minitest_cli.utils.output import print_warning
4
+
5
+
6
+ def deprecated_alias(source: typer.Typer, *, old_name: str) -> typer.Typer:
7
+ """Expose ``source``'s commands under a hidden legacy name that warns on stderr."""
8
+ new_name = source.info.name
9
+ alias = typer.Typer(name=old_name, help=f"Deprecated: use `minitest {new_name}`.", hidden=True)
10
+
11
+ @alias.callback()
12
+ def _warn() -> None:
13
+ print_warning(f"`minitest {old_name}` is deprecated; use `minitest {new_name}` instead.")
14
+
15
+ alias.registered_commands = source.registered_commands
16
+ return alias
@@ -48,7 +48,7 @@ def create_flow_type(
48
48
  color: Annotated[str, typer.Option("--color", help="Tailwind color name.")] = "gray",
49
49
  usage_prompt: UsagePromptOption = None,
50
50
  ) -> None:
51
- """Create a custom flow type, usable as --type on any user-story command.
51
+ """Create a custom flow type, usable as --type on any scenario command.
52
52
 
53
53
  Custom types are tenant-scoped: every app on your tenant can use them.
54
54
  """
@@ -31,7 +31,7 @@ app.command()(fix)
31
31
  @app.command("list")
32
32
  def list_issues(
33
33
  issue: Annotated[str | None, typer.Option("--issue", help="Scope to one failure ID.")] = None,
34
- run: Annotated[str | None, typer.Option("--run", help="Scope to one story run ID.")] = None,
34
+ run: Annotated[str | None, typer.Option("--run", help="Scope to one scenario run ID.")] = None,
35
35
  batch: Annotated[str | None, typer.Option("--batch", help="Scope to one batch ID.")] = None,
36
36
  platform: Annotated[
37
37
  IssuePlatform | None, typer.Option(help="Filter by execution platform.")
@@ -122,7 +122,7 @@ async def _reject_batch_id_passed_as_run(client: ApiClient, app_id: str, given_i
122
122
  """
123
123
  if await fetch_optional_batch(client, app_id, given_id) is None:
124
124
  return
125
- print_error(f"Run not found: {given_id} is a batch id, not a story-run id.")
125
+ print_error(f"Run not found: {given_id} is a batch id, not a scenario-run id.")
126
126
  err_console.print(" [dim]The webapp path[/dim] /test/runs/<id> [dim]carries a batch id.[/dim]")
127
127
  err_console.print(f" [yellow]Try:[/yellow] [bold]--batch {given_id}[/bold]")
128
128
  raise typer.Exit(code=EXIT_NOT_FOUND)
@@ -69,7 +69,7 @@ def maintenance(
69
69
 
70
70
  @app.command()
71
71
  def context() -> None:
72
- """Open a maintenance run and emit its context (mode, fromSha, stories) as JSON.
72
+ """Open a maintenance run and emit its context (mode, fromSha, scenarios) as JSON.
73
73
 
74
74
  First run for an app has no watermark → audit mode (review the whole suite). Later runs
75
75
  return the previous sha so the agent diffs `git diff <fromSha>..HEAD` locally.
@@ -19,7 +19,7 @@ def register_callback_commands(app: typer.Typer) -> None:
19
19
  def affected(
20
20
  file: Annotated[Path, typer.Option("--file", help="JSON file: {stories:[...]}.")],
21
21
  ) -> None:
22
- """Declare which stories the change affects (idempotent per run)."""
22
+ """Declare which scenarios the change affects (idempotent per run)."""
23
23
  _post_file(file, sub_path="affected-stories")
24
24
 
25
25
  @app.command()
@@ -56,7 +56,7 @@ app = typer.Typer(name="run", help="Test execution.")
56
56
  @app.command()
57
57
  def start(
58
58
  user_story: Annotated[
59
- str | None, typer.Argument(help="User-story name or UUID to run. Excludes --tag.")
59
+ str | None, typer.Argument(help="Scenario name or UUID to run. Excludes --tag.")
60
60
  ] = None,
61
61
  tag: Annotated[
62
62
  list[str] | None,
@@ -71,9 +71,9 @@ def start(
71
71
  bool, typer.Option("--watch/--no-watch", help="Poll for results (default: watch).")
72
72
  ] = True,
73
73
  ) -> None:
74
- """Start a run for one user story, or one batch over every story with --tag."""
74
+ """Start a run for one scenario, or one batch over every scenario with --tag."""
75
75
  if (user_story is None) == (not tag):
76
- print_error("Pass either a user story or --tag, not both or neither.")
76
+ print_error("Pass either a scenario or --tag, not both or neither.")
77
77
  raise typer.Exit(code=1)
78
78
  settings, app_id, json_mode = resolve_app()
79
79
  targets = build_targets(ios_build, android_build, web, ios_device_type, android_device_type)
@@ -88,7 +88,7 @@ def start(
88
88
  body = CreateBatchRequest(user_story_ids=[user_story_id], targets=targets)
89
89
  batch = await post_batch(client, app_id, body)
90
90
  if not batch.story_runs:
91
- print_error("Batch created but no story runs were returned.")
91
+ print_error("Batch created but no scenario runs were returned.")
92
92
  raise typer.Exit(code=3)
93
93
  run = batch.story_runs[0]
94
94
  if not watch:
@@ -131,7 +131,7 @@ def status(
131
131
 
132
132
  @app.command(name="list")
133
133
  def list_runs(
134
- user_story: Annotated[str, typer.Argument(help="User-story name or UUID to list runs for.")],
134
+ user_story: Annotated[str, typer.Argument(help="Scenario name or UUID to list runs for.")],
135
135
  page: Annotated[int, typer.Option(help="Page number.")] = 1,
136
136
  page_size: Annotated[int, typer.Option(help="Items per page.")] = 20,
137
137
  status_filter: Annotated[
@@ -143,7 +143,7 @@ def list_runs(
143
143
  ] = None,
144
144
  all_pages: Annotated[bool, typer.Option("--all", help="Fetch all results.")] = False,
145
145
  ) -> None:
146
- """List runs for a user story."""
146
+ """List runs for a scenario."""
147
147
  settings, app_id, json_mode = resolve_app()
148
148
  if all_pages:
149
149
  page, page_size = 1, 100
@@ -175,7 +175,7 @@ def run_all(
175
175
  ios_device_type: IosDeviceTypeOpt = None,
176
176
  android_device_type: AndroidDeviceTypeOpt = None,
177
177
  ) -> None:
178
- """Start a batch covering every user story for the app."""
178
+ """Start a batch covering every scenario for the app."""
179
179
  settings, app_id, json_mode = resolve_app()
180
180
  targets = build_targets(ios_build, android_build, web, ios_device_type, android_device_type)
181
181
 
@@ -90,10 +90,10 @@ def cancel(
90
90
  ] = None,
91
91
  srp_id: Annotated[
92
92
  str | None,
93
- typer.Option("--srp", help="Only cancel this story-run platform ID."),
93
+ typer.Option("--srp", help="Only cancel this scenario-run platform ID."),
94
94
  ] = None,
95
95
  ) -> None:
96
- """Cancel every pending or running platform of a story run."""
96
+ """Cancel every pending or running platform of a scenario run."""
97
97
  settings, app_id, json_mode = resolve_app()
98
98
  ensure_uuid(run_id, kind="run id")
99
99
  if srp_id is not None:
@@ -39,7 +39,7 @@ UserStoryOpt = Annotated[
39
39
  typer.Option(
40
40
  "--user-story",
41
41
  "-u",
42
- help="User story id or name. Repeatable. Omit to run every story.",
42
+ help="Scenario id or name. Repeatable. Omit to run every scenario.",
43
43
  ),
44
44
  ]
45
45
 
@@ -97,7 +97,7 @@ def from_commit(
97
97
  print_success(f"Batch {batch.id} is {batch.status.value}")
98
98
  if batch.status is BatchStatus.failed and not batch.story_runs:
99
99
  print_warning(
100
- "The batch failed before any story ran, which usually means the build failed. "
100
+ "The batch failed before any scenario ran, which usually means the build failed. "
101
101
  f"Inspect it with `minitest build list --status failed`. {CONNECT_REPO_HINT}"
102
102
  )
103
103
  elif not watch:
@@ -13,7 +13,7 @@ from minitest_cli.utils.output import (
13
13
  print_table,
14
14
  )
15
15
 
16
- RUN_TABLE_HEADERS = ["ID", "User Story", "Status", "Created"]
16
+ RUN_TABLE_HEADERS = ["ID", "Scenario", "Status", "Created"]
17
17
 
18
18
  RESULTS_TABLE_HEADERS = ["Criterion ID", "Platform", "Result", "Fail Reason"]
19
19
 
@@ -102,7 +102,7 @@ def handle_response_error(resp: httpx.Response, *, resource: str = "Run") -> Non
102
102
  detail = extract_detail(resp) or ""
103
103
  if "violates foreign key constraint" in detail:
104
104
  msg = f"{resource} references a resource that does not exist."
105
- print_error(f"{msg} Check the user-story and build IDs.")
105
+ print_error(f"{msg} Check the scenario and build IDs.")
106
106
  raise typer.Exit(code=EXIT_NOT_FOUND)
107
107
  if resp.status_code >= 400:
108
108
  detail = extract_detail(resp)
@@ -141,14 +141,14 @@ async def resolve_user_story_id(
141
141
  f"/api/v1/apps/{app_id}/user-stories",
142
142
  params={"page_size": 100},
143
143
  )
144
- handle_response_error(resp, resource="User story")
144
+ handle_response_error(resp, resource="Scenario")
145
145
 
146
146
  items = resp.json().get("items", [])
147
147
  for story in items:
148
148
  if story.get("name", "").lower() == user_story_ref.lower():
149
149
  return story["id"]
150
150
 
151
- print_error(f"User story not found: '{user_story_ref}'. Use a valid user-story name or UUID.")
151
+ print_error(f"Scenario not found: '{user_story_ref}'. Use a valid scenario name or UUID.")
152
152
  raise typer.Exit(code=EXIT_NOT_FOUND)
153
153
 
154
154
 
@@ -37,7 +37,7 @@ WidthOpt = Annotated[int, typer.Option("--width", min=32, help="Frame width in p
37
37
 
38
38
 
39
39
  def recording(
40
- run_id: Annotated[str, typer.Argument(help="Story-run ID.")],
40
+ run_id: Annotated[str, typer.Argument(help="Scenario-run ID.")],
41
41
  platform: Annotated[str | None, typer.Option(help="Target platform (ios/android/web).")] = None,
42
42
  srp: Annotated[str | None, typer.Option(help="Exact target (srpId) when ambiguous.")] = None,
43
43
  device: Annotated[int, typer.Option(min=1, help="Device index on multi-device runs.")] = 1,
@@ -11,7 +11,8 @@ from minitest_cli.utils.output import print_error, print_warning
11
11
  TagOption = Annotated[
12
12
  list[str] | None,
13
13
  typer.Option(
14
- "--tag", help="Tag name (repeatable; replaces the story's tags). Unknown tags are created."
14
+ "--tag",
15
+ help="Tag name (repeatable; replaces the scenario's tags). Unknown tags are created.",
15
16
  ),
16
17
  ]
17
18
  ClearTagsOption = Annotated[
@@ -26,7 +26,7 @@ def register(app: typer.Typer) -> None:
26
26
  ) -> None:
27
27
  """Set a test profile as the default for the app.
28
28
 
29
- New user stories without an explicit ``--profile`` will auto-assign
29
+ New scenarios without an explicit ``--profile`` will auto-assign
30
30
  this profile.
31
31
  """
32
32
  settings = get_settings()
@@ -1,4 +1,4 @@
1
- """User-story commands: list, get."""
1
+ """Scenario commands (legacy name: user story): list, get."""
2
2
 
3
3
  from typing import Annotated, Any
4
4
 
@@ -11,6 +11,7 @@ from minitest_cli.commands import (
11
11
  user_story_modify,
12
12
  user_story_setup_commit,
13
13
  )
14
+ from minitest_cli.commands.deprecated_alias import deprecated_alias
14
15
  from minitest_cli.commands.tags_helpers import (
15
16
  LegacyTypeOption,
16
17
  collect_tag_names,
@@ -35,7 +36,7 @@ from minitest_cli.core.app_context import resolve_app_id
35
36
  from minitest_cli.core.auth import require_auth
36
37
  from minitest_cli.utils.output import output, print_info, print_table
37
38
 
38
- app = typer.Typer(name="user-story", help="User-story operations.")
39
+ app = typer.Typer(name="scenario", help="Create, update, list and delete scenarios.")
39
40
  app.command(name="create")(user_story_create.create_user_story)
40
41
  app.command(name="update")(user_story_modify.update_user_story)
41
42
  app.command(name="delete")(user_story_delete.delete_user_story)
@@ -47,7 +48,7 @@ app.command(name="revoke-setup-commit")(user_story_setup_commit.revoke_setup_com
47
48
  def list_user_stories(
48
49
  tag: Annotated[
49
50
  list[str] | None,
50
- typer.Option("--tag", help="Only stories carrying any of these tags (repeatable)."),
51
+ typer.Option("--tag", help="Only scenarios carrying any of these tags (repeatable)."),
51
52
  ] = None,
52
53
  user_story_type: LegacyTypeOption = None,
53
54
  page: Annotated[int, typer.Option("--page", min=1, help="Page number.")] = 1,
@@ -56,10 +57,10 @@ def list_user_stories(
56
57
  ] = 20,
57
58
  all_stories: Annotated[
58
59
  bool,
59
- typer.Option("--all", help="Fetch all user stories (ignores --page and --page-size)."),
60
+ typer.Option("--all", help="Fetch all scenarios (ignores --page and --page-size)."),
60
61
  ] = False,
61
62
  ) -> None:
62
- """List user stories for the active app."""
63
+ """List scenarios for the active app."""
63
64
  settings = get_settings()
64
65
  json_mode = is_json_mode()
65
66
  require_auth(settings)
@@ -86,16 +87,16 @@ def list_user_stories(
86
87
 
87
88
  items = page_items(data)
88
89
  if not items:
89
- print_info("No user stories found.")
90
+ print_info("No scenarios found.")
90
91
  return
91
92
 
92
93
  if all_stories:
93
- title = f"User stories (showing all {len(items)} user stories)"
94
+ title = f"Scenarios (showing all {len(items)} scenarios)"
94
95
  tip = None
95
96
  elif isinstance(data, dict):
96
97
  title, tip = format_pagination_info(data, page, page_size)
97
98
  else:
98
- title, tip = "User stories", None
99
+ title, tip = "Scenarios", None
99
100
  show_devices = any(effective_device_count(s) > 1 for s in items)
100
101
  headers = [*USER_STORY_TABLE_HEADERS, "Devices"] if show_devices else USER_STORY_TABLE_HEADERS
101
102
  rows = [format_user_story_row(s, show_devices=show_devices) for s in items]
@@ -106,9 +107,9 @@ def list_user_stories(
106
107
 
107
108
  @app.command(name="get")
108
109
  def get_user_story(
109
- user_story_id: Annotated[str, typer.Argument(help="User-story ID.")],
110
+ user_story_id: Annotated[str, typer.Argument(help="Scenario ID.")],
110
111
  ) -> None:
111
- """Show details for a specific user story."""
112
+ """Show details for a specific scenario."""
112
113
  settings = get_settings()
113
114
  json_mode = is_json_mode()
114
115
  require_auth(settings)
@@ -130,3 +131,6 @@ def get_user_story(
130
131
  if isinstance(permission, dict):
131
132
  print_info(f"Setup commit allowed: {permission.get('customerQuote')}")
132
133
  output(data, json_mode=json_mode)
134
+
135
+
136
+ legacy_app = deprecated_alias(app, old_name="user-story")
@@ -3,6 +3,7 @@ from typing import Annotated, Any
3
3
  import typer
4
4
 
5
5
  from minitest_cli.api.client import ApiClient
6
+ from minitest_cli.commands.deprecated_alias import deprecated_alias
6
7
  from minitest_cli.commands.app_skill_helpers import handle_skill_response
7
8
  from minitest_cli.commands.user_story_helpers import (
8
9
  base_path,
@@ -16,9 +17,7 @@ from minitest_cli.core.app_context import resolve_app_id
16
17
  from minitest_cli.core.auth import require_auth
17
18
  from minitest_cli.utils.output import output, print_error, print_info, print_success, print_table
18
19
 
19
- app = typer.Typer(
20
- name="user-story-binding", help="Bind test profiles, files or skills to user stories."
21
- )
20
+ app = typer.Typer(name="scenario-binding", help="Bind test profiles, files or skills to scenarios.")
22
21
 
23
22
  _FILE_BINDING_HEADERS = ["ID", "Name", "Kind"]
24
23
 
@@ -37,7 +36,7 @@ def _normalize_items(data: Any) -> list[dict[str, Any]]:
37
36
 
38
37
  @app.command(name="set-profile")
39
38
  def set_profile(
40
- user_story_id: Annotated[str, typer.Argument(help="User-story ID.")],
39
+ user_story_id: Annotated[str, typer.Argument(help="Scenario ID.")],
41
40
  profile_ids: Annotated[
42
41
  list[str] | None,
43
42
  typer.Option(
@@ -74,16 +73,16 @@ def set_profile(
74
73
  data = run_api_call(_run())
75
74
  if not json_mode:
76
75
  if clear:
77
- print_success(f"Test profiles cleared on user story {user_story_id}.")
76
+ print_success(f"Test profiles cleared on scenario {user_story_id}.")
78
77
  else:
79
78
  bound = ", ".join(profile_ids or [])
80
- print_success(f"Test profiles [{bound}] bound to user story {user_story_id}.")
79
+ print_success(f"Test profiles [{bound}] bound to scenario {user_story_id}.")
81
80
  output(data, json_mode=json_mode)
82
81
 
83
82
 
84
83
  @app.command(name="set-files")
85
84
  def set_files(
86
- user_story_id: Annotated[str, typer.Argument(help="User-story ID.")],
85
+ user_story_id: Annotated[str, typer.Argument(help="Scenario ID.")],
87
86
  file_ids: Annotated[
88
87
  list[str] | None,
89
88
  typer.Option(
@@ -124,7 +123,7 @@ def set_files(
124
123
  output(data, json_mode=True)
125
124
  return
126
125
  if not items:
127
- print_info("No files bound to this user story.")
126
+ print_info("No files bound to this scenario.")
128
127
  return
129
128
  rows = [_binding_row(f) for f in items]
130
129
  print_table(_FILE_BINDING_HEADERS, rows, title=f"Files bound to {user_story_id} ({len(items)})")
@@ -132,7 +131,7 @@ def set_files(
132
131
 
133
132
  @app.command(name="set-skills")
134
133
  def set_skills(
135
- user_story_id: Annotated[str, typer.Argument(help="User-story ID.")],
134
+ user_story_id: Annotated[str, typer.Argument(help="Scenario ID.")],
136
135
  skill_names: Annotated[
137
136
  list[str] | None,
138
137
  typer.Option("--skill", help="Skill name Mini loads before starting (repeatable)."),
@@ -167,7 +166,7 @@ def set_skills(
167
166
 
168
167
  @app.command(name="list-files")
169
168
  def list_files(
170
- user_story_id: Annotated[str, typer.Argument(help="User-story ID.")],
169
+ user_story_id: Annotated[str, typer.Argument(help="Scenario ID.")],
171
170
  page: Annotated[int, typer.Option("--page", min=1)] = 1,
172
171
  page_size: Annotated[int, typer.Option("--page-size", min=1, max=100)] = 50,
173
172
  ) -> None:
@@ -191,7 +190,10 @@ def list_files(
191
190
  output(data, json_mode=True)
192
191
  return
193
192
  if not items:
194
- print_info("No files bound to this user story.")
193
+ print_info("No files bound to this scenario.")
195
194
  return
196
195
  rows = [_binding_row(f) for f in items]
197
196
  print_table(_FILE_BINDING_HEADERS, rows, title=f"Files bound to {user_story_id} ({len(items)})")
197
+
198
+
199
+ legacy_app = deprecated_alias(app, old_name="user-story-binding")
@@ -28,11 +28,11 @@ from minitest_cli.utils.output import output, print_error, print_info, print_suc
28
28
 
29
29
 
30
30
  def create_user_story(
31
- name: Annotated[str, typer.Option("--name", help="User-story name.")],
31
+ name: Annotated[str, typer.Option("--name", help="Scenario name.")],
32
32
  tag: TagOption = None,
33
33
  user_story_type: LegacyTypeOption = None,
34
34
  description: Annotated[
35
- str | None, typer.Option("--description", help="User-story description.")
35
+ str | None, typer.Option("--description", help="Scenario description.")
36
36
  ] = None,
37
37
  criteria: Annotated[
38
38
  list[str] | None, typer.Option("--criteria", help="Acceptance criteria (repeatable).")
@@ -42,7 +42,7 @@ def create_user_story(
42
42
  typer.Option(
43
43
  "--depends-on",
44
44
  help=(
45
- "Parent user-story IDs this story depends on (repeatable). "
45
+ "Parent scenario IDs this scenario depends on (repeatable). "
46
46
  "Validated server-side after creation: same-app, no cycles, "
47
47
  "references must exist."
48
48
  ),
@@ -67,7 +67,7 @@ def create_user_story(
67
67
  ),
68
68
  ] = None,
69
69
  ) -> None:
70
- """Create a new user story."""
70
+ """Create a new scenario."""
71
71
  if idempotency_key is not None and not 1 <= len(idempotency_key) <= 255:
72
72
  raise typer.BadParameter(
73
73
  "must contain between 1 and 255 characters",
@@ -108,7 +108,7 @@ def create_user_story(
108
108
  if depends_on:
109
109
  story_id = created.get("id")
110
110
  if not story_id:
111
- print_error("Server did not return an id for the new user story.")
111
+ print_error("Server did not return an id for the new scenario.")
112
112
  raise typer.Exit(code=1)
113
113
  patch_resp = await client.patch(
114
114
  f"{base_path(app_id)}/{story_id}",
@@ -120,7 +120,7 @@ def create_user_story(
120
120
 
121
121
  data = run_api_call(_run())
122
122
  if not json_mode:
123
- print_success(f"User story created: {data.get('id', '')}")
123
+ print_success(f"Scenario created: {data.get('id', '')}")
124
124
  bound = format_bound_profiles(data)
125
125
  if bound:
126
126
  label = "Default profile auto-assigned" if not profile else "Profiles bound"
@@ -19,10 +19,10 @@ from minitest_cli.utils.output import output, print_error, print_success
19
19
 
20
20
 
21
21
  def delete_user_story(
22
- user_story_id: Annotated[str, typer.Argument(help="User-story ID.")],
22
+ user_story_id: Annotated[str, typer.Argument(help="Scenario ID.")],
23
23
  force: Annotated[bool, typer.Option("--force", help="Skip confirmation.")] = False,
24
24
  ) -> None:
25
- """Delete a user story. Requires --force flag."""
25
+ """Delete a scenario. Requires --force flag."""
26
26
  settings = get_settings()
27
27
  json_mode = is_json_mode()
28
28
  require_auth(settings)
@@ -40,4 +40,4 @@ def delete_user_story(
40
40
  if json_mode:
41
41
  output({"deleted": True, "id": user_story_id}, json_mode=True)
42
42
  else:
43
- print_success(f"User story deleted: {user_story_id}")
43
+ print_success(f"Scenario deleted: {user_story_id}")
@@ -61,7 +61,7 @@ def extract_detail(resp: httpx.Response) -> str | None:
61
61
  return body.get("message")
62
62
 
63
63
 
64
- def handle_response_error(resp: httpx.Response, *, resource: str = "User story") -> None:
64
+ def handle_response_error(resp: httpx.Response, *, resource: str = "Scenario") -> None:
65
65
  if resp.status_code == 404:
66
66
  detail = extract_detail(resp)
67
67
  print_error(detail or f"{resource} not found.")
@@ -169,14 +169,13 @@ def format_pagination_info(
169
169
  start = (current_page - 1) * current_page_size + 1
170
170
  end = min(start + item_count - 1, total)
171
171
 
172
- title = f"User stories (Page {current_page} of {total_pages}, showing {start}-{end} of {total})"
172
+ title = f"Scenarios (Page {current_page} of {total_pages}, showing {start}-{end} of {total})"
173
173
 
174
174
  tip = None
175
175
  if current_page < total_pages:
176
176
  next_page = current_page + 1
177
177
  tip = (
178
- f"\n💡 Tip: Use --page {next_page} to see more, "
179
- f"or --all to fetch all {total} user stories"
178
+ f"\n💡 Tip: Use --page {next_page} to see more, or --all to fetch all {total} scenarios"
180
179
  )
181
180
  elif total > current_page_size and current_page_size < 100:
182
181
  tip = f"\n💡 Tip: Use --all to fetch all {total} user stories in one request"