runops 1.2.0__tar.gz → 1.3.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 (549) hide show
  1. {runops-1.2.0/.codex → runops-1.3.0/.claude}/rules/commands.md +3 -3
  2. {runops-1.2.0/.claude → runops-1.3.0/.codex}/rules/commands.md +3 -3
  3. {runops-1.2.0 → runops-1.3.0}/PKG-INFO +1 -1
  4. {runops-1.2.0 → runops-1.3.0}/SPEC.md +22 -5
  5. {runops-1.2.0 → runops-1.3.0}/docs/architecture.md +7 -0
  6. {runops-1.2.0 → runops-1.3.0}/docs/get-started-with-agent.md +25 -0
  7. {runops-1.2.0 → runops-1.3.0}/docs/layers/interface.md +7 -2
  8. {runops-1.2.0 → runops-1.3.0}/docs/toml-reference.md +21 -0
  9. {runops-1.2.0 → runops-1.3.0}/pyproject.toml +1 -1
  10. {runops-1.2.0 → runops-1.3.0}/src/runops/__init__.py +1 -1
  11. {runops-1.2.0 → runops-1.3.0}/src/runops/application/actions/__init__.py +16 -0
  12. runops-1.3.0/src/runops/application/actions/bundle_archive.py +700 -0
  13. {runops-1.2.0 → runops-1.3.0}/src/runops/application/actions/registry.py +3 -0
  14. {runops-1.2.0 → runops-1.3.0}/src/runops/application/actions/specs.py +39 -0
  15. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/list.py +5 -2
  16. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/manage.py +145 -1
  17. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/operations.py +10 -2
  18. {runops-1.2.0 → runops-1.3.0}/src/runops/core/discovery.py +16 -0
  19. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/scaffold/gitignore.txt +5 -0
  20. {runops-1.2.0 → runops-1.3.0}/tests/test_application/test_action_contract.py +7 -1
  21. {runops-1.2.0 → runops-1.3.0}/tests/test_application/test_actions.py +306 -0
  22. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_init.py +8 -0
  23. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_list.py +19 -0
  24. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_manage.py +117 -0
  25. {runops-1.2.0 → runops-1.3.0}/uv.lock +1 -1
  26. {runops-1.2.0 → runops-1.3.0}/.agents/skills/beach/SKILL.md +0 -0
  27. {runops-1.2.0 → runops-1.3.0}/.agents/skills/check/SKILL.md +0 -0
  28. {runops-1.2.0 → runops-1.3.0}/.agents/skills/emses/SKILL.md +0 -0
  29. {runops-1.2.0 → runops-1.3.0}/.agents/skills/implement-adapter/SKILL.md +0 -0
  30. {runops-1.2.0 → runops-1.3.0}/.agents/skills/implement-cli/SKILL.md +0 -0
  31. {runops-1.2.0 → runops-1.3.0}/.agents/skills/implement-core/SKILL.md +0 -0
  32. {runops-1.2.0 → runops-1.3.0}/.agents/skills/implement-launcher/SKILL.md +0 -0
  33. {runops-1.2.0 → runops-1.3.0}/.agents/skills/implement-slurm/SKILL.md +0 -0
  34. {runops-1.2.0 → runops-1.3.0}/.agents/skills/improve-harness/SKILL.md +0 -0
  35. {runops-1.2.0 → runops-1.3.0}/.agents/skills/python-package-refactor/SKILL.md +0 -0
  36. {runops-1.2.0 → runops-1.3.0}/.agents/skills/python-package-refactor/agents/openai.yaml +0 -0
  37. {runops-1.2.0 → runops-1.3.0}/.agents/skills/python-package-refactor/examples/refactor-request.md +0 -0
  38. {runops-1.2.0 → runops-1.3.0}/.agents/skills/python-package-refactor/references/anti-patterns.md +0 -0
  39. {runops-1.2.0 → runops-1.3.0}/.agents/skills/python-package-refactor/references/api-compatibility.md +0 -0
  40. {runops-1.2.0 → runops-1.3.0}/.agents/skills/python-package-refactor/references/packaging-modernization.md +0 -0
  41. {runops-1.2.0 → runops-1.3.0}/.agents/skills/python-package-refactor/references/refactor-playbook.md +0 -0
  42. {runops-1.2.0 → runops-1.3.0}/.agents/skills/python-package-refactor/references/verification.md +0 -0
  43. {runops-1.2.0 → runops-1.3.0}/.agents/skills/python-package-refactor/scripts/api_surface_snapshot.py +0 -0
  44. {runops-1.2.0 → runops-1.3.0}/.agents/skills/python-package-refactor/scripts/import_smoke.py +0 -0
  45. {runops-1.2.0 → runops-1.3.0}/.agents/skills/python-package-refactor/scripts/inspect_python_package.py +0 -0
  46. {runops-1.2.0 → runops-1.3.0}/.agents/skills/python-package-refactor/scripts/refactor_quality_gate.py +0 -0
  47. {runops-1.2.0 → runops-1.3.0}/.agents/skills/release/SKILL.md +0 -0
  48. {runops-1.2.0 → runops-1.3.0}/.agents/skills/scaffold/SKILL.md +0 -0
  49. {runops-1.2.0 → runops-1.3.0}/.agents/skills/spec-reviewer/SKILL.md +0 -0
  50. {runops-1.2.0 → runops-1.3.0}/.agents/skills/test-module/SKILL.md +0 -0
  51. {runops-1.2.0 → runops-1.3.0}/.agents/skills/test-writer/SKILL.md +0 -0
  52. {runops-1.2.0 → runops-1.3.0}/.agents/skills/update-docs/SKILL.md +0 -0
  53. {runops-1.2.0 → runops-1.3.0}/.claude/agents/beach.md +0 -0
  54. {runops-1.2.0 → runops-1.3.0}/.claude/agents/emses.md +0 -0
  55. {runops-1.2.0 → runops-1.3.0}/.claude/agents/implement-adapter.md +0 -0
  56. {runops-1.2.0 → runops-1.3.0}/.claude/agents/implement-cli.md +0 -0
  57. {runops-1.2.0 → runops-1.3.0}/.claude/agents/implement-core.md +0 -0
  58. {runops-1.2.0 → runops-1.3.0}/.claude/agents/implement-launcher.md +0 -0
  59. {runops-1.2.0 → runops-1.3.0}/.claude/agents/implement-slurm.md +0 -0
  60. {runops-1.2.0 → runops-1.3.0}/.claude/agents/scaffold.md +0 -0
  61. {runops-1.2.0 → runops-1.3.0}/.claude/agents/spec-reviewer.md +0 -0
  62. {runops-1.2.0 → runops-1.3.0}/.claude/agents/test-writer.md +0 -0
  63. {runops-1.2.0 → runops-1.3.0}/.claude/rules/architecture.md +0 -0
  64. {runops-1.2.0 → runops-1.3.0}/.claude/rules/dev-workflow.md +0 -0
  65. {runops-1.2.0 → runops-1.3.0}/.claude/rules/gotchas.md +0 -0
  66. {runops-1.2.0 → runops-1.3.0}/.claude/rules/knowledge-layer.md +0 -0
  67. {runops-1.2.0 → runops-1.3.0}/.claude/settings.json +0 -0
  68. {runops-1.2.0 → runops-1.3.0}/.claude/skills/check/SKILL.md +0 -0
  69. {runops-1.2.0 → runops-1.3.0}/.claude/skills/improve-harness/SKILL.md +0 -0
  70. {runops-1.2.0 → runops-1.3.0}/.claude/skills/python-package-refactor/SKILL.md +0 -0
  71. {runops-1.2.0 → runops-1.3.0}/.claude/skills/python-package-refactor/agents/openai.yaml +0 -0
  72. {runops-1.2.0 → runops-1.3.0}/.claude/skills/python-package-refactor/examples/refactor-request.md +0 -0
  73. {runops-1.2.0 → runops-1.3.0}/.claude/skills/python-package-refactor/references/anti-patterns.md +0 -0
  74. {runops-1.2.0 → runops-1.3.0}/.claude/skills/python-package-refactor/references/api-compatibility.md +0 -0
  75. {runops-1.2.0 → runops-1.3.0}/.claude/skills/python-package-refactor/references/packaging-modernization.md +0 -0
  76. {runops-1.2.0 → runops-1.3.0}/.claude/skills/python-package-refactor/references/refactor-playbook.md +0 -0
  77. {runops-1.2.0 → runops-1.3.0}/.claude/skills/python-package-refactor/references/verification.md +0 -0
  78. {runops-1.2.0 → runops-1.3.0}/.claude/skills/python-package-refactor/scripts/api_surface_snapshot.py +0 -0
  79. {runops-1.2.0 → runops-1.3.0}/.claude/skills/python-package-refactor/scripts/import_smoke.py +0 -0
  80. {runops-1.2.0 → runops-1.3.0}/.claude/skills/python-package-refactor/scripts/inspect_python_package.py +0 -0
  81. {runops-1.2.0 → runops-1.3.0}/.claude/skills/python-package-refactor/scripts/refactor_quality_gate.py +0 -0
  82. {runops-1.2.0 → runops-1.3.0}/.claude/skills/release/SKILL.md +0 -0
  83. {runops-1.2.0 → runops-1.3.0}/.claude/skills/test-module/SKILL.md +0 -0
  84. {runops-1.2.0 → runops-1.3.0}/.claude/skills/update-docs/SKILL.md +0 -0
  85. {runops-1.2.0 → runops-1.3.0}/.codex/README.md +0 -0
  86. {runops-1.2.0 → runops-1.3.0}/.codex/agents/beach.toml +0 -0
  87. {runops-1.2.0 → runops-1.3.0}/.codex/agents/emses.toml +0 -0
  88. {runops-1.2.0 → runops-1.3.0}/.codex/agents/implement-adapter.toml +0 -0
  89. {runops-1.2.0 → runops-1.3.0}/.codex/agents/implement-cli.toml +0 -0
  90. {runops-1.2.0 → runops-1.3.0}/.codex/agents/implement-core.toml +0 -0
  91. {runops-1.2.0 → runops-1.3.0}/.codex/agents/implement-launcher.toml +0 -0
  92. {runops-1.2.0 → runops-1.3.0}/.codex/agents/implement-slurm.toml +0 -0
  93. {runops-1.2.0 → runops-1.3.0}/.codex/agents/scaffold.toml +0 -0
  94. {runops-1.2.0 → runops-1.3.0}/.codex/agents/spec-reviewer.toml +0 -0
  95. {runops-1.2.0 → runops-1.3.0}/.codex/agents/test-writer.toml +0 -0
  96. {runops-1.2.0 → runops-1.3.0}/.codex/config.toml +0 -0
  97. {runops-1.2.0 → runops-1.3.0}/.codex/rules/architecture.md +0 -0
  98. {runops-1.2.0 → runops-1.3.0}/.codex/rules/dev-workflow.md +0 -0
  99. {runops-1.2.0 → runops-1.3.0}/.codex/rules/gotchas.md +0 -0
  100. {runops-1.2.0 → runops-1.3.0}/.codex/rules/knowledge-layer.md +0 -0
  101. {runops-1.2.0 → runops-1.3.0}/.codex/rules/runops.rules +0 -0
  102. {runops-1.2.0 → runops-1.3.0}/.dockerignore +0 -0
  103. {runops-1.2.0 → runops-1.3.0}/.gitattributes +0 -0
  104. {runops-1.2.0 → runops-1.3.0}/.github/workflows/ci.yml +0 -0
  105. {runops-1.2.0 → runops-1.3.0}/.github/workflows/publish.yml +0 -0
  106. {runops-1.2.0 → runops-1.3.0}/.gitignore +0 -0
  107. {runops-1.2.0 → runops-1.3.0}/.harness/manifest.toml +0 -0
  108. {runops-1.2.0 → runops-1.3.0}/.pre-commit-config.yaml +0 -0
  109. {runops-1.2.0 → runops-1.3.0}/.vscode/settings.json +0 -0
  110. {runops-1.2.0 → runops-1.3.0}/AGENTS.md +0 -0
  111. {runops-1.2.0 → runops-1.3.0}/CLAUDE.md +0 -0
  112. {runops-1.2.0 → runops-1.3.0}/LICENSE +0 -0
  113. {runops-1.2.0 → runops-1.3.0}/README.md +0 -0
  114. {runops-1.2.0 → runops-1.3.0}/SKILLS.md +0 -0
  115. {runops-1.2.0 → runops-1.3.0}/docs/agent-user-guide.md +0 -0
  116. {runops-1.2.0 → runops-1.3.0}/docs/demo-replay.md +0 -0
  117. {runops-1.2.0 → runops-1.3.0}/docs/extending.md +0 -0
  118. {runops-1.2.0 → runops-1.3.0}/docs/figures/layers/overview.png +0 -0
  119. {runops-1.2.0 → runops-1.3.0}/docs/layers/README.md +0 -0
  120. {runops-1.2.0 → runops-1.3.0}/docs/layers/analysis.md +0 -0
  121. {runops-1.2.0 → runops-1.3.0}/docs/layers/execution-kernel.md +0 -0
  122. {runops-1.2.0 → runops-1.3.0}/docs/layers/experiment.md +0 -0
  123. {runops-1.2.0 → runops-1.3.0}/docs/layers/harness.md +0 -0
  124. {runops-1.2.0 → runops-1.3.0}/docs/layers/knowledge.md +0 -0
  125. {runops-1.2.0 → runops-1.3.0}/docs/layers/research.md +0 -0
  126. {runops-1.2.0 → runops-1.3.0}/docs/layers/upstream.md +0 -0
  127. {runops-1.2.0 → runops-1.3.0}/docs/local-runops-patches.md +0 -0
  128. {runops-1.2.0 → runops-1.3.0}/docs/mcp.md +0 -0
  129. {runops-1.2.0 → runops-1.3.0}/docs/migrations/README.md +0 -0
  130. {runops-1.2.0 → runops-1.3.0}/docs/migrations/v0.md +0 -0
  131. {runops-1.2.0 → runops-1.3.0}/docs/paper-requests.md +0 -0
  132. {runops-1.2.0 → runops-1.3.0}/docs/project-health.md +0 -0
  133. {runops-1.2.0 → runops-1.3.0}/docs/runops-intro.pdf +0 -0
  134. {runops-1.2.0 → runops-1.3.0}/docs/runops-intro.tex +0 -0
  135. {runops-1.2.0 → runops-1.3.0}/docs/simulator-kb-spec.md +0 -0
  136. {runops-1.2.0 → runops-1.3.0}/entrypoints.toml +0 -0
  137. {runops-1.2.0 → runops-1.3.0}/examples/beach/campaign.toml +0 -0
  138. {runops-1.2.0 → runops-1.3.0}/examples/beach/cases/periodic2_basic/beach_template.toml +0 -0
  139. {runops-1.2.0 → runops-1.3.0}/examples/beach/cases/periodic2_basic/case.toml +0 -0
  140. {runops-1.2.0 → runops-1.3.0}/examples/beach/launchers.toml +0 -0
  141. {runops-1.2.0 → runops-1.3.0}/examples/beach/simulators.toml +0 -0
  142. {runops-1.2.0 → runops-1.3.0}/examples/beach/surveys/density_scan/survey.toml +0 -0
  143. {runops-1.2.0 → runops-1.3.0}/examples/emses/campaign.toml +0 -0
  144. {runops-1.2.0 → runops-1.3.0}/examples/emses/cases/flat_surface/case.toml +0 -0
  145. {runops-1.2.0 → runops-1.3.0}/examples/emses/cases/flat_surface/plasma.toml +0 -0
  146. {runops-1.2.0 → runops-1.3.0}/examples/emses/launchers.toml +0 -0
  147. {runops-1.2.0 → runops-1.3.0}/examples/emses/simulators.toml +0 -0
  148. {runops-1.2.0 → runops-1.3.0}/examples/emses/surveys/mag_angle_scan/survey.toml +0 -0
  149. {runops-1.2.0 → runops-1.3.0}/schemas/campaign.json +0 -0
  150. {runops-1.2.0 → runops-1.3.0}/schemas/case.json +0 -0
  151. {runops-1.2.0 → runops-1.3.0}/schemas/codex-plugin-check-result.json +0 -0
  152. {runops-1.2.0 → runops-1.3.0}/schemas/codex-plugin-inventory.json +0 -0
  153. {runops-1.2.0 → runops-1.3.0}/schemas/codex-plugin-recommendation.json +0 -0
  154. {runops-1.2.0 → runops-1.3.0}/schemas/launchers.json +0 -0
  155. {runops-1.2.0 → runops-1.3.0}/schemas/manifest.json +0 -0
  156. {runops-1.2.0 → runops-1.3.0}/schemas/runops.json +0 -0
  157. {runops-1.2.0 → runops-1.3.0}/schemas/simulators.json +0 -0
  158. {runops-1.2.0 → runops-1.3.0}/schemas/site.json +0 -0
  159. {runops-1.2.0 → runops-1.3.0}/schemas/survey.json +0 -0
  160. {runops-1.2.0 → runops-1.3.0}/src/runops/adapters/__init__.py +0 -0
  161. {runops-1.2.0 → runops-1.3.0}/src/runops/adapters/_provenance.py +0 -0
  162. {runops-1.2.0 → runops-1.3.0}/src/runops/adapters/_runtime.py +0 -0
  163. {runops-1.2.0 → runops-1.3.0}/src/runops/adapters/_utils/__init__.py +0 -0
  164. {runops-1.2.0 → runops-1.3.0}/src/runops/adapters/_utils/toml_utils.py +0 -0
  165. {runops-1.2.0 → runops-1.3.0}/src/runops/adapters/base.py +0 -0
  166. {runops-1.2.0 → runops-1.3.0}/src/runops/adapters/bundled.py +0 -0
  167. {runops-1.2.0 → runops-1.3.0}/src/runops/adapters/contrib/__init__.py +0 -0
  168. {runops-1.2.0 → runops-1.3.0}/src/runops/adapters/contrib/_paths.py +0 -0
  169. {runops-1.2.0 → runops-1.3.0}/src/runops/adapters/contrib/beach/__init__.py +0 -0
  170. {runops-1.2.0 → runops-1.3.0}/src/runops/adapters/contrib/beach/adapter.py +0 -0
  171. {runops-1.2.0 → runops-1.3.0}/src/runops/adapters/contrib/beach/constants.py +0 -0
  172. {runops-1.2.0 → runops-1.3.0}/src/runops/adapters/contrib/beach/diagnostics.py +0 -0
  173. {runops-1.2.0 → runops-1.3.0}/src/runops/adapters/contrib/beach/metadata.py +0 -0
  174. {runops-1.2.0 → runops-1.3.0}/src/runops/adapters/contrib/beach/validation.py +0 -0
  175. {runops-1.2.0 → runops-1.3.0}/src/runops/adapters/contrib/emses/__init__.py +0 -0
  176. {runops-1.2.0 → runops-1.3.0}/src/runops/adapters/contrib/emses/adapter.py +0 -0
  177. {runops-1.2.0 → runops-1.3.0}/src/runops/adapters/contrib/emses/constants.py +0 -0
  178. {runops-1.2.0 → runops-1.3.0}/src/runops/adapters/contrib/emses/diagnostics.py +0 -0
  179. {runops-1.2.0 → runops-1.3.0}/src/runops/adapters/contrib/emses/metadata.py +0 -0
  180. {runops-1.2.0 → runops-1.3.0}/src/runops/adapters/contrib/emses/validation.py +0 -0
  181. {runops-1.2.0 → runops-1.3.0}/src/runops/adapters/generic.py +0 -0
  182. {runops-1.2.0 → runops-1.3.0}/src/runops/adapters/registry.py +0 -0
  183. {runops-1.2.0 → runops-1.3.0}/src/runops/application/__init__.py +0 -0
  184. {runops-1.2.0 → runops-1.3.0}/src/runops/application/actions/admin.py +0 -0
  185. {runops-1.2.0 → runops-1.3.0}/src/runops/application/actions/analysis.py +0 -0
  186. {runops-1.2.0 → runops-1.3.0}/src/runops/application/actions/helpers.py +0 -0
  187. {runops-1.2.0 → runops-1.3.0}/src/runops/application/actions/knowledge.py +0 -0
  188. {runops-1.2.0 → runops-1.3.0}/src/runops/application/actions/result.py +0 -0
  189. {runops-1.2.0 → runops-1.3.0}/src/runops/application/actions/run_lifecycle.py +0 -0
  190. {runops-1.2.0 → runops-1.3.0}/src/runops/application/analysis/__init__.py +0 -0
  191. {runops-1.2.0 → runops-1.3.0}/src/runops/application/analysis/artifacts.py +0 -0
  192. {runops-1.2.0 → runops-1.3.0}/src/runops/application/analysis/collection.py +0 -0
  193. {runops-1.2.0 → runops-1.3.0}/src/runops/application/analysis/comparison.py +0 -0
  194. {runops-1.2.0 → runops-1.3.0}/src/runops/application/analysis/plotting.py +0 -0
  195. {runops-1.2.0 → runops-1.3.0}/src/runops/application/analysis/report.py +0 -0
  196. {runops-1.2.0 → runops-1.3.0}/src/runops/application/analysis/story/__init__.py +0 -0
  197. {runops-1.2.0 → runops-1.3.0}/src/runops/application/analysis/story/audit.py +0 -0
  198. {runops-1.2.0 → runops-1.3.0}/src/runops/application/analysis/story/models.py +0 -0
  199. {runops-1.2.0 → runops-1.3.0}/src/runops/application/analysis/story/render.py +0 -0
  200. {runops-1.2.0 → runops-1.3.0}/src/runops/application/analysis/story/schema.py +0 -0
  201. {runops-1.2.0 → runops-1.3.0}/src/runops/application/analysis/story/sources.py +0 -0
  202. {runops-1.2.0 → runops-1.3.0}/src/runops/application/analysis/story/workspace.py +0 -0
  203. {runops-1.2.0 → runops-1.3.0}/src/runops/application/analysis/workflow.py +0 -0
  204. {runops-1.2.0 → runops-1.3.0}/src/runops/application/context.py +0 -0
  205. {runops-1.2.0 → runops-1.3.0}/src/runops/application/execution/__init__.py +0 -0
  206. {runops-1.2.0 → runops-1.3.0}/src/runops/application/execution/readiness.py +0 -0
  207. {runops-1.2.0 → runops-1.3.0}/src/runops/application/execution/retry.py +0 -0
  208. {runops-1.2.0 → runops-1.3.0}/src/runops/application/execution/submission/__init__.py +0 -0
  209. {runops-1.2.0 → runops-1.3.0}/src/runops/application/execution/submission/apply.py +0 -0
  210. {runops-1.2.0 → runops-1.3.0}/src/runops/application/execution/submission/claim.py +0 -0
  211. {runops-1.2.0 → runops-1.3.0}/src/runops/application/execution/submission/models.py +0 -0
  212. {runops-1.2.0 → runops-1.3.0}/src/runops/application/execution/submission/planning.py +0 -0
  213. {runops-1.2.0 → runops-1.3.0}/src/runops/application/gateway/__init__.py +0 -0
  214. {runops-1.2.0 → runops-1.3.0}/src/runops/application/gateway/plugins/__init__.py +0 -0
  215. {runops-1.2.0 → runops-1.3.0}/src/runops/application/gateway/plugins/discovery.py +0 -0
  216. {runops-1.2.0 → runops-1.3.0}/src/runops/application/gateway/plugins/inventory.py +0 -0
  217. {runops-1.2.0 → runops-1.3.0}/src/runops/application/gateway/plugins/models.py +0 -0
  218. {runops-1.2.0 → runops-1.3.0}/src/runops/application/gateway/plugins/validation.py +0 -0
  219. {runops-1.2.0 → runops-1.3.0}/src/runops/application/operator/__init__.py +0 -0
  220. {runops-1.2.0 → runops-1.3.0}/src/runops/application/operator/coverage_policy.py +0 -0
  221. {runops-1.2.0 → runops-1.3.0}/src/runops/application/operator/harness_upgrade.py +0 -0
  222. {runops-1.2.0 → runops-1.3.0}/src/runops/application/operator/lint/__init__.py +0 -0
  223. {runops-1.2.0 → runops-1.3.0}/src/runops/application/operator/lint/analysis.py +0 -0
  224. {runops-1.2.0 → runops-1.3.0}/src/runops/application/operator/lint/knowledge.py +0 -0
  225. {runops-1.2.0 → runops-1.3.0}/src/runops/application/operator/lint/models.py +0 -0
  226. {runops-1.2.0 → runops-1.3.0}/src/runops/application/operator/lint/plugins.py +0 -0
  227. {runops-1.2.0 → runops-1.3.0}/src/runops/application/operator/lint/registry.py +0 -0
  228. {runops-1.2.0 → runops-1.3.0}/src/runops/application/operator/lint/runs.py +0 -0
  229. {runops-1.2.0 → runops-1.3.0}/src/runops/application/operator/lint/structure.py +0 -0
  230. {runops-1.2.0 → runops-1.3.0}/src/runops/application/operator/migrations/__init__.py +0 -0
  231. {runops-1.2.0 → runops-1.3.0}/src/runops/application/operator/migrations/models.py +0 -0
  232. {runops-1.2.0 → runops-1.3.0}/src/runops/application/operator/migrations/registry.py +0 -0
  233. {runops-1.2.0 → runops-1.3.0}/src/runops/application/operator/migrations/v0.py +0 -0
  234. {runops-1.2.0 → runops-1.3.0}/src/runops/application/ports/__init__.py +0 -0
  235. {runops-1.2.0 → runops-1.3.0}/src/runops/application/ports/scheduler.py +0 -0
  236. {runops-1.2.0 → runops-1.3.0}/src/runops/application/publication/__init__.py +0 -0
  237. {runops-1.2.0 → runops-1.3.0}/src/runops/application/publication/files.py +0 -0
  238. {runops-1.2.0 → runops-1.3.0}/src/runops/application/publication/sources.py +0 -0
  239. {runops-1.2.0 → runops-1.3.0}/src/runops/application/publication/workflow.py +0 -0
  240. {runops-1.2.0 → runops-1.3.0}/src/runops/application/research/__init__.py +0 -0
  241. {runops-1.2.0 → runops-1.3.0}/src/runops/application/research/workspace.py +0 -0
  242. {runops-1.2.0 → runops-1.3.0}/src/runops/application/run_creation/__init__.py +0 -0
  243. {runops-1.2.0 → runops-1.3.0}/src/runops/application/run_creation/manifest.py +0 -0
  244. {runops-1.2.0 → runops-1.3.0}/src/runops/application/run_creation/merge.py +0 -0
  245. {runops-1.2.0 → runops-1.3.0}/src/runops/application/run_creation/plan.py +0 -0
  246. {runops-1.2.0 → runops-1.3.0}/src/runops/application/run_creation/regenerate.py +0 -0
  247. {runops-1.2.0 → runops-1.3.0}/src/runops/application/run_creation/resolve.py +0 -0
  248. {runops-1.2.0 → runops-1.3.0}/src/runops/application/run_creation/staging.py +0 -0
  249. {runops-1.2.0 → runops-1.3.0}/src/runops/application/run_creation/workflow.py +0 -0
  250. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/__init__.py +0 -0
  251. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/analyze.py +0 -0
  252. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/clone.py +0 -0
  253. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/config.py +0 -0
  254. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/context.py +0 -0
  255. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/create.py +0 -0
  256. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/dashboard.py +0 -0
  257. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/demo.py +0 -0
  258. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/extend.py +0 -0
  259. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/groups/__init__.py +0 -0
  260. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/groups/analyze.py +0 -0
  261. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/groups/case.py +0 -0
  262. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/groups/research.py +0 -0
  263. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/groups/runs.py +0 -0
  264. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/history.py +0 -0
  265. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/init/__init__.py +0 -0
  266. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/init/bootstrap.py +0 -0
  267. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/init/command.py +0 -0
  268. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/init/doctor.py +0 -0
  269. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/init/github_auth.py +0 -0
  270. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/init/knowledge.py +0 -0
  271. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/init/prompting.py +0 -0
  272. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/init/scaffold.py +0 -0
  273. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/init/serialization.py +0 -0
  274. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/init/workflow.py +0 -0
  275. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/jobs.py +0 -0
  276. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/knowledge/__init__.py +0 -0
  277. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/knowledge/command.py +0 -0
  278. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/knowledge/common.py +0 -0
  279. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/knowledge/sources.py +0 -0
  280. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/lint.py +0 -0
  281. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/log.py +0 -0
  282. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/main.py +0 -0
  283. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/mcp.py +0 -0
  284. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/migrate.py +0 -0
  285. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/new.py +0 -0
  286. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/plugins.py +0 -0
  287. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/regenerate.py +0 -0
  288. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/research.py +0 -0
  289. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/retry.py +0 -0
  290. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/run_lookup.py +0 -0
  291. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/setup.py +0 -0
  292. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/status.py +0 -0
  293. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/submit.py +0 -0
  294. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/update.py +0 -0
  295. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/update_harness.py +0 -0
  296. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/update_notice.py +0 -0
  297. {runops-1.2.0 → runops-1.3.0}/src/runops/cli/update_refs.py +0 -0
  298. {runops-1.2.0 → runops-1.3.0}/src/runops/core/__init__.py +0 -0
  299. {runops-1.2.0 → runops-1.3.0}/src/runops/core/campaign.py +0 -0
  300. {runops-1.2.0 → runops-1.3.0}/src/runops/core/case.py +0 -0
  301. {runops-1.2.0 → runops-1.3.0}/src/runops/core/codex_plugin.py +0 -0
  302. {runops-1.2.0 → runops-1.3.0}/src/runops/core/demo/__init__.py +0 -0
  303. {runops-1.2.0 → runops-1.3.0}/src/runops/core/demo/importer.py +0 -0
  304. {runops-1.2.0 → runops-1.3.0}/src/runops/core/demo/replay.py +0 -0
  305. {runops-1.2.0 → runops-1.3.0}/src/runops/core/demo/sanitize.py +0 -0
  306. {runops-1.2.0 → runops-1.3.0}/src/runops/core/environment/__init__.py +0 -0
  307. {runops-1.2.0 → runops-1.3.0}/src/runops/core/environment/runtime.py +0 -0
  308. {runops-1.2.0 → runops-1.3.0}/src/runops/core/event_log.py +0 -0
  309. {runops-1.2.0 → runops-1.3.0}/src/runops/core/exceptions.py +0 -0
  310. {runops-1.2.0 → runops-1.3.0}/src/runops/core/knowledge/__init__.py +0 -0
  311. {runops-1.2.0 → runops-1.3.0}/src/runops/core/knowledge/facts.py +0 -0
  312. {runops-1.2.0 → runops-1.3.0}/src/runops/core/knowledge/insights.py +0 -0
  313. {runops-1.2.0 → runops-1.3.0}/src/runops/core/knowledge/paths.py +0 -0
  314. {runops-1.2.0 → runops-1.3.0}/src/runops/core/knowledge_source/__init__.py +0 -0
  315. {runops-1.2.0 → runops-1.3.0}/src/runops/core/knowledge_source/config.py +0 -0
  316. {runops-1.2.0 → runops-1.3.0}/src/runops/core/knowledge_source/discovery.py +0 -0
  317. {runops-1.2.0 → runops-1.3.0}/src/runops/core/knowledge_source/entrypoints.py +0 -0
  318. {runops-1.2.0 → runops-1.3.0}/src/runops/core/knowledge_source/imports.py +0 -0
  319. {runops-1.2.0 → runops-1.3.0}/src/runops/core/knowledge_source/paths.py +0 -0
  320. {runops-1.2.0 → runops-1.3.0}/src/runops/core/knowledge_source/render.py +0 -0
  321. {runops-1.2.0 → runops-1.3.0}/src/runops/core/knowledge_source/sync.py +0 -0
  322. {runops-1.2.0 → runops-1.3.0}/src/runops/core/knowledge_source/validation.py +0 -0
  323. {runops-1.2.0 → runops-1.3.0}/src/runops/core/manifest.py +0 -0
  324. {runops-1.2.0 → runops-1.3.0}/src/runops/core/models/__init__.py +0 -0
  325. {runops-1.2.0 → runops-1.3.0}/src/runops/core/models/analysis.py +0 -0
  326. {runops-1.2.0 → runops-1.3.0}/src/runops/core/models/knowledge.py +0 -0
  327. {runops-1.2.0 → runops-1.3.0}/src/runops/core/models/knowledge_source.py +0 -0
  328. {runops-1.2.0 → runops-1.3.0}/src/runops/core/models/publication.py +0 -0
  329. {runops-1.2.0 → runops-1.3.0}/src/runops/core/models/run_creation.py +0 -0
  330. {runops-1.2.0 → runops-1.3.0}/src/runops/core/project.py +0 -0
  331. {runops-1.2.0 → runops-1.3.0}/src/runops/core/project_files.py +0 -0
  332. {runops-1.2.0 → runops-1.3.0}/src/runops/core/provenance.py +0 -0
  333. {runops-1.2.0 → runops-1.3.0}/src/runops/core/repository.py +0 -0
  334. {runops-1.2.0 → runops-1.3.0}/src/runops/core/research/__init__.py +0 -0
  335. {runops-1.2.0 → runops-1.3.0}/src/runops/core/research/workspace.py +0 -0
  336. {runops-1.2.0 → runops-1.3.0}/src/runops/core/run/__init__.py +0 -0
  337. {runops-1.2.0 → runops-1.3.0}/src/runops/core/run/derivation.py +0 -0
  338. {runops-1.2.0 → runops-1.3.0}/src/runops/core/run/records.py +0 -0
  339. {runops-1.2.0 → runops-1.3.0}/src/runops/core/site/__init__.py +0 -0
  340. {runops-1.2.0 → runops-1.3.0}/src/runops/core/site/profile.py +0 -0
  341. {runops-1.2.0 → runops-1.3.0}/src/runops/core/state.py +0 -0
  342. {runops-1.2.0 → runops-1.3.0}/src/runops/core/survey/__init__.py +0 -0
  343. {runops-1.2.0 → runops-1.3.0}/src/runops/core/survey/config.py +0 -0
  344. {runops-1.2.0 → runops-1.3.0}/src/runops/core/survey/naming.py +0 -0
  345. {runops-1.2.0 → runops-1.3.0}/src/runops/core/upgrade_chain.py +0 -0
  346. {runops-1.2.0 → runops-1.3.0}/src/runops/core/validation/__init__.py +0 -0
  347. {runops-1.2.0 → runops-1.3.0}/src/runops/harness/__init__.py +0 -0
  348. {runops-1.2.0 → runops-1.3.0}/src/runops/harness/_adapters.py +0 -0
  349. {runops-1.2.0 → runops-1.3.0}/src/runops/harness/_plugins.py +0 -0
  350. {runops-1.2.0 → runops-1.3.0}/src/runops/harness/_skills.py +0 -0
  351. {runops-1.2.0 → runops-1.3.0}/src/runops/harness/builder.py +0 -0
  352. {runops-1.2.0 → runops-1.3.0}/src/runops/harness/claude.py +0 -0
  353. {runops-1.2.0 → runops-1.3.0}/src/runops/harness/codex.py +0 -0
  354. {runops-1.2.0 → runops-1.3.0}/src/runops/jobgen/__init__.py +0 -0
  355. {runops-1.2.0 → runops-1.3.0}/src/runops/jobgen/generator.py +0 -0
  356. {runops-1.2.0 → runops-1.3.0}/src/runops/launchers/__init__.py +0 -0
  357. {runops-1.2.0 → runops-1.3.0}/src/runops/launchers/base.py +0 -0
  358. {runops-1.2.0 → runops-1.3.0}/src/runops/launchers/mpiexec.py +0 -0
  359. {runops-1.2.0 → runops-1.3.0}/src/runops/launchers/mpirun.py +0 -0
  360. {runops-1.2.0 → runops-1.3.0}/src/runops/launchers/srun.py +0 -0
  361. {runops-1.2.0 → runops-1.3.0}/src/runops/mcp/__init__.py +0 -0
  362. {runops-1.2.0 → runops-1.3.0}/src/runops/mcp/_tools/__init__.py +0 -0
  363. {runops-1.2.0 → runops-1.3.0}/src/runops/mcp/_tools/analysis.py +0 -0
  364. {runops-1.2.0 → runops-1.3.0}/src/runops/mcp/_tools/common.py +0 -0
  365. {runops-1.2.0 → runops-1.3.0}/src/runops/mcp/_tools/project.py +0 -0
  366. {runops-1.2.0 → runops-1.3.0}/src/runops/mcp/_tools/provider.py +0 -0
  367. {runops-1.2.0 → runops-1.3.0}/src/runops/mcp/_tools/publication.py +0 -0
  368. {runops-1.2.0 → runops-1.3.0}/src/runops/mcp/_tools/runs.py +0 -0
  369. {runops-1.2.0 → runops-1.3.0}/src/runops/mcp/_tools/scheduler.py +0 -0
  370. {runops-1.2.0 → runops-1.3.0}/src/runops/mcp/registry.py +0 -0
  371. {runops-1.2.0 → runops-1.3.0}/src/runops/mcp/safety.py +0 -0
  372. {runops-1.2.0 → runops-1.3.0}/src/runops/mcp/schemas.py +0 -0
  373. {runops-1.2.0 → runops-1.3.0}/src/runops/mcp/server.py +0 -0
  374. {runops-1.2.0 → runops-1.3.0}/src/runops/mcp/tools.py +0 -0
  375. {runops-1.2.0 → runops-1.3.0}/src/runops/sites/__init__.py +0 -0
  376. {runops-1.2.0 → runops-1.3.0}/src/runops/sites/camphor.md +0 -0
  377. {runops-1.2.0 → runops-1.3.0}/src/runops/sites/camphor.toml +0 -0
  378. {runops-1.2.0 → runops-1.3.0}/src/runops/slurm/__init__.py +0 -0
  379. {runops-1.2.0 → runops-1.3.0}/src/runops/slurm/query.py +0 -0
  380. {runops-1.2.0 → runops-1.3.0}/src/runops/slurm/submit.py +0 -0
  381. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/README.md +0 -0
  382. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/__init__.py +0 -0
  383. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/adapters/beach/agent_guide.md +0 -0
  384. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/adapters/beach/beach.toml +0 -0
  385. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/adapters/beach/case.toml +0 -0
  386. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/adapters/beach/summarize.py +0 -0
  387. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/adapters/emses/agent_guide.md +0 -0
  388. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/adapters/emses/case.toml +0 -0
  389. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/adapters/emses/plasma.toml +0 -0
  390. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/adapters/emses/summarize.py +0 -0
  391. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/adapters/generic/case.toml.j2 +0 -0
  392. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/adapters/generic/summarize.py +0 -0
  393. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/demo/replay.html.j2 +0 -0
  394. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/harness/claude/CLAUDE.md.j2 +0 -0
  395. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/harness/claude/rules/cookbook.md.j2 +0 -0
  396. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/harness/claude/rules/plan-before-act.md +0 -0
  397. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/harness/claude/rules/runops-workflow.md +0 -0
  398. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/harness/codex/AGENTS.md.j2 +0 -0
  399. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/harness/codex/README.md.j2 +0 -0
  400. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/harness/codex/config.toml.j2 +0 -0
  401. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/harness/codex/rules/runops.rules +0 -0
  402. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/harness/shared/cases.md +0 -0
  403. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/harness/shared/partials/agent-body.md.j2 +0 -0
  404. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/harness/shared/rules/cookbook.md.j2 +0 -0
  405. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/harness/shared/runs.md +0 -0
  406. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/knowledge/runops/agent-user-guide.md +0 -0
  407. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/scaffold/campaign.toml.j2 +0 -0
  408. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/scaffold/facts.toml +0 -0
  409. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/scaffold/materials/README.md +0 -0
  410. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/scaffold/materials/index.toml +0 -0
  411. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/scaffold/research/CURRENT.md +0 -0
  412. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/scaffold/research/journal/active.md +0 -0
  413. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/scaffold/vscode_settings.json +0 -0
  414. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/skills/analyze/SKILL.md +0 -0
  415. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/skills/check-status/SKILL.md +0 -0
  416. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/skills/cleanup/SKILL.md +0 -0
  417. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/skills/create-run/SKILL.md +0 -0
  418. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/skills/debug-failed/SKILL.md +0 -0
  419. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/skills/learn/SKILL.md +0 -0
  420. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/skills/migrate-runops/SKILL.md +0 -0
  421. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/skills/new-case/SKILL.md +0 -0
  422. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/skills/patch-runops/SKILL.md +0 -0
  423. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/skills/release/SKILL.md +0 -0
  424. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/skills/research-workspace/SKILL.md +0 -0
  425. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/skills/run-all/SKILL.md +0 -0
  426. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/skills/runops-reference/SKILL.md +0 -0
  427. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/skills/setup-campaign/SKILL.md +0 -0
  428. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/skills/setup-env/SKILL.md +0 -0
  429. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/skills/setup-plugins/SKILL.md +0 -0
  430. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/skills/setup-runops/SKILL.md +0 -0
  431. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/skills/summarize-script/SKILL.md +0 -0
  432. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/skills/survey-design/SKILL.md +0 -0
  433. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/skills/update-runops/SKILL.md +0 -0
  434. {runops-1.2.0 → runops-1.3.0}/src/runops/templates/survey.toml.j2 +0 -0
  435. {runops-1.2.0 → runops-1.3.0}/tests/__init__.py +0 -0
  436. {runops-1.2.0 → runops-1.3.0}/tests/conftest.py +0 -0
  437. {runops-1.2.0 → runops-1.3.0}/tests/factories.py +0 -0
  438. {runops-1.2.0 → runops-1.3.0}/tests/fixtures/sample_case.toml +0 -0
  439. {runops-1.2.0 → runops-1.3.0}/tests/fixtures/sample_launchers.toml +0 -0
  440. {runops-1.2.0 → runops-1.3.0}/tests/fixtures/sample_manifest.toml +0 -0
  441. {runops-1.2.0 → runops-1.3.0}/tests/fixtures/sample_runops.toml +0 -0
  442. {runops-1.2.0 → runops-1.3.0}/tests/fixtures/sample_simulators.toml +0 -0
  443. {runops-1.2.0 → runops-1.3.0}/tests/fixtures/sample_survey.toml +0 -0
  444. {runops-1.2.0 → runops-1.3.0}/tests/test_adapters/__init__.py +0 -0
  445. {runops-1.2.0 → runops-1.3.0}/tests/test_adapters/test_beach.py +0 -0
  446. {runops-1.2.0 → runops-1.3.0}/tests/test_adapters/test_contract.py +0 -0
  447. {runops-1.2.0 → runops-1.3.0}/tests/test_adapters/test_emses.py +0 -0
  448. {runops-1.2.0 → runops-1.3.0}/tests/test_adapters/test_generic.py +0 -0
  449. {runops-1.2.0 → runops-1.3.0}/tests/test_adapters/test_provenance.py +0 -0
  450. {runops-1.2.0 → runops-1.3.0}/tests/test_adapters/test_registry.py +0 -0
  451. {runops-1.2.0 → runops-1.3.0}/tests/test_adapters/test_runtime.py +0 -0
  452. {runops-1.2.0 → runops-1.3.0}/tests/test_adapters/test_toml_utils.py +0 -0
  453. {runops-1.2.0 → runops-1.3.0}/tests/test_application/__init__.py +0 -0
  454. {runops-1.2.0 → runops-1.3.0}/tests/test_application/test_analysis.py +0 -0
  455. {runops-1.2.0 → runops-1.3.0}/tests/test_application/test_analysis_comparison.py +0 -0
  456. {runops-1.2.0 → runops-1.3.0}/tests/test_application/test_analysis_story.py +0 -0
  457. {runops-1.2.0 → runops-1.3.0}/tests/test_application/test_capability_facades.py +0 -0
  458. {runops-1.2.0 → runops-1.3.0}/tests/test_application/test_context.py +0 -0
  459. {runops-1.2.0 → runops-1.3.0}/tests/test_application/test_coverage_policy.py +0 -0
  460. {runops-1.2.0 → runops-1.3.0}/tests/test_application/test_harness_upgrade.py +0 -0
  461. {runops-1.2.0 → runops-1.3.0}/tests/test_application/test_lint.py +0 -0
  462. {runops-1.2.0 → runops-1.3.0}/tests/test_application/test_migrations.py +0 -0
  463. {runops-1.2.0 → runops-1.3.0}/tests/test_application/test_plugins.py +0 -0
  464. {runops-1.2.0 → runops-1.3.0}/tests/test_application/test_publication.py +0 -0
  465. {runops-1.2.0 → runops-1.3.0}/tests/test_application/test_readiness.py +0 -0
  466. {runops-1.2.0 → runops-1.3.0}/tests/test_application/test_research_workspace.py +0 -0
  467. {runops-1.2.0 → runops-1.3.0}/tests/test_application/test_retry.py +0 -0
  468. {runops-1.2.0 → runops-1.3.0}/tests/test_application/test_run_creation.py +0 -0
  469. {runops-1.2.0 → runops-1.3.0}/tests/test_application/test_story_audit.py +0 -0
  470. {runops-1.2.0 → runops-1.3.0}/tests/test_application/test_story_render.py +0 -0
  471. {runops-1.2.0 → runops-1.3.0}/tests/test_application/test_story_schema.py +0 -0
  472. {runops-1.2.0 → runops-1.3.0}/tests/test_application/test_story_sources.py +0 -0
  473. {runops-1.2.0 → runops-1.3.0}/tests/test_application/test_submission.py +0 -0
  474. {runops-1.2.0 → runops-1.3.0}/tests/test_application/test_submission_parity.py +0 -0
  475. {runops-1.2.0 → runops-1.3.0}/tests/test_architecture/test_core_import_boundaries.py +0 -0
  476. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/__init__.py +0 -0
  477. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_analyze.py +0 -0
  478. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_clone.py +0 -0
  479. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_config.py +0 -0
  480. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_context_cli.py +0 -0
  481. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_create.py +0 -0
  482. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_dashboard.py +0 -0
  483. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_demo.py +0 -0
  484. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_event_log.py +0 -0
  485. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_extend.py +0 -0
  486. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_history.py +0 -0
  487. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_init_bootstrap.py +0 -0
  488. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_init_github_auth.py +0 -0
  489. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_init_helpers.py +0 -0
  490. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_init_scaffold.py +0 -0
  491. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_jobs.py +0 -0
  492. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_knowledge.py +0 -0
  493. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_knowledge_source_helpers.py +0 -0
  494. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_lint.py +0 -0
  495. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_log.py +0 -0
  496. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_main.py +0 -0
  497. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_mcp.py +0 -0
  498. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_migrate.py +0 -0
  499. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_new.py +0 -0
  500. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_plugins.py +0 -0
  501. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_regenerate.py +0 -0
  502. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_research.py +0 -0
  503. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_retry.py +0 -0
  504. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_setup.py +0 -0
  505. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_status.py +0 -0
  506. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_submit.py +0 -0
  507. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_update.py +0 -0
  508. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_update_harness.py +0 -0
  509. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_update_notice.py +0 -0
  510. {runops-1.2.0 → runops-1.3.0}/tests/test_cli/test_update_refs.py +0 -0
  511. {runops-1.2.0 → runops-1.3.0}/tests/test_core/__init__.py +0 -0
  512. {runops-1.2.0 → runops-1.3.0}/tests/test_core/test_case.py +0 -0
  513. {runops-1.2.0 → runops-1.3.0}/tests/test_core/test_demo_import.py +0 -0
  514. {runops-1.2.0 → runops-1.3.0}/tests/test_core/test_demo_replay.py +0 -0
  515. {runops-1.2.0 → runops-1.3.0}/tests/test_core/test_discovery.py +0 -0
  516. {runops-1.2.0 → runops-1.3.0}/tests/test_core/test_environment.py +0 -0
  517. {runops-1.2.0 → runops-1.3.0}/tests/test_core/test_event_log.py +0 -0
  518. {runops-1.2.0 → runops-1.3.0}/tests/test_core/test_knowledge_source.py +0 -0
  519. {runops-1.2.0 → runops-1.3.0}/tests/test_core/test_knowledge_source_render.py +0 -0
  520. {runops-1.2.0 → runops-1.3.0}/tests/test_core/test_knowledge_source_validation.py +0 -0
  521. {runops-1.2.0 → runops-1.3.0}/tests/test_core/test_manifest.py +0 -0
  522. {runops-1.2.0 → runops-1.3.0}/tests/test_core/test_project.py +0 -0
  523. {runops-1.2.0 → runops-1.3.0}/tests/test_core/test_provenance.py +0 -0
  524. {runops-1.2.0 → runops-1.3.0}/tests/test_core/test_repository.py +0 -0
  525. {runops-1.2.0 → runops-1.3.0}/tests/test_core/test_research_workspace.py +0 -0
  526. {runops-1.2.0 → runops-1.3.0}/tests/test_core/test_run.py +0 -0
  527. {runops-1.2.0 → runops-1.3.0}/tests/test_core/test_schemas.py +0 -0
  528. {runops-1.2.0 → runops-1.3.0}/tests/test_core/test_site.py +0 -0
  529. {runops-1.2.0 → runops-1.3.0}/tests/test_core/test_state.py +0 -0
  530. {runops-1.2.0 → runops-1.3.0}/tests/test_core/test_survey.py +0 -0
  531. {runops-1.2.0 → runops-1.3.0}/tests/test_core/test_upgrade_chain.py +0 -0
  532. {runops-1.2.0 → runops-1.3.0}/tests/test_e2e/test_bootstrap.py +0 -0
  533. {runops-1.2.0 → runops-1.3.0}/tests/test_e2e/test_golden_path.py +0 -0
  534. {runops-1.2.0 → runops-1.3.0}/tests/test_harness/test_claude.py +0 -0
  535. {runops-1.2.0 → runops-1.3.0}/tests/test_harness/test_codex.py +0 -0
  536. {runops-1.2.0 → runops-1.3.0}/tests/test_harness/test_development_guidance.py +0 -0
  537. {runops-1.2.0 → runops-1.3.0}/tests/test_launchers/__init__.py +0 -0
  538. {runops-1.2.0 → runops-1.3.0}/tests/test_launchers/test_launcher_base.py +0 -0
  539. {runops-1.2.0 → runops-1.3.0}/tests/test_launchers/test_mpiexec.py +0 -0
  540. {runops-1.2.0 → runops-1.3.0}/tests/test_launchers/test_mpirun.py +0 -0
  541. {runops-1.2.0 → runops-1.3.0}/tests/test_launchers/test_srun.py +0 -0
  542. {runops-1.2.0 → runops-1.3.0}/tests/test_mcp/__init__.py +0 -0
  543. {runops-1.2.0 → runops-1.3.0}/tests/test_mcp/test_registry.py +0 -0
  544. {runops-1.2.0 → runops-1.3.0}/tests/test_mcp/test_server.py +0 -0
  545. {runops-1.2.0 → runops-1.3.0}/tests/test_mcp/test_tools.py +0 -0
  546. {runops-1.2.0 → runops-1.3.0}/tests/test_slurm/__init__.py +0 -0
  547. {runops-1.2.0 → runops-1.3.0}/tests/test_slurm/test_jobgen.py +0 -0
  548. {runops-1.2.0 → runops-1.3.0}/tests/test_slurm/test_slurm_query.py +0 -0
  549. {runops-1.2.0 → runops-1.3.0}/tests/test_slurm/test_slurm_submit.py +0 -0
