remo-cli 4.4.0__tar.gz → 4.4.1__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 (801) hide show
  1. {remo_cli-4.4.0 → remo_cli-4.4.1}/.github/workflows/smoke-test.yml +30 -0
  2. remo_cli-4.4.1/.release-please-manifest.json +3 -0
  3. {remo_cli-4.4.0 → remo_cli-4.4.1}/AGENTS.md +16 -0
  4. {remo_cli-4.4.0 → remo_cli-4.4.1}/CHANGELOG.md +7 -0
  5. {remo_cli-4.4.0 → remo_cli-4.4.1}/CLAUDE.md +16 -0
  6. {remo_cli-4.4.0 → remo_cli-4.4.1}/PKG-INFO +5 -1
  7. {remo_cli-4.4.0 → remo_cli-4.4.1}/README.md +4 -0
  8. {remo_cli-4.4.0 → remo_cli-4.4.1}/install.sh +51 -5
  9. {remo_cli-4.4.0 → remo_cli-4.4.1}/pyproject.toml +1 -1
  10. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/test_install_script.py +34 -5
  11. remo_cli-4.4.1/tests/unit/test_smoke_test_scope.py +137 -0
  12. {remo_cli-4.4.0 → remo_cli-4.4.1}/uv.lock +1 -1
  13. remo_cli-4.4.0/.release-please-manifest.json +0 -3
  14. {remo_cli-4.4.0 → remo_cli-4.4.1}/.claude/skills/release/SKILL.md +0 -0
  15. {remo_cli-4.4.0 → remo_cli-4.4.1}/.claude/skills/speckit-analyze/SKILL.md +0 -0
  16. {remo_cli-4.4.0 → remo_cli-4.4.1}/.claude/skills/speckit-checklist/SKILL.md +0 -0
  17. {remo_cli-4.4.0 → remo_cli-4.4.1}/.claude/skills/speckit-clarify/SKILL.md +0 -0
  18. {remo_cli-4.4.0 → remo_cli-4.4.1}/.claude/skills/speckit-constitution/SKILL.md +0 -0
  19. {remo_cli-4.4.0 → remo_cli-4.4.1}/.claude/skills/speckit-converge/SKILL.md +0 -0
  20. {remo_cli-4.4.0 → remo_cli-4.4.1}/.claude/skills/speckit-git-commit/SKILL.md +0 -0
  21. {remo_cli-4.4.0 → remo_cli-4.4.1}/.claude/skills/speckit-git-feature/SKILL.md +0 -0
  22. {remo_cli-4.4.0 → remo_cli-4.4.1}/.claude/skills/speckit-git-initialize/SKILL.md +0 -0
  23. {remo_cli-4.4.0 → remo_cli-4.4.1}/.claude/skills/speckit-git-remote/SKILL.md +0 -0
  24. {remo_cli-4.4.0 → remo_cli-4.4.1}/.claude/skills/speckit-git-validate/SKILL.md +0 -0
  25. {remo_cli-4.4.0 → remo_cli-4.4.1}/.claude/skills/speckit-implement/SKILL.md +0 -0
  26. {remo_cli-4.4.0 → remo_cli-4.4.1}/.claude/skills/speckit-plan/SKILL.md +0 -0
  27. {remo_cli-4.4.0 → remo_cli-4.4.1}/.claude/skills/speckit-specify/SKILL.md +0 -0
  28. {remo_cli-4.4.0 → remo_cli-4.4.1}/.claude/skills/speckit-tasks/SKILL.md +0 -0
  29. {remo_cli-4.4.0 → remo_cli-4.4.1}/.claude/skills/speckit-taskstoissues/SKILL.md +0 -0
  30. {remo_cli-4.4.0 → remo_cli-4.4.1}/.devcontainer/devcontainer.json +0 -0
  31. {remo_cli-4.4.0 → remo_cli-4.4.1}/.dockerignore +0 -0
  32. {remo_cli-4.4.0 → remo_cli-4.4.1}/.github/CODEOWNERS +0 -0
  33. {remo_cli-4.4.0 → remo_cli-4.4.1}/.github/actions/publish-web-image/action.yml +0 -0
  34. {remo_cli-4.4.0 → remo_cli-4.4.1}/.github/codeql/codeql-config.yml +0 -0
  35. {remo_cli-4.4.0 → remo_cli-4.4.1}/.github/dependabot.yml +0 -0
  36. {remo_cli-4.4.0 → remo_cli-4.4.1}/.github/workflows/ci.yml +0 -0
  37. {remo_cli-4.4.0 → remo_cli-4.4.1}/.github/workflows/codeql.yml +0 -0
  38. {remo_cli-4.4.0 → remo_cli-4.4.1}/.github/workflows/dependency-review.yml +0 -0
  39. {remo_cli-4.4.0 → remo_cli-4.4.1}/.github/workflows/dev-build.yml +0 -0
  40. {remo_cli-4.4.0 → remo_cli-4.4.1}/.github/workflows/provision.yml +0 -0
  41. {remo_cli-4.4.0 → remo_cli-4.4.1}/.github/workflows/rc-image.yml +0 -0
  42. {remo_cli-4.4.0 → remo_cli-4.4.1}/.github/workflows/release-please.yml +0 -0
  43. {remo_cli-4.4.0 → remo_cli-4.4.1}/.github/workflows/release.yml +0 -0
  44. {remo_cli-4.4.0 → remo_cli-4.4.1}/.github/workflows/smoke-test-cleanup.yml +0 -0
  45. {remo_cli-4.4.0 → remo_cli-4.4.1}/.github/workflows/teardown.yml +0 -0
  46. {remo_cli-4.4.0 → remo_cli-4.4.1}/.gitignore +0 -0
  47. {remo_cli-4.4.0 → remo_cli-4.4.1}/.maverick/checkpoints/feature/implementation_complete.json +0 -0
  48. {remo_cli-4.4.0 → remo_cli-4.4.1}/.maverick/checkpoints/feature/phase_${{ index }}_complete.json +0 -0
  49. {remo_cli-4.4.0 → remo_cli-4.4.1}/.maverick/checkpoints/feature/validation_complete.json +0 -0
  50. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/extensions/.registry +0 -0
  51. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/extensions/git/README.md +0 -0
  52. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/extensions/git/commands/speckit.git.commit.md +0 -0
  53. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/extensions/git/commands/speckit.git.feature.md +0 -0
  54. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/extensions/git/commands/speckit.git.initialize.md +0 -0
  55. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/extensions/git/commands/speckit.git.remote.md +0 -0
  56. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/extensions/git/commands/speckit.git.validate.md +0 -0
  57. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/extensions/git/config-template.yml +0 -0
  58. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/extensions/git/extension.yml +0 -0
  59. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/extensions/git/git-config.yml +0 -0
  60. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/extensions/git/scripts/bash/auto-commit.sh +0 -0
  61. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/extensions/git/scripts/bash/create-new-feature.sh +0 -0
  62. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/extensions/git/scripts/bash/git-common.sh +0 -0
  63. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/extensions/git/scripts/bash/initialize-repo.sh +0 -0
  64. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/extensions/git/scripts/powershell/auto-commit.ps1 +0 -0
  65. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/extensions/git/scripts/powershell/create-new-feature.ps1 +0 -0
  66. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/extensions/git/scripts/powershell/git-common.ps1 +0 -0
  67. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/extensions/git/scripts/powershell/initialize-repo.ps1 +0 -0
  68. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/extensions.yml +0 -0
  69. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/feature.json +0 -0
  70. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/init-options.json +0 -0
  71. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/integration.json +0 -0
  72. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/integrations/claude.manifest.json +0 -0
  73. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/integrations/speckit.manifest.json +0 -0
  74. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/memory/constitution.md +0 -0
  75. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/scripts/bash/check-prerequisites.sh +0 -0
  76. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/scripts/bash/common.sh +0 -0
  77. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/scripts/bash/create-new-feature.sh +0 -0
  78. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/scripts/bash/setup-plan.sh +0 -0
  79. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/scripts/bash/setup-tasks.sh +0 -0
  80. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/scripts/bash/update-agent-context.sh +0 -0
  81. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/templates/agent-file-template.md +0 -0
  82. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/templates/checklist-template.md +0 -0
  83. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/templates/constitution-template.md +0 -0
  84. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/templates/plan-template.md +0 -0
  85. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/templates/spec-template.md +0 -0
  86. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/templates/tasks-template.md +0 -0
  87. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/workflows/speckit/workflow.yml +0 -0
  88. {remo_cli-4.4.0 → remo_cli-4.4.1}/.specify/workflows/workflow-registry.json +0 -0
  89. {remo_cli-4.4.0 → remo_cli-4.4.1}/CONTRIBUTING.md +0 -0
  90. {remo_cli-4.4.0 → remo_cli-4.4.1}/Dockerfile +0 -0
  91. {remo_cli-4.4.0 → remo_cli-4.4.1}/LICENSE +0 -0
  92. {remo_cli-4.4.0 → remo_cli-4.4.1}/SECURITY.md +0 -0
  93. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/.ansible-lint +0 -0
  94. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/README.md +0 -0
  95. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/ansible.cfg +0 -0
  96. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/aws_configure.yml +0 -0
  97. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/aws_resize.yml +0 -0
  98. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/aws_site.yml +0 -0
  99. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/aws_teardown.yml +0 -0
  100. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/group_vars/all.yml +0 -0
  101. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/group_vars/incus_containers.yml +0 -0
  102. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/group_vars/proxmox_containers.yml +0 -0
  103. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/hetzner_configure.yml +0 -0
  104. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/hetzner_provision.yml +0 -0
  105. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/hetzner_resize.yml +0 -0
  106. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/hetzner_site.yml +0 -0
  107. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/hetzner_teardown.yml +0 -0
  108. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/incus_bootstrap.yml +0 -0
  109. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/incus_configure.yml +0 -0
  110. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/incus_provision.yml +0 -0
  111. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/incus_resize.yml +0 -0
  112. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/incus_site.yml +0 -0
  113. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/incus_teardown.yml +0 -0
  114. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/inventory/hosts.yml +0 -0
  115. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/inventory/incus_containers.yml +0 -0
  116. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/proxmox_bootstrap.yml +0 -0
  117. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/proxmox_configure.yml +0 -0
  118. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/proxmox_provision.yml +0 -0
  119. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/proxmox_resize.yml +0 -0
  120. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/proxmox_site.yml +0 -0
  121. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/proxmox_teardown.yml +0 -0
  122. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/requirements.yml +0 -0
  123. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/aws_server/defaults/main.yml +0 -0
  124. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/aws_server/tasks/ebs.yml +0 -0
  125. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/aws_server/tasks/ec2.yml +0 -0
  126. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/aws_server/tasks/main.yml +0 -0
  127. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/aws_server/tasks/patch_manager.yml +0 -0
  128. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/aws_server/tasks/preflight.yml +0 -0
  129. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/aws_server/tasks/security_group.yml +0 -0
  130. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/deacon/defaults/main.yml +0 -0
  131. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/deacon/tasks/main.yml +0 -0
  132. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/devcontainers/tasks/main.yml +0 -0
  133. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/docker/handlers/main.yml +0 -0
  134. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/docker/tasks/main.yml +0 -0
  135. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/fzf/tasks/main.yml +0 -0
  136. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/github_cli/tasks/main.yml +0 -0
  137. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/hetzner_server/defaults/main.yml +0 -0
  138. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/hetzner_server/tasks/main.yml +0 -0
  139. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/incus_bootstrap/defaults/main.yml +0 -0
  140. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/incus_bootstrap/handlers/main.yml +0 -0
  141. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/incus_bootstrap/tasks/main.yml +0 -0
  142. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/incus_container/defaults/main.yml +0 -0
  143. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/incus_container/handlers/main.yml +0 -0
  144. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/incus_container/meta/main.yml +0 -0
  145. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/incus_container/tasks/main.yml +0 -0
  146. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/incus_container/tasks/preflight.yml +0 -0
  147. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/incus_container_teardown/defaults/main.yml +0 -0
  148. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/incus_container_teardown/meta/main.yml +0 -0
  149. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/incus_container_teardown/tasks/main.yml +0 -0
  150. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/nested_docker/defaults/main.yml +0 -0
  151. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/nested_docker/tasks/main.yml +0 -0
  152. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/nested_docker/templates/devcontainer-shim.sh.j2 +0 -0
  153. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/nodejs/defaults/main.yml +0 -0
  154. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/nodejs/files/nodesource-repo.gpg.key +0 -0
  155. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/nodejs/tasks/main.yml +0 -0
  156. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/proxmox_bootstrap/defaults/main.yml +0 -0
  157. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/proxmox_bootstrap/meta/main.yml +0 -0
  158. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/proxmox_bootstrap/tasks/main.yml +0 -0
  159. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/proxmox_container/defaults/main.yml +0 -0
  160. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/proxmox_container/handlers/main.yml +0 -0
  161. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/proxmox_container/meta/main.yml +0 -0
  162. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/proxmox_container/tasks/main.yml +0 -0
  163. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/proxmox_container/tasks/preflight.yml +0 -0
  164. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/proxmox_container_teardown/defaults/main.yml +0 -0
  165. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/proxmox_container_teardown/meta/main.yml +0 -0
  166. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/proxmox_container_teardown/tasks/main.yml +0 -0
  167. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/ssm_connector/defaults/main.yml +0 -0
  168. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/ssm_connector/handlers/main.yml +0 -0
  169. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/ssm_connector/tasks/main.yml +0 -0
  170. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/ssm_connector/tasks/scan_and_trust_host_key.yml +0 -0
  171. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/user_setup/defaults/main.yml +0 -0
  172. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/user_setup/tasks/main.yml +0 -0
  173. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/user_setup/templates/devshell.sh.j2 +0 -0
  174. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/user_setup/templates/project-launch.sh.j2 +0 -0
  175. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/user_setup/templates/project-menu.sh.j2 +0 -0
  176. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/user_setup/templates/remo-host.sh.j2 +0 -0
  177. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/zellij/defaults/main.yml +0 -0
  178. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/zellij/tasks/main.yml +0 -0
  179. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/zellij/templates/config.kdl.j2 +0 -0
  180. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/roles/zellij/templates/layouts/minimal.kdl.j2 +0 -0
  181. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/ssh_configure.yml +0 -0
  182. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/ssm_connector_enroll.yml +0 -0
  183. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/ssm_connector_unenroll.yml +0 -0
  184. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/tasks/configure_dev_tools.yml +0 -0
  185. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/tasks/repair_apt_sources.yml +0 -0
  186. {remo_cli-4.4.0 → remo_cli-4.4.1}/ansible/tasks/resolve_devcontainer_runtime.yml +0 -0
  187. {remo_cli-4.4.0 → remo_cli-4.4.1}/docker/Dockerfile +0 -0
  188. {remo_cli-4.4.0 → remo_cli-4.4.1}/docker/compose.example.yml +0 -0
  189. {remo_cli-4.4.0 → remo_cli-4.4.1}/docker/entrypoint.sh +0 -0
  190. {remo_cli-4.4.0 → remo_cli-4.4.1}/docs/aws.md +0 -0
  191. {remo_cli-4.4.0 → remo_cli-4.4.1}/docs/examples/orbstack-cloud-init-tailscale.yaml +0 -0
  192. {remo_cli-4.4.0 → remo_cli-4.4.1}/docs/examples/orbstack-cloud-init.yaml +0 -0
  193. {remo_cli-4.4.0 → remo_cli-4.4.1}/docs/feature-history.md +0 -0
  194. {remo_cli-4.4.0 → remo_cli-4.4.1}/docs/hetzner.md +0 -0
  195. {remo_cli-4.4.0 → remo_cli-4.4.1}/docs/incus.md +0 -0
  196. {remo_cli-4.4.0 → remo_cli-4.4.1}/docs/maintaining-claude-md.md +0 -0
  197. {remo_cli-4.4.0 → remo_cli-4.4.1}/docs/maintaining-generated-types.md +0 -0
  198. {remo_cli-4.4.0 → remo_cli-4.4.1}/docs/nested-overlayfs.md +0 -0
  199. {remo_cli-4.4.0 → remo_cli-4.4.1}/docs/provider-plugins.md +0 -0
  200. {remo_cli-4.4.0 → remo_cli-4.4.1}/docs/providers.md +0 -0
  201. {remo_cli-4.4.0 → remo_cli-4.4.1}/docs/proxmox.md +0 -0
  202. {remo_cli-4.4.0 → remo_cli-4.4.1}/docs/remo-web-speckit-input.md +0 -0
  203. {remo_cli-4.4.0 → remo_cli-4.4.1}/docs/remo-web.html +0 -0
  204. {remo_cli-4.4.0 → remo_cli-4.4.1}/docs/ssm-connector.md +0 -0
  205. {remo_cli-4.4.0 → remo_cli-4.4.1}/docs/web-session-interface.md +0 -0
  206. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/index.html +0 -0
  207. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/package-lock.json +0 -0
  208. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/package.json +0 -0
  209. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/playwright.config.ts +0 -0
  210. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/playwright.geometry.config.ts +0 -0
  211. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/scripts/check-types-fresh.mjs +0 -0
  212. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/scripts/generate-frame-types.mjs +0 -0
  213. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/scripts/generate-schema-types.mjs +0 -0
  214. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/api/client.test.ts +0 -0
  215. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/api/client.ts +0 -0
  216. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/api/generated/README.md +0 -0
  217. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/api/generated/openapi.json +0 -0
  218. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/api/generated/schema.d.ts +0 -0
  219. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/api/generated/terminal-frames.d.ts +0 -0
  220. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/api/generated/terminal-frames.json +0 -0
  221. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/api/generated.test.ts +0 -0
  222. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/AddHostPage.css +0 -0
  223. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/AddHostPage.test.tsx +0 -0
  224. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/AddHostPage.tsx +0 -0
  225. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/AppRoot.tsx +0 -0
  226. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/AppShell.css +0 -0
  227. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/AppShell.tsx +0 -0
  228. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/AwaitingAdoption.css +0 -0
  229. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/AwaitingAdoption.test.tsx +0 -0
  230. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/AwaitingAdoption.tsx +0 -0
  231. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/ConfigureConfirmDialog.tsx +0 -0
  232. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/DeleteProjectDialog.test.tsx +0 -0
  233. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/DeleteProjectDialog.tsx +0 -0
  234. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/DiagnosticsSection.css +0 -0
  235. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/DiagnosticsSection.test.tsx +0 -0
  236. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/DiagnosticsSection.tsx +0 -0
  237. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/HostDetailPage.css +0 -0
  238. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/HostDetailPage.test.tsx +0 -0
  239. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/HostDetailPage.tsx +0 -0
  240. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/HostShellPanel.tsx +0 -0
  241. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/JobProgressPanel.test.tsx +0 -0
  242. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/JobProgressPanel.tsx +0 -0
  243. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/OfflineOverlay.css +0 -0
  244. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/OfflineOverlay.tsx +0 -0
  245. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/PairToSync.css +0 -0
  246. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/PairToSync.test.tsx +0 -0
  247. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/PairToSync.tsx +0 -0
  248. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/RebuildConfirmDialog.test.tsx +0 -0
  249. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/RebuildConfirmDialog.tsx +0 -0
  250. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/RemoveHostDialog.tsx +0 -0
  251. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/SessionRail.css +0 -0
  252. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/SessionRail.test.tsx +0 -0
  253. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/SessionRail.tsx +0 -0
  254. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/SettingsPage.css +0 -0
  255. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/SettingsPage.tsx +0 -0
  256. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/ShortcutsModal.css +0 -0
  257. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/ShortcutsModal.tsx +0 -0
  258. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/TerminalCard.css +0 -0
  259. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/TerminalCard.test.tsx +0 -0
  260. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/TerminalCard.tsx +0 -0
  261. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/TopBar.css +0 -0
  262. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/TopBar.tsx +0 -0
  263. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/TypeToConfirmDialog.tsx +0 -0
  264. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/WorkspacePane.css +0 -0
  265. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/WorkspacePane.test.tsx +0 -0
  266. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/WorkspacePane.tsx +0 -0
  267. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/masterLayout.test.ts +0 -0
  268. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/masterLayout.ts +0 -0
  269. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/providerMeta.test.ts +0 -0
  270. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/providerMeta.ts +0 -0
  271. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/railModel.test.ts +0 -0
  272. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/components/railModel.ts +0 -0
  273. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/lib/breakpoints.ts +0 -0
  274. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/lib/clipboard.ts +0 -0
  275. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/lib/fullscreen.ts +0 -0
  276. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/main.tsx +0 -0
  277. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/state/diagnostics.test.ts +0 -0
  278. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/state/diagnostics.ts +0 -0
  279. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/state/discovery.test.ts +0 -0
  280. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/state/discovery.ts +0 -0
  281. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/state/fonts.ts +0 -0
  282. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/state/health.test.ts +0 -0
  283. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/state/health.ts +0 -0
  284. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/state/hostStats.test.ts +0 -0
  285. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/state/hostStats.ts +0 -0
  286. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/state/latency.test.ts +0 -0
  287. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/state/latency.ts +0 -0
  288. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/state/settings.test.ts +0 -0
  289. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/state/settings.ts +0 -0
  290. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/state/useConsoleKeyboard.ts +0 -0
  291. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/state/workspace.test.ts +0 -0
  292. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/state/workspace.ts +0 -0
  293. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/terminal/.gitkeep +0 -0
  294. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/terminal/RendererAdapter.ts +0 -0
  295. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/terminal/TerminalConnection.test.ts +0 -0
  296. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/terminal/TerminalConnection.ts +0 -0
  297. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/terminal/XtermRenderer.test.ts +0 -0
  298. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/terminal/XtermRenderer.ts +0 -0
  299. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/terminal/defaultRenderer.ts +0 -0
  300. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/terminal/fitLoop.test.ts +0 -0
  301. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/terminal/fitLoop.ts +0 -0
  302. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/terminal/keymap.test.ts +0 -0
  303. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/terminal/keymap.ts +0 -0
  304. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/test/setup.ts +0 -0
  305. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/theme/fonts.ts +0 -0
  306. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/theme/terminalThemes.test.ts +0 -0
  307. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/theme/terminalThemes.ts +0 -0
  308. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/src/theme/tokens.css +0 -0
  309. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/tests/e2e/fixtures.ts +0 -0
  310. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/tests/e2e/host-detail.spec.ts +0 -0
  311. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/tests/e2e/keyboard-routing.spec.ts +0 -0
  312. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/tests/e2e/mobile.spec.ts +0 -0
  313. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/tests/e2e/reconnect.spec.ts +0 -0
  314. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/tests/e2e/registry-admin.spec.ts +0 -0
  315. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/tests/e2e/terminal-shell-io.spec.ts +0 -0
  316. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/tests/e2e/terminal-tui-compatibility.spec.ts +0 -0
  317. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/tests/e2e/workspace-layout.spec.ts +0 -0
  318. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/tests/geometry/global.d.ts +0 -0
  319. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/tests/geometry/harness/index.html +0 -0
  320. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/tests/geometry/harness/main.tsx +0 -0
  321. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/tests/geometry/terminal-fit.spec.ts +0 -0
  322. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/tsconfig.json +0 -0
  323. {remo_cli-4.4.0 → remo_cli-4.4.1}/frontend/vite.config.ts +0 -0
  324. {remo_cli-4.4.0 → remo_cli-4.4.1}/maverick.yaml +0 -0
  325. {remo_cli-4.4.0 → remo_cli-4.4.1}/project-menu.sh +0 -0
  326. {remo_cli-4.4.0 → remo_cli-4.4.1}/release-please-config.json +0 -0
  327. {remo_cli-4.4.0 → remo_cli-4.4.1}/remo +0 -0
  328. {remo_cli-4.4.0 → remo_cli-4.4.1}/remo.svg +0 -0
  329. {remo_cli-4.4.0 → remo_cli-4.4.1}/run.sh +0 -0
  330. {remo_cli-4.4.0 → remo_cli-4.4.1}/scripts/export_openapi.py +0 -0
  331. {remo_cli-4.4.0 → remo_cli-4.4.1}/scripts/palette-check.sh +0 -0
  332. {remo_cli-4.4.0 → remo_cli-4.4.1}/scripts/setup-aws-oidc.sh +0 -0
  333. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/001-bootstrap-incus-host/checklists/requirements.md +0 -0
  334. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/001-bootstrap-incus-host/checklists/validation.md +0 -0
  335. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/001-bootstrap-incus-host/contracts/playbook-interface.yaml +0 -0
  336. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/001-bootstrap-incus-host/contracts/role-interface.yaml +0 -0
  337. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/001-bootstrap-incus-host/data-model.md +0 -0
  338. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/001-bootstrap-incus-host/plan.md +0 -0
  339. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/001-bootstrap-incus-host/quickstart.md +0 -0
  340. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/001-bootstrap-incus-host/research.md +0 -0
  341. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/001-bootstrap-incus-host/spec.md +0 -0
  342. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/001-bootstrap-incus-host/tasks.md +0 -0
  343. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/002-incus-container-support/checklists/requirements.md +0 -0
  344. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/002-incus-container-support/contracts/playbook-interface.yaml +0 -0
  345. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/002-incus-container-support/contracts/role-interface.yaml +0 -0
  346. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/002-incus-container-support/data-model.md +0 -0
  347. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/002-incus-container-support/plan.md +0 -0
  348. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/002-incus-container-support/quickstart.md +0 -0
  349. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/002-incus-container-support/research.md +0 -0
  350. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/002-incus-container-support/spec.md +0 -0
  351. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/002-incus-container-support/tasks.md +0 -0
  352. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/003-python-cli-rewrite/checklists/requirements.md +0 -0
  353. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/003-python-cli-rewrite/data-model.md +0 -0
  354. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/003-python-cli-rewrite/plan.md +0 -0
  355. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/003-python-cli-rewrite/quickstart.md +0 -0
  356. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/003-python-cli-rewrite/research.md +0 -0
  357. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/003-python-cli-rewrite/spec.md +0 -0
  358. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/003-python-cli-rewrite/tasks.md +0 -0
  359. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/004-proxmox-container-support/spec.md +0 -0
  360. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/005-provider-snapshots/checklists/requirements.md +0 -0
  361. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/005-provider-snapshots/contracts/cli-surface.md +0 -0
  362. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/005-provider-snapshots/data-model.md +0 -0
  363. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/005-provider-snapshots/plan.md +0 -0
  364. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/005-provider-snapshots/quickstart.md +0 -0
  365. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/005-provider-snapshots/research.md +0 -0
  366. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/005-provider-snapshots/spec.md +0 -0
  367. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/005-provider-snapshots/tasks.md +0 -0
  368. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/010-web-session-interface/checklists/requirements.md +0 -0
  369. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/010-web-session-interface/contracts/remo-host-protocol.md +0 -0
  370. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/010-web-session-interface/contracts/rest-api.md +0 -0
  371. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/010-web-session-interface/contracts/terminal-websocket.md +0 -0
  372. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/010-web-session-interface/data-model.md +0 -0
  373. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/010-web-session-interface/plan.md +0 -0
  374. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/010-web-session-interface/quickstart.md +0 -0
  375. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/010-web-session-interface/research.md +0 -0
  376. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/010-web-session-interface/spec.md +0 -0
  377. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/010-web-session-interface/tasks.md +0 -0
  378. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/011-web-adopt/checklists/requirements.md +0 -0
  379. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/011-web-adopt/contracts/cli-web-adopt.md +0 -0
  380. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/011-web-adopt/contracts/setup-api.md +0 -0
  381. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/011-web-adopt/data-model.md +0 -0
  382. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/011-web-adopt/plan.md +0 -0
  383. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/011-web-adopt/quickstart-results.md +0 -0
  384. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/011-web-adopt/quickstart.md +0 -0
  385. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/011-web-adopt/research.md +0 -0
  386. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/011-web-adopt/spec.md +0 -0
  387. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/011-web-adopt/tasks.md +0 -0
  388. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/012-web-adopt-pairing/contracts/cli-web-adopt.md +0 -0
  389. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/012-web-adopt-pairing/contracts/pairing-api.md +0 -0
  390. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/012-web-adopt-pairing/contracts/setup-api.md +0 -0
  391. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/012-web-adopt-pairing/data-model.md +0 -0
  392. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/012-web-adopt-pairing/plan.md +0 -0
  393. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/012-web-adopt-pairing/quickstart.md +0 -0
  394. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/012-web-adopt-pairing/research.md +0 -0
  395. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/012-web-adopt-pairing/spec.md +0 -0
  396. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/012-web-adopt-pairing/tasks.md +0 -0
  397. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/013-managed-instance-tags/contracts/cli-sync.md +0 -0
  398. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/013-managed-instance-tags/contracts/marker-commands.md +0 -0
  399. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/013-managed-instance-tags/data-model.md +0 -0
  400. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/013-managed-instance-tags/plan.md +0 -0
  401. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/013-managed-instance-tags/quickstart.md +0 -0
  402. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/013-managed-instance-tags/research.md +0 -0
  403. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/013-managed-instance-tags/spec.md +0 -0
  404. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/013-managed-instance-tags/tasks.md +0 -0
  405. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/014-register-ssh-host/contracts/add-command.md +0 -0
  406. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/014-register-ssh-host/contracts/remove-command.md +0 -0
  407. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/014-register-ssh-host/data-model.md +0 -0
  408. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/014-register-ssh-host/plan.md +0 -0
  409. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/014-register-ssh-host/quickstart.md +0 -0
  410. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/014-register-ssh-host/research.md +0 -0
  411. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/014-register-ssh-host/spec.md +0 -0
  412. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/014-register-ssh-host/tasks.md +0 -0
  413. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/015-registry-v2/checklists/requirements.md +0 -0
  414. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/015-registry-v2/contracts/mirror-payload-v2.md +0 -0
  415. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/015-registry-v2/contracts/registry-accessor-api.md +0 -0
  416. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/015-registry-v2/contracts/registry-file-v2.md +0 -0
  417. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/015-registry-v2/data-model.md +0 -0
  418. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/015-registry-v2/plan.md +0 -0
  419. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/015-registry-v2/quickstart.md +0 -0
  420. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/015-registry-v2/research.md +0 -0
  421. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/015-registry-v2/spec.md +0 -0
  422. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/015-registry-v2/tasks.md +0 -0
  423. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/016-sync-reconcile/checklists/requirements.md +0 -0
  424. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/016-sync-reconcile/contracts/cli-sync.md +0 -0
  425. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/016-sync-reconcile/contracts/provider-probe.md +0 -0
  426. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/016-sync-reconcile/data-model.md +0 -0
  427. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/016-sync-reconcile/plan.md +0 -0
  428. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/016-sync-reconcile/quickstart.md +0 -0
  429. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/016-sync-reconcile/research.md +0 -0
  430. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/016-sync-reconcile/spec.md +0 -0
  431. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/016-sync-reconcile/tasks.md +0 -0
  432. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/017-web-adopt-simplify/checklists/requirements.md +0 -0
  433. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/017-web-adopt-simplify/contracts/cli-web-push.md +0 -0
  434. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/017-web-adopt-simplify/contracts/cli-web-status.md +0 -0
  435. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/017-web-adopt-simplify/contracts/revocation.md +0 -0
  436. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/017-web-adopt-simplify/contracts/setup-status-marker.md +0 -0
  437. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/017-web-adopt-simplify/data-model.md +0 -0
  438. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/017-web-adopt-simplify/plan.md +0 -0
  439. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/017-web-adopt-simplify/quickstart.md +0 -0
  440. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/017-web-adopt-simplify/research.md +0 -0
  441. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/017-web-adopt-simplify/spec.md +0 -0
  442. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/017-web-adopt-simplify/tasks.md +0 -0
  443. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/018-provider-abstraction/baseline-notes.md +0 -0
  444. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/018-provider-abstraction/checklists/requirements.md +0 -0
  445. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/018-provider-abstraction/contracts/cli-surface.md +0 -0
  446. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/018-provider-abstraction/contracts/errors.md +0 -0
  447. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/018-provider-abstraction/contracts/lifecycle-templates.md +0 -0
  448. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/018-provider-abstraction/contracts/provider-protocol.md +0 -0
  449. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/018-provider-abstraction/contracts/sync-merge.md +0 -0
  450. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/018-provider-abstraction/data-model.md +0 -0
  451. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/018-provider-abstraction/plan.md +0 -0
  452. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/018-provider-abstraction/quickstart.md +0 -0
  453. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/018-provider-abstraction/research.md +0 -0
  454. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/018-provider-abstraction/spec.md +0 -0
  455. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/018-provider-abstraction/tasks.md +0 -0
  456. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/019-hygiene-deps-docs/checklists/requirements.md +0 -0
  457. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/019-hygiene-deps-docs/contracts/cli-surface-delta.md +0 -0
  458. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/019-hygiene-deps-docs/contracts/docs-structure-check.md +0 -0
  459. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/019-hygiene-deps-docs/data-model.md +0 -0
  460. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/019-hygiene-deps-docs/plan.md +0 -0
  461. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/019-hygiene-deps-docs/quickstart.md +0 -0
  462. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/019-hygiene-deps-docs/research.md +0 -0
  463. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/019-hygiene-deps-docs/spec.md +0 -0
  464. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/019-hygiene-deps-docs/tasks.md +0 -0
  465. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/020-openapi-type-generation/checklists/requirements.md +0 -0
  466. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/020-openapi-type-generation/contracts/drift-checks.md +0 -0
  467. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/020-openapi-type-generation/contracts/terminal-frames-v1.md +0 -0
  468. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/020-openapi-type-generation/data-model.md +0 -0
  469. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/020-openapi-type-generation/plan.md +0 -0
  470. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/020-openapi-type-generation/quickstart.md +0 -0
  471. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/020-openapi-type-generation/research.md +0 -0
  472. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/020-openapi-type-generation/spec.md +0 -0
  473. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/020-openapi-type-generation/tasks.md +0 -0
  474. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/021-cli-plane-separation/contracts/cli-surface.md +0 -0
  475. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/021-cli-plane-separation/contracts/descriptor-schema.md +0 -0
  476. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/021-cli-plane-separation/data-model.md +0 -0
  477. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/021-cli-plane-separation/plan.md +0 -0
  478. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/021-cli-plane-separation/quickstart.md +0 -0
  479. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/021-cli-plane-separation/research.md +0 -0
  480. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/021-cli-plane-separation/spec.md +0 -0
  481. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/021-cli-plane-separation/tasks.md +0 -0
  482. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/023-web-registry-sync/contracts/cli-web-sync.md +0 -0
  483. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/023-web-registry-sync/contracts/mirror-meta.md +0 -0
  484. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/023-web-registry-sync/contracts/mirror-payload-v3.md +0 -0
  485. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/023-web-registry-sync/contracts/push-cache-v4.md +0 -0
  486. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/023-web-registry-sync/contracts/registry-admin-api.md +0 -0
  487. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/023-web-registry-sync/contracts/setup-registry-get.md +0 -0
  488. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/024-discovery-resilience/checklists/requirements.md +0 -0
  489. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/024-discovery-resilience/contracts/instance-out-stale.md +0 -0
  490. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/024-discovery-resilience/data-model.md +0 -0
  491. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/024-discovery-resilience/plan.md +0 -0
  492. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/024-discovery-resilience/quickstart.md +0 -0
  493. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/024-discovery-resilience/research.md +0 -0
  494. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/024-discovery-resilience/spec.md +0 -0
  495. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/024-discovery-resilience/tasks.md +0 -0
  496. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/025-ssm-connector/checklists/requirements.md +0 -0
  497. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/025-ssm-connector/contracts/ansible-role.md +0 -0
  498. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/025-ssm-connector/contracts/cli.md +0 -0
  499. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/025-ssm-connector/contracts/session-document.md +0 -0
  500. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/025-ssm-connector/data-model.md +0 -0
  501. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/025-ssm-connector/issues.md +0 -0
  502. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/025-ssm-connector/plan.md +0 -0
  503. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/025-ssm-connector/quickstart.md +0 -0
  504. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/025-ssm-connector/research.md +0 -0
  505. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/025-ssm-connector/spec.md +0 -0
  506. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/025-ssm-connector/tasks.md +0 -0
  507. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/026-deacon-default-runtime/checklists/requirements.md +0 -0
  508. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/026-deacon-default-runtime/contracts/remo-host-capabilities.md +0 -0
  509. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/026-deacon-default-runtime/contracts/runtime-resolution.md +0 -0
  510. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/026-deacon-default-runtime/data-model.md +0 -0
  511. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/026-deacon-default-runtime/issues.md +0 -0
  512. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/026-deacon-default-runtime/plan.md +0 -0
  513. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/026-deacon-default-runtime/quickstart.md +0 -0
  514. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/026-deacon-default-runtime/research.md +0 -0
  515. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/026-deacon-default-runtime/spec.md +0 -0
  516. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/026-deacon-default-runtime/tasks.md +0 -0
  517. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/027-provider-plugins/checklists/requirements.md +0 -0
  518. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/027-provider-plugins/contracts/plugin-contract.md +0 -0
  519. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/027-provider-plugins/data-model.md +0 -0
  520. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/027-provider-plugins/issues.md +0 -0
  521. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/027-provider-plugins/plan.md +0 -0
  522. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/027-provider-plugins/quickstart.md +0 -0
  523. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/027-provider-plugins/research.md +0 -0
  524. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/027-provider-plugins/spec.md +0 -0
  525. {remo_cli-4.4.0 → remo_cli-4.4.1}/specs/027-provider-plugins/tasks.md +0 -0
  526. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/__init__.py +0 -0
  527. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/__main__.py +0 -0
  528. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/cli/__init__.py +0 -0
  529. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/cli/added.py +0 -0
  530. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/cli/connector.py +0 -0
  531. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/cli/cp.py +0 -0
  532. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/cli/main.py +0 -0
  533. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/cli/plugins.py +0 -0
  534. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/cli/providers/__init__.py +0 -0
  535. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/cli/providers/factory.py +0 -0
  536. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/cli/shell.py +0 -0
  537. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/cli/web.py +0 -0
  538. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/core/__init__.py +0 -0
  539. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/core/ansible_runner.py +0 -0
  540. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/core/attach.py +0 -0
  541. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/core/completion.py +0 -0
  542. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/core/config.py +0 -0
  543. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/core/connector.py +0 -0
  544. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/core/errors.py +0 -0
  545. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/core/known_hosts.py +0 -0
  546. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/core/lifecycle.py +0 -0
  547. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/core/output.py +0 -0
  548. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/core/picker.py +0 -0
  549. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/core/platform.py +0 -0
  550. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/core/provider_plugins.py +0 -0
  551. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/core/provider_protocol.py +0 -0
  552. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/core/provider_registry.py +0 -0
  553. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/core/reconcile.py +0 -0
  554. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/core/registry.py +0 -0
  555. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/core/remo_attach_document.json +0 -0
  556. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/core/remo_host_client.py +0 -0
  557. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/core/rsync.py +0 -0
  558. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/core/snapshot.py +0 -0
  559. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/core/ssh.py +0 -0
  560. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/core/validation.py +0 -0
  561. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/core/version.py +0 -0
  562. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/core/web_adopt.py +0 -0
  563. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/core/web_drift.py +0 -0
  564. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/core/web_sync.py +0 -0
  565. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/models/__init__.py +0 -0
  566. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/models/capability.py +0 -0
  567. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/models/discovery.py +0 -0
  568. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/models/host.py +0 -0
  569. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/models/host_job.py +0 -0
  570. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/models/host_stats.py +0 -0
  571. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/models/session_target.py +0 -0
  572. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/models/snapshot.py +0 -0
  573. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/providers/__init__.py +0 -0
  574. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/providers/added.py +0 -0
  575. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/providers/aws.py +0 -0
  576. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/providers/aws_descriptor.py +0 -0
  577. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/providers/builtin.py +0 -0
  578. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/providers/connector.py +0 -0
  579. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/providers/hetzner.py +0 -0
  580. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/providers/hetzner_descriptor.py +0 -0
  581. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/providers/incus.py +0 -0
  582. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/providers/incus_descriptor.py +0 -0
  583. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/providers/proxmox.py +0 -0
  584. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/providers/proxmox_descriptor.py +0 -0
  585. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/web/__init__.py +0 -0
  586. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/web/api/__init__.py +0 -0
  587. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/web/api/gating.py +0 -0
  588. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/web/api/host_admin.py +0 -0
  589. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/web/api/hosts.py +0 -0
  590. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/web/api/pairing.py +0 -0
  591. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/web/api/registry_admin.py +0 -0
  592. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/web/api/setup.py +0 -0
  593. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/web/api/terminals.py +0 -0
  594. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/web/app.py +0 -0
  595. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/web/check.py +0 -0
  596. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/web/config.py +0 -0
  597. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/web/discovery.py +0 -0
  598. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/web/frames.py +0 -0
  599. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/web/health.py +0 -0
  600. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/web/jobs.py +0 -0
  601. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/web/logging_config.py +0 -0
  602. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/web/mirror_meta.py +0 -0
  603. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/web/models.py +0 -0
  604. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/web/operator_auth.py +0 -0
  605. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/web/pairing.py +0 -0
  606. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/web/ssh_master.py +0 -0
  607. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/web/state.py +0 -0
  608. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/web/terminal.py +0 -0
  609. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/web/terminal_registry.py +0 -0
  610. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/web/tokens.py +0 -0
  611. {remo_cli-4.4.0 → remo_cli-4.4.1}/src/remo_cli/web/trust_store.py +0 -0
  612. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/__init__.py +0 -0
  613. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/ansible/__init__.py +0 -0
  614. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/ansible/test_apt_sources_repair.py +0 -0
  615. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/ansible/test_authorized_keys_bootstrap.py +0 -0
  616. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/ansible/test_deacon_role.py +0 -0
  617. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/ansible/test_devcontainer_runtime_resolution.py +0 -0
  618. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/ansible/test_remo_host_idempotency.py +0 -0
  619. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/ansible/test_ssh_configure_connection.py +0 -0
  620. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/ansible/test_ssm_connector_role.py +0 -0
  621. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/ansible/test_user_setup_docker_group.py +0 -0
  622. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/conftest.py +0 -0
  623. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/fixtures/remo_fixture_provider/pyproject.toml +0 -0
  624. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/fixtures/remo_fixture_provider/src/remo_fixture_provider/__init__.py +0 -0
  625. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/fixtures/remo_fixture_provider/src/remo_fixture_provider/descriptor.py +0 -0
  626. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/fixtures/remo_fixture_provider/src/remo_fixture_provider/provider.py +0 -0
  627. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/image/__init__.py +0 -0
  628. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/image/test_docker_image.py +0 -0
  629. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/integration/__init__.py +0 -0
  630. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/integration/_nine_terminal_fixture.py +0 -0
  631. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/integration/fish_completion.sh +0 -0
  632. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/integration/orbstack-cloud-init.yml +0 -0
  633. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/integration/orbstack.sh +0 -0
  634. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/integration/test_fixture_plugin_e2e.py +0 -0
  635. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/integration/test_nine_terminals.py +0 -0
  636. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/integration/test_nine_terminals_soak.py +0 -0
  637. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/integration/test_registry_concurrency.py +0 -0
  638. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/integration/test_remo_host_e2e.py +0 -0
  639. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/integration/test_security_rejections.py +0 -0
  640. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/integration/test_setup_payload_versions.py +0 -0
  641. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/integration/test_sync_reconcile.py +0 -0
  642. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/integration/test_terminal_attach.py +0 -0
  643. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/integration/test_web_adopt_e2e.py +0 -0
  644. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/integration/test_web_cli_parity.py +0 -0
  645. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/integration/test_web_sync_e2e.py +0 -0
  646. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/perf/__init__.py +0 -0
  647. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/perf/test_latency.py +0 -0
  648. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/perf/test_registry_perf.py +0 -0
  649. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/__init__.py +0 -0
  650. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/cli/__init__.py +0 -0
  651. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/cli/providers/test_aws_snapshot.py +0 -0
  652. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/cli/providers/test_hetzner_snapshot.py +0 -0
  653. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/cli/providers/test_incus_snapshot.py +0 -0
  654. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/cli/providers/test_incus_sync_all.py +0 -0
  655. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/cli/providers/test_proxmox_snapshot.py +0 -0
  656. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/cli/providers/test_proxmox_sync_all.py +0 -0
  657. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/cli/surface_baseline.py +0 -0
  658. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/cli/test_add_cmd.py +0 -0
  659. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/cli/test_cli_uniformity.py +0 -0
  660. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/cli/test_configure_cmd.py +0 -0
  661. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/cli/test_connector_cmd.py +0 -0
  662. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/cli/test_connector_lazy_import.py +0 -0
  663. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/cli/test_cp.py +0 -0
  664. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/cli/test_main.py +0 -0
  665. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/cli/test_platform_gate.py +0 -0
  666. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/cli/test_providers_cmd.py +0 -0
  667. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/cli/test_remove_cmd.py +0 -0
  668. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/cli/test_shell.py +0 -0
  669. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/cli/test_shell_added.py +0 -0
  670. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/cli/test_startup_imports.py +0 -0
  671. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/cli/test_surface_preservation.py +0 -0
  672. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/cli/test_web_adopt_cmd.py +0 -0
  673. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/__init__.py +0 -0
  674. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_ansible_runner.py +0 -0
  675. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_attach_builder.py +0 -0
  676. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_completion.py +0 -0
  677. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_config.py +0 -0
  678. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_connector_document.py +0 -0
  679. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_connector_exposure.py +0 -0
  680. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_connector_target.py +0 -0
  681. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_errors.py +0 -0
  682. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_known_hosts.py +0 -0
  683. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_lifecycle.py +0 -0
  684. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_migration_tagging_notice.py +0 -0
  685. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_output.py +0 -0
  686. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_picker.py +0 -0
  687. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_platform.py +0 -0
  688. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_provider_plugins.py +0 -0
  689. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_provider_registry.py +0 -0
  690. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_reconcile.py +0 -0
  691. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_registry_format.py +0 -0
  692. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_registry_locking.py +0 -0
  693. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_registry_migration.py +0 -0
  694. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_registry_plugin_types.py +0 -0
  695. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_remo_host_client.py +0 -0
  696. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_rsync.py +0 -0
  697. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_snapshot.py +0 -0
  698. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_ssh.py +0 -0
  699. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_ssh_added.py +0 -0
  700. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_ssh_controlpath.py +0 -0
  701. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_ssh_identity_opts.py +0 -0
  702. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_validation.py +0 -0
  703. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_version.py +0 -0
  704. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_web_adopt_authorize.py +0 -0
  705. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_web_adopt_code.py +0 -0
  706. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_web_adopt_payload.py +0 -0
  707. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_web_adopt_trust.py +0 -0
  708. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_web_drift.py +0 -0
  709. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_web_push.py +0 -0
  710. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_web_push_self_heal.py +0 -0
  711. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/core/test_web_sync.py +0 -0
  712. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/models/__init__.py +0 -0
  713. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/models/test_capability.py +0 -0
  714. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/models/test_discovery.py +0 -0
  715. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/models/test_session_target.py +0 -0
  716. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/__init__.py +0 -0
  717. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/fake_provider.py +0 -0
  718. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_added_add.py +0 -0
  719. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_added_configure.py +0 -0
  720. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_added_provider_guard.py +0 -0
  721. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_added_update_remove.py +0 -0
  722. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_added_verify.py +0 -0
  723. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_aws_provider_protocol.py +0 -0
  724. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_aws_snapshot.py +0 -0
  725. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_aws_sync.py +0 -0
  726. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_aws_upgrade_resize.py +0 -0
  727. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_connector_attach.py +0 -0
  728. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_connector_enroll.py +0 -0
  729. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_hetzner_entry_adapters.py +0 -0
  730. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_hetzner_http.py +0 -0
  731. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_hetzner_label.py +0 -0
  732. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_hetzner_resize.py +0 -0
  733. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_hetzner_snapshot.py +0 -0
  734. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_hetzner_sync.py +0 -0
  735. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_host_user_consistency.py +0 -0
  736. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_incus_entry_adapters.py +0 -0
  737. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_incus_marker.py +0 -0
  738. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_incus_resize.py +0 -0
  739. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_incus_snapshot.py +0 -0
  740. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_incus_sync.py +0 -0
  741. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_missing_sdk.py +0 -0
  742. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_provider_conformance.py +0 -0
  743. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_provider_registry_entries.py +0 -0
  744. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_proxmox_devcontainer_runtime.py +0 -0
  745. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_proxmox_marker.py +0 -0
  746. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_proxmox_provider_protocol.py +0 -0
  747. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_proxmox_resize.py +0 -0
  748. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_proxmox_snapshot.py +0 -0
  749. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/providers/test_proxmox_sync.py +0 -0
  750. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/test_ansible_templates.py +0 -0
  751. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/test_architecture.py +0 -0
  752. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/test_architecture_provider_literals.py +0 -0
  753. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/test_dependabot_config.py +0 -0
  754. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/test_dev_build_workflow.py +0 -0
  755. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/test_devcontainer_shim.py +0 -0
  756. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/test_docs_examples.py +0 -0
  757. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/test_docs_runtime_claims.py +0 -0
  758. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/test_docs_structure.py +0 -0
  759. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/test_host_model.py +0 -0
  760. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/test_host_ssh_type.py +0 -0
  761. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/test_lockfile_version.py +0 -0
  762. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/test_release_prerelease_detection.py +0 -0
  763. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/test_schema_drift.py +0 -0
  764. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/test_web_image_action.py +0 -0
  765. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/test_workflow_action_pins.py +0 -0
  766. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/__init__.py +0 -0
  767. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/_pairing_support.py +0 -0
  768. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/conftest.py +0 -0
  769. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/fixtures/hosts_response.json +0 -0
  770. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/fixtures/sessions_response.json +0 -0
  771. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_backpressure.py +0 -0
  772. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_check.py +0 -0
  773. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_check_plugins.py +0 -0
  774. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_cli_jobs.py +0 -0
  775. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_config.py +0 -0
  776. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_csp.py +0 -0
  777. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_discovery.py +0 -0
  778. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_discovery_refresh_force.py +0 -0
  779. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_frames.py +0 -0
  780. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_health_states.py +0 -0
  781. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_host_admin_api.py +0 -0
  782. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_hosts_mapping.py +0 -0
  783. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_lazy_import.py +0 -0
  784. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_log_redaction.py +0 -0
  785. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_mint_gating.py +0 -0
  786. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_mirror_meta.py +0 -0
  787. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_operator_auth.py +0 -0
  788. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_pairing.py +0 -0
  789. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_pairing_origin.py +0 -0
  790. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_payload_equivalence.py +0 -0
  791. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_registry_admin_api.py +0 -0
  792. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_registry_readonly.py +0 -0
  793. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_service_identity_selection.py +0 -0
  794. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_setup_api.py +0 -0
  795. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_setup_auth.py +0 -0
  796. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_setup_dormancy.py +0 -0
  797. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_state.py +0 -0
  798. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_terminal_resize.py +0 -0
  799. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_terminals_api.py +0 -0
  800. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_tokens.py +0 -0
  801. {remo_cli-4.4.0 → remo_cli-4.4.1}/tests/unit/web/test_trust_store.py +0 -0