@@ -53,7 +53,7 @@
53
53
  | `runo runs jobs [PATH] [--watch SECS]` | 実行中ジョブ一覧 |
54
54
  | `runo runs dashboard [TARGETS...] [--watch SECS] [--all]` | 複数 run の進捗表。`--all` では cached analysis / next action も表示 |
55
55
  | `runo runs history [PATH]` | 投入履歴表示 |
56
- | `runo runs list [PATHS...] [--include-archived]` | run 一覧と cached analysis / next action を表示。既定では archived / purged を除外 |
56
+ | `runo runs list [PATHS...] [--include-archived]` | run 一覧と cached analysis / next action を表示。既定では archived / purged archived bundle 配下を除外 |
57
57
 
58
58
  ## 解析・知見
59
59
 
@@ -100,8 +100,8 @@
100
100
 
101
101
  | コマンド | 説明 |
102
102
  |---------|------|
103
- | `runo runs archive [RUNS...] [--keep-in-place] [--move-to DIR]` | run アーカイブ (completed のみ。既定で `runs/_archive/` へ移動) |
104
- | `runo runs restore RUN` | archived run archive 前の場所へ artifact ごと復元 |
103
+ | `runo runs archive [RUNS...] [--keep-in-place] [--move-to DIR] [--bundle] [--adopt-archived]` | 通常は completed run archive。`--bundle` は親ディレクトリ全体を移動し、配下 run state を保持。`--adopt-archived` は同じ親から個別 archive 済みの run を検証して bundle へ採用 |
104
+ | `runo runs restore RUN [--bundle]` | 通常は archived run を復元。`--bundle` は親ディレクトリ全体を archive 前の場所へ復元 |
105
105
  | `runo runs purge-work [RUN] [--discard-incomplete --reason WHY]` | work/ 内の不要ファイル削除。既知の non-ready output を破棄する場合は理由必須 |
106
106
  | `runo runs cancel [RUN]` | scancel + sync (submitted/running を停止) |
107
107
  | `runo runs delete [RUN]` | run ディレクトリ削除 (created/cancelled/failed のみ) |
@@ -53,7 +53,7 @@
53
53
  | `runo runs jobs [PATH] [--watch SECS]` | 実行中ジョブ一覧 |
54
54
  | `runo runs dashboard [TARGETS...] [--watch SECS] [--all]` | 複数 run の進捗表。`--all` では cached analysis / next action も表示 |
55
55
  | `runo runs history [PATH]` | 投入履歴表示 |
56
- | `runo runs list [PATHS...] [--include-archived]` | run 一覧と cached analysis / next action を表示。既定では archived / purged を除外 |
56
+ | `runo runs list [PATHS...] [--include-archived]` | run 一覧と cached analysis / next action を表示。既定では archived / purged archived bundle 配下を除外 |
57
57
 
58
58
  ## 解析・知見
59
59
 
@@ -100,8 +100,8 @@
100
100
 
101
101
  | コマンド | 説明 |
102
102
  |---------|------|
103
- | `runo runs archive [RUNS...] [--keep-in-place] [--move-to DIR]` | run アーカイブ (completed のみ。既定で `runs/_archive/` へ移動) |
104
- | `runo runs restore RUN` | archived run archive 前の場所へ artifact ごと復元 |
103
+ | `runo runs archive [RUNS...] [--keep-in-place] [--move-to DIR] [--bundle] [--adopt-archived]` | 通常は completed run archive。`--bundle` は親ディレクトリ全体を移動し、配下 run state を保持。`--adopt-archived` は同じ親から個別 archive 済みの run を検証して bundle へ採用 |
104
+ | `runo runs restore RUN [--bundle]` | 通常は archived run を復元。`--bundle` は親ディレクトリ全体を archive 前の場所へ復元 |
105
105
  | `runo runs purge-work [RUN] [--discard-incomplete --reason WHY]` | work/ 内の不要ファイル削除。既知の non-ready output を破棄する場合は理由必須 |