@@ -1,10 +1,26 @@
1
1
  name: Smoke Tests
2
2
 
3
+ # These provision real instances, so what triggers them is a cost decision as
4
+ # much as a coverage one:
5
+ #
6
+ # pull_request -> `incus` only (local container, free)
7
+ # push to main / weekly -> aws + hetzner + incus (aws and hetzner are billable)
8
+ # workflow_dispatch -> whichever `provider` is chosen
9
+ #
10
+ # The paid providers are gated off pull_request in each job's `if:` below.
11
+ #
12
+ # `src/remo_cli/web/**` is excluded: the web service plays no part in
13
+ # provisioning, so a console-only change (#184, #187, #189) should not provision
14
+ # anything. Negation is order-sensitive — the `!` line must follow the broad
15
+ # `src/remo_cli/**` it narrows.
16
+ #
17
+ # tests/unit/test_smoke_test_scope.py pins all of this.
3
18
  on:
4
19
  pull_request:
5
20
  branches: [main]
6
21
  paths:
7
22
  - 'src/remo_cli/**'
23
+ - '!src/remo_cli/web/**'
8
24
  - 'ansible/**'
9
25
  - 'pyproject.toml'
10
26
  - 'uv.lock'
@@ -13,6 +29,7 @@ on:
13
29
  branches: [main]