106
106
  | `runo runs cancel [RUN]` | scancel + sync (submitted/running を停止) |
107
107
  | `runo runs delete [RUN]` | run ディレクトリ削除 (created/cancelled/failed のみ) |
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: runops
3
- Version: 1.2.0
3
+ Version: 1.3.0
4
4
  Summary: HPC simulation run management CLI tool for Slurm-based environments
5
5
  License-Expression: Apache-2.0
6
6
  License-File: LICENSE
@@ -489,9 +489,15 @@ runs/**/work/*.err
489
489
  runs/**/work/*.log
490
490
 
491
491
  # analysis cache
492
- runs/**/analysis/cache/
493
- runs/**/analysis/.ipynb_checkpoints/
494
- ```
492
+ runs/**/analysis/cache/
493
+ runs/**/analysis/.ipynb_checkpoints/
494
+ ```
495
+
496
+ `runs/_archive/` 自体は ignore しない。bundle archive 後も
497
+ `survey.toml`、`manifest.toml`、source input、curated analysis、
498
+ `.runops-archive.toml` は Git 管理可能とする。一方、上記の `runs/**` pattern は
499
+ archive 配下にも同様に適用し、`work/`、`status/`、cache / scratch、生成済み input は
500
+ Git 管理対象へ戻さない。
495
501
 