14
30
  paths:
15
31
  - 'src/remo_cli/**'
32
+ - '!src/remo_cli/web/**'
16
33
  - 'ansible/**'
17
34
  - 'pyproject.toml'
18
35
  - 'uv.lock'
@@ -38,8 +55,13 @@ jobs:
38
55
  # AWS EC2 — SSM access
39
56
  # ===========================================================================
40
57
  aws:
58
+ # Not on pull requests: this provisions a real, billable instance.
59
+ # PRs are covered by the `incus` job below, which exercises the same
60
+ # create -> configure -> destroy path in a local container for free.
61
+ # aws/hetzner run on push to main, weekly, and on manual dispatch.
41
62
  if: >-
42
63
  github.actor != 'dependabot[bot]' &&
64
+ github.event_name != 'pull_request' &&
43
65
  (github.event_name != 'workflow_dispatch' ||
44
66
  github.event.inputs.provider == 'all' ||
45
67
  github.event.inputs.provider == 'aws')
@@ -207,8 +229,13 @@ jobs:
207
229
  # Hetzner Cloud
208
230
  # ===========================================================================
209
231
  hetzner:
232
+ # Not on pull requests: this provisions a real, billable instance.
233
+ # PRs are covered by the `incus` job below, which exercises the same
234
+ # create -> configure -> destroy path in a local container for free.
235
+ # aws/hetzner run on push to main, weekly, and on manual dispatch.
210
236
  if: >-
211
237
  github.actor != 'dependabot[bot]' &&
238
+ github.event_name != 'pull_request' &&
212
239
  (github.event_name != 'workflow_dispatch' ||
213
240
  github.event.inputs.provider == 'all' ||
214
241
  github.event.inputs.provider == 'hetzner')
@@ -327,6 +354,9 @@ jobs:
327
354
  # Incus / LXC (local on runner)
328
355
  # ===========================================================================
329
356
  incus:
357
+ # DOES run on pull requests, unlike aws/hetzner: the container is local
358
+ # to the runner, so it costs nothing beyond runner minutes while still
359
+ # proving the real provisioning path end to end.
330
360
  if: >-
331
361
  github.actor != 'dependabot[bot]' &&
332
362
  (github.event_name != 'workflow_dispatch' ||
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "4.4.1"
3
+ }
@@ -392,6 +392,22 @@ made conditional to get a build green — fix the code or amend the gate by PR.
392
392
  | Packaging | wheel install smoke, Docker amd64+arm64 | Distribution integrity |
393
393
  | Security | CodeQL, dependency review | Supply chain |
394
394
 
395
+ Provider smoke tests (`smoke-test.yml`) are deliberately **not** in that table —
396
+ they are not all merge gates, because they provision real instances and what runs
397
+ when is a cost decision:
398
+
399
+ | Trigger | Providers | Cost |
400
+ |---------|-----------|------|
401
+ | pull request | `incus` only | runner minutes (local container) |
402
+ | push to `main`, weekly cron | `aws` + `hetzner` + `incus` | aws/hetzner are billable |
403
+ | `workflow_dispatch` | whichever `provider` is chosen | as chosen |
404
+
405
+ So a PR still proves the real create → configure → destroy path, for free, while
406
+ the billable providers validate `main` right after merge. Paths exclude
407
+ `src/remo_cli/web/**` — the web service has no part in provisioning.
408
+ `tests/unit/test_smoke_test_scope.py` pins the split; the asymmetry between the
409
+ jobs is intentional and must not be "made consistent".
410
+
395
411
  `ruff` and `mypy` share the one `Lint & Types` job. That job must keep