496
502
  ---
497
503
 
@@ -841,6 +847,14 @@ scientific evidence の受理条件にしない。
841
847
 
842
848
  active view から退避済み。既定では run directory 全体を `runs/_archive/` へ移し、
843
849
  入力・出力・restart・解析 artifact は保持する
850
+
851
+ 親ディレクトリを `--bundle` で退避する操作は run lifecycle と直交する。
852
+ bundle 配下の `completed` / `cancelled` / `failed` / `created` 等の状態は変更せず、
853
+ `.runops-archive.toml` を親ディレクトリの archive marker とする。
854
+ archive destination が既に存在する場合は既定で拒否する。`--adopt-archived` を明示した
855
+ 場合に限り、同じ親から同じ相対パスへ個別 archive 済みで、状態が `archived` または
856
+ `purged` の run のみを bundle へ採用できる。destination 内に対象 run 外の path がある、
857
+ 元 path と相対位置が一致しない、または source 側と衝突する場合は全体を変更せず拒否する。
844
858
 
845
859
  ### `purged`
846
860
 
@@ -1133,8 +1147,8 @@ single-target モードでは "nothing to sync" notice を出してエラー扱
1133
1147
 
1134
1148
  ## 18.5 一覧
1135
1149
 
1136
- * `runo runs list [PATHS...]` — 既定では archived / purged を除く active view
1137
- * `runo runs list [PATHS...] --include-archived` — archived / purged を含める
1150
+ * `runo runs list [PATHS...]` — 既定では archived / purged archived bundle 配下を除く active view
1151
+ * `runo runs list [PATHS...] --include-archived` — archived / purged と archived bundle 配下を含める
1138
1152
  * `runo runs list --status failed`