396
412
  installing the `web` extra (`uv sync --all-extras`): with
397
413
  `ignore_missing_imports = true`, an uninstalled FastAPI/pydantic would degrade
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [4.4.1](https://github.com/get2knowio/remo/compare/v4.4.0...v4.4.1) (2026-09-30)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **install:** upgrade an existing install instead of silently doing nothing ([#236](https://github.com/get2knowio/remo/issues/236)) ([b3dac8c](https://github.com/get2knowio/remo/commit/b3dac8ce51e99300129e4e21bbf946a63a4f1cc8))
9
+
3
10
  ## [4.4.0](https://github.com/get2knowio/remo/compare/v4.3.6...v4.4.0) (2026-09-30)
4
11
 
5
12
 
@@ -393,6 +393,22 @@ made conditional to get a build green — fix the code or amend the gate by PR.
393
393
  | Packaging | wheel install smoke, Docker amd64+arm64 | Distribution integrity |
394
394
  | Security | CodeQL, dependency review | Supply chain |
395
395
 
396
+ Provider smoke tests (`smoke-test.yml`) are deliberately **not** in that table —
397
+ they are not all merge gates, because they provision real instances and what runs
398
+ when is a cost decision:
399
+
400
+ | Trigger | Providers | Cost |
401
+ |---------|-----------|------|
402
+ | pull request | `incus` only | runner minutes (local container) |
403
+ | push to `main`, weekly cron | `aws` + `hetzner` + `incus` | aws/hetzner are billable |
404
+ | `workflow_dispatch` | whichever `provider` is chosen | as chosen |
405
+
406
+ So a PR still proves the real create → configure → destroy path, for free, while
407
+ the billable providers validate `main` right after merge. Paths exclude
408
+ `src/remo_cli/web/**` — the web service has no part in provisioning.
409
+ `tests/unit/test_smoke_test_scope.py` pins the split; the asymmetry between the
410
+ jobs is intentional and must not be "made consistent".
411
+
396
412
  `ruff` and `mypy` share the one `Lint & Types` job. That job must keep
397
413
  installing the `web` extra (`uv sync --all-extras`): with
398
414
  `ignore_missing_imports = true`, an uninstalled FastAPI/pydantic would degrade
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: remo-cli
3
- Version: 4.4.0
3
+ Version: 4.4.1
4
4
  Summary: Remote development environment CLI
5
5
  License-Expression: MIT
6
6
  License-File: LICENSE
@@ -51,6 +51,10 @@ set up shell completion.
51
51
  Nothing is installed silently — it prints what it is about to run, and
52
52
  `--dry-run` prints it without running anything.
53
53
 
54
+ **Re-run the same command to upgrade.** It reports what changed
55
+ (`Updated remo-cli: 4.3.6 -> 4.4.0`), or says so plainly when you are already
56
+ current.
57
+
54
58
  ### Or install it yourself
55
59
 
56
60
  ```bash
@@ -16,6 +16,10 @@ set up shell completion.
16
16
  Nothing is installed silently — it prints what it is about to run, and
17
17
  `--dry-run` prints it without running anything.
18
18
 
19
+ **Re-run the same command to upgrade.** It reports what changed
20
+ (`Updated remo-cli: 4.3.6 -> 4.4.0`), or says so plainly when you are already
21
+ current.
22
+
19
23
  ### Or install it yourself
20
24
 
21
25
  ```bash
@@ -316,6 +316,22 @@ install_spec() {
316
316
  }
317
317
 
318
318
  # Install remo-cli
319
+ # Currently-installed version, or empty if not installed. Best-effort: never
320
+ # fails the install, and both spellings are normalised (uv prints `v4.4.0`,
321
+ # pipx prints `4.4.0`).
322
+ #
323
+ # Exists so a run is legible. The silent-no-upgrade bug this guards against was
324
+ # invisible precisely because nothing reported the before and after — uv printed
325
+ # "Installed 2 executables" either way.
326
+ installed_version() {
327
+ local v=""
328
+ case "${INSTALLER}" in
329
+ uv) v=$(uv tool list 2>/dev/null | awk -v p="${PACKAGE}" '$1==p {print $2; exit}') ;;
330
+ pipx) v=$(pipx list --short 2>/dev/null | awk -v p="${PACKAGE}" '$1==p {print $2; exit}') ;;
331
+ esac
332
+ printf '%s' "${v#v}"
333
+ }
334
+
319
335
  install_remo() {
320
336
  local spec
321
337
  spec="$(install_spec)"
@@ -327,10 +343,19 @@ install_remo() {
327
343
  *) print_error "No installer selected (internal error)."; exit 1 ;;
328
344
  esac
329
345
 
330
- # --force only when a version was asked for: switching between versions
331
- # needs it, while a bare re-run stays the no-op it is today.
332
- [ -n "${VERSION}" ] && cmd+=(--force)
333
- cmd+=("${spec}")
346
+ # ALWAYS --force, including a bare run with no version.
347
+ #
348
+ # Without it, `uv tool install remo-cli` over an existing install keeps the
349
+ # installed version and still prints "Installed 2 executables", so the run
350
+ # looks successful and upgrades nothing. Someone on 4.3.6 re-running the
351
+ # installer to pick up 4.4.0 stays on 4.3.6 with no indication why. `pipx
352
+ # install` behaves the same way.
353
+ #
354
+ # This does re-do work on every run, which is the point: the *outcome* is
355
+ # idempotent — after any run you have the version you asked for — and that
356
+ # is what Principle VII asks for. Skipping the work to make the run itself a
357
+ # no-op is what produced the silent-no-upgrade bug.
358
+ cmd+=(--force "${spec}")
334
359
 
335
360
  if [ "${DRY_RUN}" = true ]; then
336
361
  printf '%s "%s"\n' "${cmd[*]:0:${#cmd[@]}-1}" "${spec}"
@@ -338,13 +363,34 @@ install_remo() {
338
363
  fi
339
364
 
340
365
  echo ""
341
- print_info "Installing ${PACKAGE}${VERSION:+ ${VERSION}}..."
366
+ local before
367
+ before="$(installed_version)"
368
+ if [ -n "${before}" ]; then
369
+ print_info "Installing ${PACKAGE}${VERSION:+ ${VERSION}} (replacing ${before})..."
370
+ else
371
+ print_info "Installing ${PACKAGE}${VERSION:+ ${VERSION}}..."
372
+ fi
342
373
 
343
374
  if ! "${cmd[@]}"; then
344
375
  print_error "Installation failed."
345
376
  printf ' Try running manually: %s "%s"\n' "${cmd[*]:0:${#cmd[@]}-1}" "${spec}"
346
377
  exit 1
347
378
  fi
379
+
380
+ # Say what actually happened. An unchanged version after an upgrade run is
381
+ # the symptom of the bug the --force above exists to prevent, so name it
382
+ # rather than leaving the reader to compare two numbers.
383
+ local after
384
+ after="$(installed_version)"
385
+ if [ -n "${after}" ]; then
386
+ if [ -z "${before}" ]; then
387
+ print_success "Installed ${PACKAGE} ${after}."
388
+ elif [ "${before}" = "${after}" ]; then
389
+ print_info "${PACKAGE} ${after} was already installed — nothing changed."
390
+ else
391
+ print_success "Updated ${PACKAGE}: ${before} -> ${after}."
392
+ fi
393
+ fi
348
394
  }
349
395
 
350
396
  # Offer to install shell completion.
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "remo-cli"
7
- version = "4.4.0"
7
+ version = "4.4.1"
8
8
  description = "Remote development environment CLI"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -103,12 +103,41 @@ class TestChannelRouting:
103
103
  def test_no_version_installs_the_package_from_pypi(self, fake_path) -> None:
104
104
  result = _run(path=fake_path(uv=True))
105
105
  assert result.returncode == 0, result.stderr
106
- assert result.stdout.strip() == 'uv tool install "remo-cli"'
106
+ assert result.stdout.strip() == 'uv tool install --force "remo-cli"'
107
107
 
108
- def test_no_version_does_not_force(self, fake_path) -> None:
109
- """A bare re-run stays the no-op it is today (Principle VII)."""
110
- result = _run(path=fake_path(uv=True))
111
- assert "--force" not in result.stdout
108
+ @pytest.mark.parametrize(
109
+ "args",
110
+ [[], ["--version", "4.3.6"], ["--prerelease", "4.4.0rc3"]],
111
+ ids=["bare", "version", "prerelease"],
112
+ )
113
+ def test_force_is_always_passed(self, fake_path, args: list[str]) -> None:
114
+ """Including a bare run with no version — this assertion was inverted,
115
+ and the inversion was a real bug.
116
+
117
+ `uv tool install remo-cli` over an existing install keeps the installed
118
+ version and still prints "Installed 2 executables", so a user on 4.3.6
119
+ re-running the installer to pick up 4.4.0 stayed on 4.3.6 with the run
120
+ looking successful. `pipx install` behaves the same way.
121
+
122
+ Re-doing the work on every run is the point: the *outcome* is idempotent,
123
+ which is what Principle VII asks for. Making the run itself a no-op is
124
+ what produced the silent-no-upgrade.
125
+ """
126
+ result = _run(*args, path=fake_path(uv=True))
127
+ assert result.returncode == 0, result.stderr
128
+ assert "--force" in result.stdout, (
129
+ "without --force an existing install is never upgraded, and the run "
130
+ "still reports success"
131
+ )
132
+
133
+ def test_reports_what_changed(self) -> None:
134
+ """A version that did not move after an upgrade run is the symptom of the
135
+ bug above, so the script has to say which version it ended on rather than
136
+ leaving the reader to infer it."""
137
+ source = _script()
138
+ assert "installed_version()" in source
139
+ assert "nothing changed" in source, "a no-change run must say so"
140
+ assert "Updated" in source, "a version change must be reported"
112
141
 
113
142
  def test_final_version_pins_against_pypi(self, fake_path) -> None:
114
143
  result = _run("--version", "4.3.6", path=fake_path(uv=True))
@@ -0,0 +1,137 @@
1
+ """What the provider smoke tests run on, and why.
2
+
3
+ These jobs provision real instances, so their triggers are a cost decision as
4
+ much as a coverage one:
5
+
6
+ - ``aws`` and ``hetzner`` create **billable** cloud resources. They do not run on
7
+ pull requests.
8
+ - ``incus`` creates a container local to the runner, so it is free beyond runner
9
+ minutes, and it exercises the same create → configure → destroy path. It *does*
10
+ run on pull requests, and is what keeps a PR from merging with a broken
11
+ provisioning path.
12
+
13
+ Before this split, a change touching only ``cli/main.py`` (PR #226, a Windows
14
+ error message) provisioned an EC2 instance, a Hetzner server and a container —
15
+ about 39 minutes of runner time plus real spend, to prove a string.
16
+
17
+ The asymmetry between the jobs is deliberate and easy to "tidy up" into
18
+ consistency, which would either restore the cost or drop PR coverage entirely.
19
+ Hence these tests.
20
+ """
21
+
22
+ from __future__ import annotations
23
+
24
+ import re
25
+ from pathlib import Path
26
+
27
+ import pytest
28
+
29
+ REPO_ROOT = Path(__file__).resolve().parents[2]
30
+ SMOKE_YML = REPO_ROOT / ".github" / "workflows" / "smoke-test.yml"
31
+
32
+ PAID_PROVIDERS = ["aws", "hetzner"]
33
+ FREE_PROVIDERS = ["incus"]
34
+
35
+
36
+ def _job_block(name: str) -> str:
37
+ """The YAML for one top-level job, up to the next job at the same indent."""
38
+ lines = SMOKE_YML.read_text(encoding="utf-8").splitlines()
39
+ start = next((i for i, ln in enumerate(lines) if ln == f" {name}:"), None)
40
+ assert start is not None, f"job {name!r} not found in smoke-test.yml"
41
+
42
+ block = [lines[start]]
43
+ for ln in lines[start + 1 :]:
44
+ if re.fullmatch(r" [A-Za-z0-9_-]+:", ln):
45
+ break
46
+ block.append(ln)
47
+ return "\n".join(block)
48
+
49
+
50
+ def _if_condition(name: str) -> str:
51
+ """The job's `if:` expression, comments stripped."""
52
+ block = _job_block(name)
53
+ match = re.search(r"if: >-\n((?:\s+(?!#).*\n)+)", block)
54
+ assert match, f"no `if:` block found for job {name!r}"
55
+ return " ".join(match.group(1).split())
56
+
57
+
58
+ def _trigger_paths(event: str) -> list[str]:
59
+ """The `paths:` list for one `on:` event."""
60
+ text = SMOKE_YML.read_text(encoding="utf-8")
61
+ match = re.search(rf"^ {event}:\n(.*?)(?=^ [a-z_]+:$)", text, re.S | re.M)
62
+ assert match, f"event {event!r} not found"
63
+ return re.findall(r"^ - '([^']+)'", match.group(1), re.M)
64
+
65
+
66
+ class TestPaidProvidersSkipPullRequests:
67
+ @pytest.mark.parametrize("provider", PAID_PROVIDERS)
68
+ def test_not_run_on_pull_request(self, provider: str) -> None:
69
+ """A PR must never provision a billable instance."""
70
+ assert "github.event_name != 'pull_request'" in _if_condition(provider), (
71
+ f"the {provider} job would run on pull requests, provisioning a "
72
+ "billable instance for every PR that touches provider code"
73
+ )
74
+
75
+ @pytest.mark.parametrize("provider", PAID_PROVIDERS)
76
+ def test_still_runs_elsewhere(self, provider: str) -> None:
77
+ """Excluding PRs must not exclude push-to-main, the weekly schedule, or a
78
+ manual dispatch — otherwise the coverage is simply gone."""
79
+ condition = _if_condition(provider)
80
+ assert "github.event_name != 'workflow_dispatch'" in condition
81
+ assert f"github.event.inputs.provider == '{provider}'" in condition
82
+ # No blanket push/schedule exclusion crept in alongside.
83
+ assert "github.event_name != 'push'" not in condition
84
+ assert "github.event_name != 'schedule'" not in condition
85
+
86
+ @pytest.mark.parametrize("provider", PAID_PROVIDERS)
87
+ def test_dependabot_still_excluded(self, provider: str) -> None:
88
+ assert "github.actor != 'dependabot[bot]'" in _if_condition(provider)
89
+
90
+
91
+ class TestFreeProviderCoversPullRequests:
92
+ @pytest.mark.parametrize("provider", FREE_PROVIDERS)
93
+ def test_runs_on_pull_request(self, provider: str) -> None:
94
+ """This is the whole reason the paid ones can skip PRs. If incus also
95
+ stopped running on PRs, a provisioning regression would reach main
96
+ unchecked."""
97
+ assert "github.event_name != 'pull_request'" not in _if_condition(provider), (
98
+ f"the {provider} job has been excluded from pull requests, leaving "
99
+ "PRs with no end-to-end provisioning coverage at all"
100
+ )
101
+
102
+ def test_the_local_provider_is_the_one_kept(self) -> None:
103
+ """incus is free because the container is local to the runner. If that
104
+ ever changes, this split stops being free and needs revisiting."""
105
+ block = _job_block("incus")
106
+ assert "remo incus create" in block
107
+ assert "runs-on: ubuntu-latest" in block
108
+
109
+
110
+ class TestPathFilters:
111
+ @pytest.mark.parametrize("event", ["pull_request", "push"])
112
+ def test_web_subtree_is_excluded(self, event: str) -> None:
113
+ """The web service plays no part in provisioning, so a console-only
114
+ change should provision nothing."""
115
+ paths = _trigger_paths(event)
116
+ assert "!src/remo_cli/web/**" in paths, (
117
+ f"the {event} trigger still provisions for web-only changes"
118
+ )
119
+
120
+ @pytest.mark.parametrize("event", ["pull_request", "push"])
121
+ def test_negation_follows_what_it_narrows(self, event: str) -> None:
122
+ """GitHub evaluates path patterns in order, so a `!` before the broad
123
+ pattern it narrows has no effect — it would silently do nothing."""
124
+ paths = _trigger_paths(event)
125
+ broad = paths.index("src/remo_cli/**")
126
+ negation = paths.index("!src/remo_cli/web/**")
127
+ assert negation > broad, (
128
+ "'!src/remo_cli/web/**' must come AFTER 'src/remo_cli/**' or it is ignored"
129
+ )
130
+
131
+ @pytest.mark.parametrize("event", ["pull_request", "push"])
132
+ def test_provisioning_relevant_paths_still_trigger(self, event: str) -> None:
133
+ """The exclusion must stay surgical. Provider logic, shared core, the
134
+ Ansible layer and dependency changes all affect provisioning."""
135
+ paths = _trigger_paths(event)
136
+ for required in ("src/remo_cli/**", "ansible/**", "pyproject.toml", "uv.lock"):
137
+ assert required in paths, f"{required} no longer triggers smoke tests"
@@ -1039,7 +1039,7 @@ wheels = [
1039
1039
 
1040
1040
  [[package]]
1041
1041
  name = "remo-cli"
1042
- version = "4.4.0"
1042
+ version = "4.4.1"
1043
1043
  source = { editable = "." }
1044
1044
  dependencies = [
1045
1045
  { name = "ansible-core" },
@@ -1,3 +0,0 @@
1
- {
2
- ".": "4.4.0"
3
- }
File without changes
File without changes
File without changes
File without changes