1139
1153
  * `runo runs list --status archived` — 明示した archived run だけを表示する
1140
1154
  * `runo runs list --tag production`
@@ -1163,7 +1177,10 @@ single-target モードでは "nothing to sync" notice を出してエラー扱
1163
1177
  * `runo runs archive <run_dir or run_id>` — completed → archived。既定では `runs/_archive/<元の runs/ 相対パス>` へ移動する
1164
1178
  * `runo runs archive <run_dir or run_id> --keep-in-place` — completed → archived の状態変更のみ行う
1165
1179
  * `runo runs archive <run_dir or run_id> --move-to <archive_root>` — custom archive root へ移動する
1180
+ * `runo runs archive <parent_dir> --bundle` — `survey.toml` と配下 run を親ごと `runs/_archive/<元の runs/ 相対パス>` へ移動する。run state は保持し、submitted / running を含む場合は全体を変更せず拒否する
1181
+ * `runo runs archive <parent_dir> --bundle --adopt-archived` — 同じ親から個別 archive 済みの archived / purged run を検証して bundle へ採用する。確認前に対象 run ID と状態を表示し、競合や所有不明 path があれば変更せず拒否する
1166
1182
  * `runo runs restore <run_dir or run_id>` — archived → completed。`archived_from` へフォルダごと戻し、全 artifact を保持する。in-place archive は状態だけ戻す
1183
+ * `runo runs restore <archived_parent_dir> --bundle` — `.runops-archive.toml` の `archived_from` へ親ごと戻し、各 run state を保持する
1167
1184
  * `runo runs purge-work [<run_dir or run_id>]` — archived → purged。cached readiness が
1168
1185
  incomplete / unknown の場合は `--discard-incomplete --reason <WHY>` を同じ command に指定して
1169
1186
  review provenance を残す
@@ -413,6 +413,13 @@ class RunState(str, Enum):
413
413
  directory と全 artifact を復元する。`purged` は削除済み artifact を復元できないため
414
414
  restore 対象外とする。
415
415
 
416
+ `runo runs archive/restore --bundle` はこの state machine を変更しない container 操作とする。
417
+ 親ディレクトリへ `.runops-archive.toml` を置いて物理的な active/archive view を表し、
418
+ 配下 run の `cancelled` 等の実行結果を保持する。submitted / running を含む bundle は
419
+ 移動前の precondition check で拒否する。
420
+ `--adopt-archived` は provenance と相対 path が一致する個別 archive 済み run だけを
421
+ 明示的に bundle へ統合する。
422
+
416
423
  `update_state()` は以下を実行します:
417
424
  1. manifest.toml から現在の状態を読み取り
418
425
  2. 遷移の正当性を検証
@@ -167,6 +167,31 @@ runo runs restore R2026... # archive 前の場所へ全 artifact を
167
167
 
168
168
  出力を今後も使う場合は `runo runs purge-work` を実行しないでください。
169
169
 
170
+ survey 一式を `survey.toml` や cancelled / failed run も含めて退避する場合は、
171
+ 親ディレクトリを bundle として移動します。配下の run state は変わりません。
172
+
173
+ ```bash
174
+ runo runs archive runs/scan --bundle
175
+ runo runs list --include-archived
176
+ runo runs restore runs/_archive/scan --bundle
177
+ ```
178
+
179
+ submitted / running を含む bundle は移動されません。`runs/_archive/` は Git 管理可能で、
180
+ `survey.toml`、manifest、入力パラメータ、解析スクリプトは記録できます。
181
+ `work/`、`status/`、cache / scratch は active run と同様に `.gitignore` 対象です。
182
+
183
+ 配下の run を先に個別 archive しており、`runs/_archive/scan` が既にある場合、通常の
184
+ bundle archive は競合として拒否します。元の親と相対パスが一致する archived / purged
185
+ run だけを bundle に取り込むには、明示的に次を使います。
186
+
187
+ ```bash
188
+ runo runs archive runs/scan --bundle --adopt-archived
189
+ ```
190
+
191
+ 確認前に採用対象の run ID と状態が表示されます。archive destination に対象 run 以外の
192
+ ファイルがある場合や、元 path が別の親を指す場合は何も移動しません。bundle restore
193
+ では採用した run も元の相対パスへ戻りますが、個々の `archived` / `purged` 状態は保持します。
194
+
170
195
  ## SKILL を明示するとき
171
196
 
172
197
  通常は「何をしてほしいか」を書けば十分です。意図がずれるときだけ、ひと言添えてください。
@@ -193,12 +193,17 @@ service ではありません。
193
193
  | `runo analyze new-story NAME [--id ID] [--title TITLE] [--source PATH]` | strict source/schema の story acceptance workspace を作成 |
194
194
  | `runo analyze audit-story [STORY_DIR]` | source artifact を照合し `audit.json` / `audit.md` を生成 |
195
195
  | `runo runs cancel [RUN]` | submitted/running な run を `scancel` + `sync` で停止 |
196
- | `runo runs archive [RUNS...] [--keep-in-place] [--move-to DIR]` | completed run を archived にし、既定で `runs/_archive/` へ移動 |
197
- | `runo runs restore RUN` | archived run を元のパスへ artifact ごと戻して completed にする |
196
+ | `runo runs archive [RUNS...] [--keep-in-place] [--move-to DIR] [--bundle] [--adopt-archived]` | 通常は completed run を archived にする。`--bundle` は親と全内容を移動し、各 run state を保持。`--adopt-archived` は一致する個別 archive 済み run を検証して採用 |
197
+ | `runo runs restore RUN [--bundle]` | 通常は archived run completed に戻す。`--bundle` は親と全内容を元のパスへ戻す |
198
198
  | `runo runs purge-work [RUN] [--discard-incomplete --reason WHY]` | archived run の work 削除。既知 non-ready output の破棄は理由必須 |
199
199
  | `runo runs delete [RUN]` | created / cancelled / failed run を削除 |
200
200
 
201
201
  completed / archived run には `delete` を使わず、`archive` → `purge-work` の経路を使います。
202
+ bundle archive は run state と直交し、submitted / running を含む親は移動しません。
203
+ 既存 archive destination は原則拒否し、`--adopt-archived` 指定時だけ同じ親・相対 path の
204
+ archived / purged run を採用します。所有不明 path や source 側の衝突があれば変更しません。
205
+ `runs/_archive/` 自体は Git 管理対象から外さず、active run と同じ `.gitignore` 規則で
206
+ `work/`、`status/`、cache / scratch のみを除外します。
202
207
 
203
208
  ### Notes / Knowledge
204
209
 
@@ -721,6 +721,27 @@ status_dir = "status"
721
721
  | `archived_at` | datetime string | ISO 8601 timestamp for the latest archive relocation. |
722
722
  | `restored_from` | string | Archived directory used for the latest restore. |
723
723
  | `restored_at` | datetime string | ISO 8601 timestamp for the latest restore. |
724
+ | `bundle_archived_from` | string | Run path before its parent directory was bundle-archived. Does not change `run.status`. |
725
+ | `bundle_archived_at` | datetime string | ISO 8601 timestamp for the latest parent bundle archive. |
726
+ | `bundle_restored_from` | string | Run path inside the archived parent used for the latest bundle restore. |
727
+ | `bundle_restored_at` | datetime string | ISO 8601 timestamp for the latest parent bundle restore. |
728
+
729
+ ### `.runops-archive.toml`
730
+
731
+ `runo runs archive PARENT --bundle` が archived parent の直下へ生成する restore marker。
732
+ Git 管理可能な小さな provenance file であり、配下 run の lifecycle state は表さない。
733
+
734
+ | Field | Type | Description |
735
+ |-------|------|-------------|
736
+ | `bundle.format_version` | integer | Bundle archive metadata format. Currently `1`. |
737
+ | `bundle.archived_from` | absolute path string | Parent directory restored by `runo runs restore --bundle`. |
738
+ | `bundle.archived_at` | datetime string | ISO 8601 archive timestamp. |
739
+ | `bundle.run_count` | integer | Number of run manifests moved with the parent. |
740
+ | `bundle.adopted_run_ids` | array of strings | Individually archived/purged run IDs adopted with `--adopt-archived`; empty for a normal bundle archive. |
741
+
742
+ `runs/_archive/` 自体は `.gitignore` 対象にしない。ただし `runs/**/work/`、
743
+ `runs/**/status/`、analysis cache / scratch、生成済み input の除外規則は archive 配下にも
744
+ 適用される。
724
745
 
725
746
  ### State Machine
726
747
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "runops"
7
- version = "1.2.0"
7
+ version = "1.3.0"
8
8
  description = "HPC simulation run management CLI tool for Slurm-based environments"
9
9
  readme = "README.md"
10
10
  license = "Apache-2.0"
@@ -2,4 +2,4 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- __version__ = "1.2.0"
5
+ __version__ = "1.3.0"
@@ -36,6 +36,18 @@ from runops.application.actions.analysis import (
36
36
  from runops.application.actions.analysis import (
37
37
  summarize_run as summarize_run,
38
38
  )
39
+ from runops.application.actions.bundle_archive import (
40
+ archive_bundle as archive_bundle,
41
+ )
42
+ from runops.application.actions.bundle_archive import (
43
+ default_bundle_archive_destination as default_bundle_archive_destination,
44
+ )
45
+ from runops.application.actions.bundle_archive import (
46
+ plan_bundle_archive as plan_bundle_archive,
47
+ )
48
+ from runops.application.actions.bundle_archive import (
49
+ restore_bundle as restore_bundle,
50
+ )
39
51
  from runops.application.actions.knowledge import (
40
52
  add_fact as add_fact,
41
53
  )
@@ -93,20 +105,24 @@ __all__ = [
93
105
  "ActionSpec",
94
106
  "ActionStatus",
95
107
  "add_fact",
108
+ "archive_bundle",
96
109
  "archive_run",
97
110
  "cancel_run",
98
111
  "collect_survey",
99
112
  "create_run",
100
113
  "create_survey",
101
114
  "default_archive_destination",
115
+ "default_bundle_archive_destination",
102
116
  "delete_run",
103
117
  "execute_action",
104
118
  "export_publication",
105
119
  "get_action_spec",
106
120
  "list_actions",
121
+ "plan_bundle_archive",
107
122
  "plan_retry",
108
123
  "promote_fact",
109
124
  "purge_work",
125
+ "restore_bundle",
110
126
  "restore_run",
111
127
  "retry_run",
112
128
  "save_insight",