runops 1.3.0__tar.gz → 2.0.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 (655) hide show
  1. runops-2.0.0/.agents/skills/check/SKILL.md +34 -0
  2. runops-2.0.0/.agents/skills/improve-harness/SKILL.md +34 -0
  3. {runops-1.3.0/.claude → runops-2.0.0/.agents}/skills/release/SKILL.md +8 -6
  4. runops-2.0.0/.agents/skills/simulator-adapter/SKILL.md +35 -0
  5. runops-2.0.0/.agents/skills/spec-reviewer/SKILL.md +29 -0
  6. runops-2.0.0/.agents/skills/sync-docs/SKILL.md +34 -0
  7. runops-2.0.0/.claude/agents/spec-reviewer.md +7 -0
  8. runops-2.0.0/.claude/rules/architecture.md +29 -0
  9. runops-2.0.0/.claude/rules/dev-workflow.md +32 -0
  10. runops-2.0.0/.claude/rules/gotchas.md +37 -0
  11. runops-2.0.0/.claude/skills/check/SKILL.md +6 -0
  12. runops-2.0.0/.claude/skills/improve-harness/SKILL.md +6 -0
  13. runops-2.0.0/.claude/skills/python-package-refactor/SKILL.md +6 -0
  14. runops-2.0.0/.claude/skills/release/SKILL.md +6 -0
  15. runops-2.0.0/.claude/skills/simulator-adapter/SKILL.md +6 -0
  16. runops-2.0.0/.claude/skills/spec-reviewer/SKILL.md +6 -0
  17. runops-2.0.0/.claude/skills/sync-docs/SKILL.md +6 -0
  18. runops-2.0.0/.codex/README.md +25 -0
  19. runops-2.0.0/.codex/agents/spec-reviewer.toml +6 -0
  20. runops-2.0.0/.codex/rules/runops.rules +67 -0
  21. runops-2.0.0/.github/assets/conversation-dark.svg +4584 -0
  22. runops-2.0.0/.github/assets/conversation-light.svg +4584 -0
  23. runops-2.0.0/.github/assets/hero-dark.svg +3060 -0
  24. runops-2.0.0/.github/assets/hero-light.svg +3060 -0
  25. runops-2.0.0/.github/assets/make_readme_art.py +171 -0
  26. {runops-1.3.0 → runops-2.0.0}/.github/workflows/ci.yml +1 -2
  27. {runops-1.3.0 → runops-2.0.0}/.github/workflows/publish.yml +1 -2
  28. {runops-1.3.0 → runops-2.0.0}/.harness/manifest.toml +4 -5
  29. runops-2.0.0/AGENTS.md +59 -0
  30. runops-2.0.0/CLAUDE.md +1 -0
  31. runops-2.0.0/PKG-INFO +121 -0
  32. runops-2.0.0/README.md +90 -0
  33. runops-2.0.0/SPEC.md +913 -0
  34. runops-2.0.0/docs/adapter.md +96 -0
  35. runops-2.0.0/docs/reference.md +171 -0
  36. runops-2.0.0/pyproject.toml +103 -0
  37. runops-2.0.0/src/runops/__init__.py +3 -0
  38. runops-2.0.0/src/runops/adapters/__init__.py +17 -0
  39. runops-2.0.0/src/runops/adapters/base.py +161 -0
  40. runops-2.0.0/src/runops/adapters/generic.py +72 -0
  41. runops-2.0.0/src/runops/adapters/registry.py +149 -0
  42. runops-2.0.0/src/runops/case.py +166 -0
  43. runops-2.0.0/src/runops/cli.py +870 -0
  44. runops-2.0.0/src/runops/config.py +290 -0
  45. runops-2.0.0/src/runops/errors.py +21 -0
  46. runops-2.0.0/src/runops/harness.py +106 -0
  47. runops-2.0.0/src/runops/jobgen.py +132 -0
  48. runops-2.0.0/src/runops/launchers.py +29 -0
  49. runops-2.0.0/src/runops/legacy_adapters/__init__.py +6 -0
  50. runops-2.0.0/src/runops/legacy_adapters/beach.py +145 -0
  51. runops-2.0.0/src/runops/legacy_adapters/emses.py +158 -0
  52. runops-2.0.0/src/runops/manifest.py +192 -0
  53. runops-2.0.0/src/runops/ops/__init__.py +1 -0
  54. runops-2.0.0/src/runops/ops/common.py +39 -0
  55. runops-2.0.0/src/runops/ops/create.py +495 -0
  56. runops-2.0.0/src/runops/ops/listing.py +76 -0
  57. runops-2.0.0/src/runops/ops/migrate.py +630 -0
  58. runops-2.0.0/src/runops/ops/notes.py +94 -0
  59. runops-2.0.0/src/runops/ops/setup.py +367 -0
  60. runops-2.0.0/src/runops/ops/skills.py +160 -0
  61. runops-2.0.0/src/runops/ops/submit.py +191 -0
  62. runops-2.0.0/src/runops/ops/sync.py +177 -0
  63. runops-2.0.0/src/runops/ops/tidy.py +259 -0
  64. runops-2.0.0/src/runops/project.py +172 -0
  65. runops-2.0.0/src/runops/runtime.py +197 -0
  66. runops-2.0.0/src/runops/skills/runops-check-status/SKILL.md +34 -0
  67. runops-2.0.0/src/runops/skills/runops-create-run/SKILL.md +26 -0
  68. runops-2.0.0/src/runops/skills/runops-maintain/SKILL.md +44 -0
  69. runops-2.0.0/src/runops/skills/runops-reference/SKILL.md +49 -0
  70. runops-2.0.0/src/runops/skills/runops-tidy/SKILL.md +25 -0
  71. runops-2.0.0/src/runops/slurm.py +138 -0
  72. runops-2.0.0/src/runops/util.py +180 -0
  73. runops-2.0.0/tests/conftest.py +127 -0
  74. runops-2.0.0/tests/fixtures/v1-project/.codex/rules/a.md +1 -0
  75. runops-2.0.0/tests/fixtures/v1-project/.runops/test-runs/T20260701-0001/receipt.toml +1 -0
  76. runops-2.0.0/tests/fixtures/v1-project/.runops/work/beach-x-abc/bin/beach +1 -0
  77. runops-2.0.0/tests/fixtures/v1-project/AGENTS.md +1 -0
  78. runops-2.0.0/tests/fixtures/v1-project/CLAUDE.md +1 -0
  79. runops-2.0.0/tests/fixtures/v1-project/cases/beach/plane/beach.toml +2 -0
  80. runops-2.0.0/tests/fixtures/v1-project/cases/beach/plane/case.toml +19 -0
  81. runops-2.0.0/tests/fixtures/v1-project/cases/old/beach.toml +1 -0
  82. runops-2.0.0/tests/fixtures/v1-project/cases/old/case.toml +6 -0
  83. runops-2.0.0/tests/fixtures/v1-project/launchers.toml +3 -0
  84. runops-2.0.0/tests/fixtures/v1-project/research/CURRENT.md +1 -0
  85. runops-2.0.0/tests/fixtures/v1-project/runops.toml +5 -0
  86. runops-2.0.0/tests/fixtures/v1-project/runs/AGENTS.md +1 -0
  87. runops-2.0.0/tests/fixtures/v1-project/runs/_archive/plane/R20260601-0001/manifest.toml +19 -0
  88. runops-2.0.0/tests/fixtures/v1-project/runs/plane/R20260701-0001--a/input/beach.toml +2 -0
  89. runops-2.0.0/tests/fixtures/v1-project/runs/plane/R20260701-0001--a/manifest.toml +59 -0
  90. runops-2.0.0/tests/fixtures/v1-project/runs/plane/R20260702-0001/manifest.toml +18 -0
  91. runops-2.0.0/tests/fixtures/v1-project/runs/scan/R20260701-0002/manifest.toml +24 -0
  92. runops-2.0.0/tests/fixtures/v1-project/runs/scan/survey.toml +3 -0
  93. runops-2.0.0/tests/fixtures/v1-project/simulators.toml +12 -0
  94. runops-2.0.0/tests/fixtures/v1-project/site.toml +12 -0
  95. runops-2.0.0/tests/golden/mpi_standard.sh +22 -0
  96. runops-2.0.0/tests/golden/openmp_rsc.sh +21 -0
  97. runops-2.0.0/tests/test_adapters.py +89 -0
  98. runops-2.0.0/tests/test_build.py +93 -0
  99. runops-2.0.0/tests/test_dev_harness.py +76 -0
  100. runops-2.0.0/tests/test_jobgen.py +87 -0
  101. runops-2.0.0/tests/test_legacy_adapters.py +98 -0
  102. runops-2.0.0/tests/test_lifecycle.py +206 -0
  103. runops-2.0.0/tests/test_manifest_config.py +114 -0
  104. runops-2.0.0/tests/test_migrate.py +169 -0
  105. runops-2.0.0/tests/test_scratch_tidy.py +142 -0
  106. runops-2.0.0/tests/test_setup_misc.py +83 -0
  107. runops-2.0.0/tests/test_skills.py +119 -0
  108. runops-2.0.0/tests/test_sweep.py +65 -0
  109. runops-2.0.0/tests/test_sync_evidence.py +139 -0
  110. runops-2.0.0/uv.lock +684 -0
  111. runops-1.3.0/.agents/skills/beach/SKILL.md +0 -54
  112. runops-1.3.0/.agents/skills/check/SKILL.md +0 -19
  113. runops-1.3.0/.agents/skills/emses/SKILL.md +0 -56
  114. runops-1.3.0/.agents/skills/implement-adapter/SKILL.md +0 -113
  115. runops-1.3.0/.agents/skills/implement-cli/SKILL.md +0 -33
  116. runops-1.3.0/.agents/skills/implement-core/SKILL.md +0 -45
  117. runops-1.3.0/.agents/skills/implement-launcher/SKILL.md +0 -130
  118. runops-1.3.0/.agents/skills/implement-slurm/SKILL.md +0 -104
  119. runops-1.3.0/.agents/skills/improve-harness/SKILL.md +0 -84
  120. runops-1.3.0/.agents/skills/release/SKILL.md +0 -175
  121. runops-1.3.0/.agents/skills/scaffold/SKILL.md +0 -104
  122. runops-1.3.0/.agents/skills/spec-reviewer/SKILL.md +0 -30
  123. runops-1.3.0/.agents/skills/test-module/SKILL.md +0 -20
  124. runops-1.3.0/.agents/skills/test-writer/SKILL.md +0 -31
  125. runops-1.3.0/.agents/skills/update-docs/SKILL.md +0 -76
  126. runops-1.3.0/.claude/agents/beach.md +0 -45
  127. runops-1.3.0/.claude/agents/emses.md +0 -46
  128. runops-1.3.0/.claude/agents/implement-adapter.md +0 -114
  129. runops-1.3.0/.claude/agents/implement-cli.md +0 -33
  130. runops-1.3.0/.claude/agents/implement-core.md +0 -44
  131. runops-1.3.0/.claude/agents/implement-launcher.md +0 -131
  132. runops-1.3.0/.claude/agents/implement-slurm.md +0 -105
  133. runops-1.3.0/.claude/agents/scaffold.md +0 -106
  134. runops-1.3.0/.claude/agents/spec-reviewer.md +0 -30
  135. runops-1.3.0/.claude/agents/test-writer.md +0 -31
  136. runops-1.3.0/.claude/rules/architecture.md +0 -73
  137. runops-1.3.0/.claude/rules/commands.md +0 -107
  138. runops-1.3.0/.claude/rules/dev-workflow.md +0 -60
  139. runops-1.3.0/.claude/rules/gotchas.md +0 -66
  140. runops-1.3.0/.claude/rules/knowledge-layer.md +0 -24
  141. runops-1.3.0/.claude/skills/check/SKILL.md +0 -19
  142. runops-1.3.0/.claude/skills/improve-harness/SKILL.md +0 -92
  143. runops-1.3.0/.claude/skills/python-package-refactor/SKILL.md +0 -128
  144. runops-1.3.0/.claude/skills/python-package-refactor/agents/openai.yaml +0 -3
  145. runops-1.3.0/.claude/skills/python-package-refactor/examples/refactor-request.md +0 -19
  146. runops-1.3.0/.claude/skills/python-package-refactor/references/anti-patterns.md +0 -14
  147. runops-1.3.0/.claude/skills/python-package-refactor/references/api-compatibility.md +0 -92
  148. runops-1.3.0/.claude/skills/python-package-refactor/references/packaging-modernization.md +0 -37
  149. runops-1.3.0/.claude/skills/python-package-refactor/references/refactor-playbook.md +0 -80
  150. runops-1.3.0/.claude/skills/python-package-refactor/references/verification.md +0 -65
  151. runops-1.3.0/.claude/skills/python-package-refactor/scripts/api_surface_snapshot.py +0 -506
  152. runops-1.3.0/.claude/skills/python-package-refactor/scripts/import_smoke.py +0 -179
  153. runops-1.3.0/.claude/skills/python-package-refactor/scripts/inspect_python_package.py +0 -681
  154. runops-1.3.0/.claude/skills/python-package-refactor/scripts/refactor_quality_gate.py +0 -453
  155. runops-1.3.0/.claude/skills/test-module/SKILL.md +0 -20
  156. runops-1.3.0/.claude/skills/update-docs/SKILL.md +0 -76
  157. runops-1.3.0/.codex/README.md +0 -137
  158. runops-1.3.0/.codex/agents/beach.toml +0 -61
  159. runops-1.3.0/.codex/agents/emses.toml +0 -62
  160. runops-1.3.0/.codex/agents/implement-adapter.toml +0 -111
  161. runops-1.3.0/.codex/agents/implement-cli.toml +0 -32
  162. runops-1.3.0/.codex/agents/implement-core.toml +0 -43
  163. runops-1.3.0/.codex/agents/implement-launcher.toml +0 -128
  164. runops-1.3.0/.codex/agents/implement-slurm.toml +0 -102
  165. runops-1.3.0/.codex/agents/scaffold.toml +0 -102
  166. runops-1.3.0/.codex/agents/spec-reviewer.toml +0 -29
  167. runops-1.3.0/.codex/agents/test-writer.toml +0 -30
  168. runops-1.3.0/.codex/rules/architecture.md +0 -73
  169. runops-1.3.0/.codex/rules/commands.md +0 -107
  170. runops-1.3.0/.codex/rules/dev-workflow.md +0 -60
  171. runops-1.3.0/.codex/rules/gotchas.md +0 -69
  172. runops-1.3.0/.codex/rules/knowledge-layer.md +0 -36
  173. runops-1.3.0/.codex/rules/runops.rules +0 -169
  174. runops-1.3.0/AGENTS.md +0 -140
  175. runops-1.3.0/CLAUDE.md +0 -146
  176. runops-1.3.0/PKG-INFO +0 -211
  177. runops-1.3.0/README.md +0 -194
  178. runops-1.3.0/SKILLS.md +0 -250
  179. runops-1.3.0/SPEC.md +0 -1504
  180. runops-1.3.0/docs/agent-user-guide.md +0 -110
  181. runops-1.3.0/docs/architecture.md +0 -777
  182. runops-1.3.0/docs/demo-replay.md +0 -143
  183. runops-1.3.0/docs/extending.md +0 -963
  184. runops-1.3.0/docs/figures/layers/overview.png +0 -0
  185. runops-1.3.0/docs/get-started-with-agent.md +0 -229
  186. runops-1.3.0/docs/layers/README.md +0 -59
  187. runops-1.3.0/docs/layers/analysis.md +0 -26
  188. runops-1.3.0/docs/layers/execution-kernel.md +0 -119
  189. runops-1.3.0/docs/layers/experiment.md +0 -78
  190. runops-1.3.0/docs/layers/harness.md +0 -116
  191. runops-1.3.0/docs/layers/interface.md +0 -240
  192. runops-1.3.0/docs/layers/knowledge.md +0 -78
  193. runops-1.3.0/docs/layers/research.md +0 -37
  194. runops-1.3.0/docs/layers/upstream.md +0 -21
  195. runops-1.3.0/docs/local-runops-patches.md +0 -4
  196. runops-1.3.0/docs/mcp.md +0 -265
  197. runops-1.3.0/docs/migrations/README.md +0 -129
  198. runops-1.3.0/docs/migrations/v0.md +0 -268
  199. runops-1.3.0/docs/paper-requests.md +0 -13
  200. runops-1.3.0/docs/project-health.md +0 -80
  201. runops-1.3.0/docs/runops-intro.pdf +0 -0
  202. runops-1.3.0/docs/runops-intro.tex +0 -514
  203. runops-1.3.0/docs/simulator-kb-spec.md +0 -579
  204. runops-1.3.0/docs/toml-reference.md +0 -1382
  205. runops-1.3.0/entrypoints.toml +0 -1
  206. runops-1.3.0/examples/beach/campaign.toml +0 -16
  207. runops-1.3.0/examples/beach/cases/periodic2_basic/beach_template.toml +0 -62
  208. runops-1.3.0/examples/beach/cases/periodic2_basic/case.toml +0 -26
  209. runops-1.3.0/examples/beach/launchers.toml +0 -7
  210. runops-1.3.0/examples/beach/simulators.toml +0 -5
  211. runops-1.3.0/examples/beach/surveys/density_scan/survey.toml +0 -27
  212. runops-1.3.0/examples/emses/campaign.toml +0 -18
  213. runops-1.3.0/examples/emses/cases/flat_surface/case.toml +0 -28
  214. runops-1.3.0/examples/emses/cases/flat_surface/plasma.toml +0 -81
  215. runops-1.3.0/examples/emses/launchers.toml +0 -7
  216. runops-1.3.0/examples/emses/simulators.toml +0 -5
  217. runops-1.3.0/examples/emses/surveys/mag_angle_scan/survey.toml +0 -27
  218. runops-1.3.0/pyproject.toml +0 -109
  219. runops-1.3.0/schemas/campaign.json +0 -106
  220. runops-1.3.0/schemas/case.json +0 -80
  221. runops-1.3.0/schemas/codex-plugin-check-result.json +0 -58
  222. runops-1.3.0/schemas/codex-plugin-inventory.json +0 -122
  223. runops-1.3.0/schemas/codex-plugin-recommendation.json +0 -41
  224. runops-1.3.0/schemas/launchers.json +0 -78
  225. runops-1.3.0/schemas/manifest.json +0 -170
  226. runops-1.3.0/schemas/runops.json +0 -132
  227. runops-1.3.0/schemas/simulators.json +0 -51
  228. runops-1.3.0/schemas/site.json +0 -80
  229. runops-1.3.0/schemas/survey.json +0 -157
  230. runops-1.3.0/src/runops/__init__.py +0 -5
  231. runops-1.3.0/src/runops/adapters/__init__.py +0 -37
  232. runops-1.3.0/src/runops/adapters/_provenance.py +0 -93
  233. runops-1.3.0/src/runops/adapters/_runtime.py +0 -112
  234. runops-1.3.0/src/runops/adapters/_utils/__init__.py +0 -36
  235. runops-1.3.0/src/runops/adapters/_utils/toml_utils.py +0 -81
  236. runops-1.3.0/src/runops/adapters/base.py +0 -380
  237. runops-1.3.0/src/runops/adapters/bundled.py +0 -28
  238. runops-1.3.0/src/runops/adapters/contrib/__init__.py +0 -5
  239. runops-1.3.0/src/runops/adapters/contrib/_paths.py +0 -10
  240. runops-1.3.0/src/runops/adapters/contrib/beach/__init__.py +0 -17
  241. runops-1.3.0/src/runops/adapters/contrib/beach/adapter.py +0 -549
  242. runops-1.3.0/src/runops/adapters/contrib/beach/constants.py +0 -19
  243. runops-1.3.0/src/runops/adapters/contrib/beach/diagnostics.py +0 -306
  244. runops-1.3.0/src/runops/adapters/contrib/beach/metadata.py +0 -256
  245. runops-1.3.0/src/runops/adapters/contrib/beach/validation.py +0 -126
  246. runops-1.3.0/src/runops/adapters/contrib/emses/__init__.py +0 -23
  247. runops-1.3.0/src/runops/adapters/contrib/emses/adapter.py +0 -465
  248. runops-1.3.0/src/runops/adapters/contrib/emses/constants.py +0 -11
  249. runops-1.3.0/src/runops/adapters/contrib/emses/diagnostics.py +0 -274
  250. runops-1.3.0/src/runops/adapters/contrib/emses/metadata.py +0 -327
  251. runops-1.3.0/src/runops/adapters/contrib/emses/validation.py +0 -157
  252. runops-1.3.0/src/runops/adapters/generic.py +0 -327
  253. runops-1.3.0/src/runops/adapters/registry.py +0 -338
  254. runops-1.3.0/src/runops/application/__init__.py +0 -1
  255. runops-1.3.0/src/runops/application/actions/__init__.py +0 -134
  256. runops-1.3.0/src/runops/application/actions/admin.py +0 -541
  257. runops-1.3.0/src/runops/application/actions/analysis.py +0 -196
  258. runops-1.3.0/src/runops/application/actions/bundle_archive.py +0 -700
  259. runops-1.3.0/src/runops/application/actions/helpers.py +0 -57
  260. runops-1.3.0/src/runops/application/actions/knowledge.py +0 -142
  261. runops-1.3.0/src/runops/application/actions/registry.py +0 -97
  262. runops-1.3.0/src/runops/application/actions/result.py +0 -52
  263. runops-1.3.0/src/runops/application/actions/run_lifecycle.py +0 -480
  264. runops-1.3.0/src/runops/application/actions/specs.py +0 -366
  265. runops-1.3.0/src/runops/application/analysis/__init__.py +0 -67
  266. runops-1.3.0/src/runops/application/analysis/artifacts.py +0 -270
  267. runops-1.3.0/src/runops/application/analysis/collection.py +0 -528
  268. runops-1.3.0/src/runops/application/analysis/comparison.py +0 -232
  269. runops-1.3.0/src/runops/application/analysis/plotting.py +0 -248
  270. runops-1.3.0/src/runops/application/analysis/report.py +0 -103
  271. runops-1.3.0/src/runops/application/analysis/story/__init__.py +0 -19
  272. runops-1.3.0/src/runops/application/analysis/story/audit.py +0 -127
  273. runops-1.3.0/src/runops/application/analysis/story/models.py +0 -132
  274. runops-1.3.0/src/runops/application/analysis/story/render.py +0 -73
  275. runops-1.3.0/src/runops/application/analysis/story/schema.py +0 -172
  276. runops-1.3.0/src/runops/application/analysis/story/sources.py +0 -289
  277. runops-1.3.0/src/runops/application/analysis/story/workspace.py +0 -180
  278. runops-1.3.0/src/runops/application/analysis/workflow.py +0 -373
  279. runops-1.3.0/src/runops/application/context.py +0 -604
  280. runops-1.3.0/src/runops/application/execution/__init__.py +0 -55
  281. runops-1.3.0/src/runops/application/execution/readiness.py +0 -598
  282. runops-1.3.0/src/runops/application/execution/retry.py +0 -347
  283. runops-1.3.0/src/runops/application/execution/submission/__init__.py +0 -79
  284. runops-1.3.0/src/runops/application/execution/submission/apply.py +0 -265
  285. runops-1.3.0/src/runops/application/execution/submission/claim.py +0 -191
  286. runops-1.3.0/src/runops/application/execution/submission/models.py +0 -198
  287. runops-1.3.0/src/runops/application/execution/submission/planning.py +0 -188
  288. runops-1.3.0/src/runops/application/gateway/__init__.py +0 -1
  289. runops-1.3.0/src/runops/application/gateway/plugins/__init__.py +0 -41
  290. runops-1.3.0/src/runops/application/gateway/plugins/discovery.py +0 -415
  291. runops-1.3.0/src/runops/application/gateway/plugins/inventory.py +0 -66
  292. runops-1.3.0/src/runops/application/gateway/plugins/models.py +0 -123
  293. runops-1.3.0/src/runops/application/gateway/plugins/validation.py +0 -146
  294. runops-1.3.0/src/runops/application/operator/__init__.py +0 -1
  295. runops-1.3.0/src/runops/application/operator/coverage_policy.py +0 -140
  296. runops-1.3.0/src/runops/application/operator/harness_upgrade.py +0 -257
  297. runops-1.3.0/src/runops/application/operator/lint/__init__.py +0 -18
  298. runops-1.3.0/src/runops/application/operator/lint/analysis.py +0 -127
  299. runops-1.3.0/src/runops/application/operator/lint/knowledge.py +0 -114
  300. runops-1.3.0/src/runops/application/operator/lint/models.py +0 -123
  301. runops-1.3.0/src/runops/application/operator/lint/plugins.py +0 -52
  302. runops-1.3.0/src/runops/application/operator/lint/registry.py +0 -131
  303. runops-1.3.0/src/runops/application/operator/lint/runs.py +0 -284
  304. runops-1.3.0/src/runops/application/operator/lint/structure.py +0 -87
  305. runops-1.3.0/src/runops/application/operator/migrations/__init__.py +0 -33
  306. runops-1.3.0/src/runops/application/operator/migrations/models.py +0 -79
  307. runops-1.3.0/src/runops/application/operator/migrations/registry.py +0 -139
  308. runops-1.3.0/src/runops/application/operator/migrations/v0.py +0 -386
  309. runops-1.3.0/src/runops/application/ports/__init__.py +0 -15
  310. runops-1.3.0/src/runops/application/ports/scheduler.py +0 -22
  311. runops-1.3.0/src/runops/application/publication/__init__.py +0 -17
  312. runops-1.3.0/src/runops/application/publication/files.py +0 -127
  313. runops-1.3.0/src/runops/application/publication/sources.py +0 -389
  314. runops-1.3.0/src/runops/application/publication/workflow.py +0 -371
  315. runops-1.3.0/src/runops/application/research/__init__.py +0 -37
  316. runops-1.3.0/src/runops/application/research/workspace.py +0 -898
  317. runops-1.3.0/src/runops/application/run_creation/__init__.py +0 -70
  318. runops-1.3.0/src/runops/application/run_creation/manifest.py +0 -215
  319. runops-1.3.0/src/runops/application/run_creation/merge.py +0 -84
  320. runops-1.3.0/src/runops/application/run_creation/plan.py +0 -61
  321. runops-1.3.0/src/runops/application/run_creation/regenerate.py +0 -119
  322. runops-1.3.0/src/runops/application/run_creation/resolve.py +0 -71
  323. runops-1.3.0/src/runops/application/run_creation/staging.py +0 -45
  324. runops-1.3.0/src/runops/application/run_creation/workflow.py +0 -404
  325. runops-1.3.0/src/runops/cli/__init__.py +0 -3
  326. runops-1.3.0/src/runops/cli/analyze.py +0 -471
  327. runops-1.3.0/src/runops/cli/clone.py +0 -204
  328. runops-1.3.0/src/runops/cli/config.py +0 -217
  329. runops-1.3.0/src/runops/cli/context.py +0 -80
  330. runops-1.3.0/src/runops/cli/create.py +0 -284
  331. runops-1.3.0/src/runops/cli/dashboard.py +0 -233
  332. runops-1.3.0/src/runops/cli/demo.py +0 -212
  333. runops-1.3.0/src/runops/cli/extend.py +0 -217
  334. runops-1.3.0/src/runops/cli/groups/__init__.py +0 -15
  335. runops-1.3.0/src/runops/cli/groups/analyze.py +0 -29
  336. runops-1.3.0/src/runops/cli/groups/case.py +0 -12
  337. runops-1.3.0/src/runops/cli/groups/research.py +0 -31
  338. runops-1.3.0/src/runops/cli/groups/runs.py +0 -45
  339. runops-1.3.0/src/runops/cli/history.py +0 -105
  340. runops-1.3.0/src/runops/cli/init/__init__.py +0 -42
  341. runops-1.3.0/src/runops/cli/init/bootstrap.py +0 -138
  342. runops-1.3.0/src/runops/cli/init/command.py +0 -9
  343. runops-1.3.0/src/runops/cli/init/doctor.py +0 -227
  344. runops-1.3.0/src/runops/cli/init/github_auth.py +0 -121
  345. runops-1.3.0/src/runops/cli/init/knowledge.py +0 -147
  346. runops-1.3.0/src/runops/cli/init/prompting.py +0 -321
  347. runops-1.3.0/src/runops/cli/init/scaffold.py +0 -165
  348. runops-1.3.0/src/runops/cli/init/serialization.py +0 -126
  349. runops-1.3.0/src/runops/cli/init/workflow.py +0 -471
  350. runops-1.3.0/src/runops/cli/jobs.py +0 -145
  351. runops-1.3.0/src/runops/cli/knowledge/__init__.py +0 -46
  352. runops-1.3.0/src/runops/cli/knowledge/command.py +0 -475
  353. runops-1.3.0/src/runops/cli/knowledge/common.py +0 -21
  354. runops-1.3.0/src/runops/cli/knowledge/sources.py +0 -521
  355. runops-1.3.0/src/runops/cli/lint.py +0 -100
  356. runops-1.3.0/src/runops/cli/list.py +0 -131
  357. runops-1.3.0/src/runops/cli/log.py +0 -163
  358. runops-1.3.0/src/runops/cli/main.py +0 -132
  359. runops-1.3.0/src/runops/cli/manage.py +0 -590
  360. runops-1.3.0/src/runops/cli/mcp.py +0 -153
  361. runops-1.3.0/src/runops/cli/migrate.py +0 -177
  362. runops-1.3.0/src/runops/cli/new.py +0 -388
  363. runops-1.3.0/src/runops/cli/operations.py +0 -103
  364. runops-1.3.0/src/runops/cli/plugins.py +0 -151
  365. runops-1.3.0/src/runops/cli/regenerate.py +0 -89
  366. runops-1.3.0/src/runops/cli/research.py +0 -245
  367. runops-1.3.0/src/runops/cli/retry.py +0 -140
  368. runops-1.3.0/src/runops/cli/run_lookup.py +0 -148
  369. runops-1.3.0/src/runops/cli/setup.py +0 -264
  370. runops-1.3.0/src/runops/cli/status.py +0 -373
  371. runops-1.3.0/src/runops/cli/submit.py +0 -399
  372. runops-1.3.0/src/runops/cli/update.py +0 -354
  373. runops-1.3.0/src/runops/cli/update_harness.py +0 -657
  374. runops-1.3.0/src/runops/cli/update_notice.py +0 -303
  375. runops-1.3.0/src/runops/cli/update_refs.py +0 -372
  376. runops-1.3.0/src/runops/core/__init__.py +0 -3
  377. runops-1.3.0/src/runops/core/campaign.py +0 -156
  378. runops-1.3.0/src/runops/core/case.py +0 -310
  379. runops-1.3.0/src/runops/core/codex_plugin.py +0 -203
  380. runops-1.3.0/src/runops/core/demo/__init__.py +0 -31
  381. runops-1.3.0/src/runops/core/demo/importer.py +0 -676
  382. runops-1.3.0/src/runops/core/demo/replay.py +0 -382
  383. runops-1.3.0/src/runops/core/demo/sanitize.py +0 -184
  384. runops-1.3.0/src/runops/core/discovery.py +0 -215
  385. runops-1.3.0/src/runops/core/environment/__init__.py +0 -19
  386. runops-1.3.0/src/runops/core/environment/runtime.py +0 -291
  387. runops-1.3.0/src/runops/core/event_log.py +0 -445
  388. runops-1.3.0/src/runops/core/exceptions.py +0 -101
  389. runops-1.3.0/src/runops/core/knowledge/__init__.py +0 -32
  390. runops-1.3.0/src/runops/core/knowledge/facts.py +0 -307
  391. runops-1.3.0/src/runops/core/knowledge/insights.py +0 -131
  392. runops-1.3.0/src/runops/core/knowledge/paths.py +0 -39
  393. runops-1.3.0/src/runops/core/knowledge_source/__init__.py +0 -85
  394. runops-1.3.0/src/runops/core/knowledge_source/config.py +0 -284
  395. runops-1.3.0/src/runops/core/knowledge_source/discovery.py +0 -50
  396. runops-1.3.0/src/runops/core/knowledge_source/entrypoints.py +0 -162
  397. runops-1.3.0/src/runops/core/knowledge_source/imports.py +0 -126
  398. runops-1.3.0/src/runops/core/knowledge_source/paths.py +0 -103
  399. runops-1.3.0/src/runops/core/knowledge_source/render.py +0 -115
  400. runops-1.3.0/src/runops/core/knowledge_source/sync.py +0 -150
  401. runops-1.3.0/src/runops/core/knowledge_source/validation.py +0 -205
  402. runops-1.3.0/src/runops/core/manifest.py +0 -300
  403. runops-1.3.0/src/runops/core/models/__init__.py +0 -1
  404. runops-1.3.0/src/runops/core/models/analysis.py +0 -113
  405. runops-1.3.0/src/runops/core/models/knowledge.py +0 -76
  406. runops-1.3.0/src/runops/core/models/knowledge_source.py +0 -92
  407. runops-1.3.0/src/runops/core/models/publication.py +0 -47
  408. runops-1.3.0/src/runops/core/models/run_creation.py +0 -46
  409. runops-1.3.0/src/runops/core/project.py +0 -174
  410. runops-1.3.0/src/runops/core/project_files.py +0 -6
  411. runops-1.3.0/src/runops/core/provenance.py +0 -147
  412. runops-1.3.0/src/runops/core/repository.py +0 -11
  413. runops-1.3.0/src/runops/core/research/__init__.py +0 -10
  414. runops-1.3.0/src/runops/core/research/workspace.py +0 -76
  415. runops-1.3.0/src/runops/core/run/__init__.py +0 -25
  416. runops-1.3.0/src/runops/core/run/derivation.py +0 -130
  417. runops-1.3.0/src/runops/core/run/records.py +0 -170
  418. runops-1.3.0/src/runops/core/site/__init__.py +0 -19
  419. runops-1.3.0/src/runops/core/site/profile.py +0 -374
  420. runops-1.3.0/src/runops/core/state.py +0 -300
  421. runops-1.3.0/src/runops/core/survey/__init__.py +0 -31
  422. runops-1.3.0/src/runops/core/survey/config.py +0 -513
  423. runops-1.3.0/src/runops/core/survey/naming.py +0 -157
  424. runops-1.3.0/src/runops/core/upgrade_chain.py +0 -167
  425. runops-1.3.0/src/runops/core/validation/__init__.py +0 -40
  426. runops-1.3.0/src/runops/harness/__init__.py +0 -47
  427. runops-1.3.0/src/runops/harness/_adapters.py +0 -62
  428. runops-1.3.0/src/runops/harness/_plugins.py +0 -65
  429. runops-1.3.0/src/runops/harness/_skills.py +0 -67
  430. runops-1.3.0/src/runops/harness/builder.py +0 -460
  431. runops-1.3.0/src/runops/harness/claude.py +0 -231
  432. runops-1.3.0/src/runops/harness/codex.py +0 -48
  433. runops-1.3.0/src/runops/jobgen/__init__.py +0 -3
  434. runops-1.3.0/src/runops/jobgen/generator.py +0 -324
  435. runops-1.3.0/src/runops/launchers/__init__.py +0 -17
  436. runops-1.3.0/src/runops/launchers/base.py +0 -313
  437. runops-1.3.0/src/runops/launchers/mpiexec.py +0 -131
  438. runops-1.3.0/src/runops/launchers/mpirun.py +0 -132
  439. runops-1.3.0/src/runops/launchers/srun.py +0 -126
  440. runops-1.3.0/src/runops/mcp/__init__.py +0 -7
  441. runops-1.3.0/src/runops/mcp/_tools/__init__.py +0 -1
  442. runops-1.3.0/src/runops/mcp/_tools/analysis.py +0 -327
  443. runops-1.3.0/src/runops/mcp/_tools/common.py +0 -366
  444. runops-1.3.0/src/runops/mcp/_tools/project.py +0 -338
  445. runops-1.3.0/src/runops/mcp/_tools/provider.py +0 -74
  446. runops-1.3.0/src/runops/mcp/_tools/publication.py +0 -235
  447. runops-1.3.0/src/runops/mcp/_tools/runs.py +0 -241
  448. runops-1.3.0/src/runops/mcp/_tools/scheduler.py +0 -239
  449. runops-1.3.0/src/runops/mcp/registry.py +0 -422
  450. runops-1.3.0/src/runops/mcp/safety.py +0 -71
  451. runops-1.3.0/src/runops/mcp/schemas.py +0 -152
  452. runops-1.3.0/src/runops/mcp/server.py +0 -287
  453. runops-1.3.0/src/runops/mcp/tools.py +0 -49
  454. runops-1.3.0/src/runops/sites/camphor.md +0 -123
  455. runops-1.3.0/src/runops/sites/camphor.toml +0 -47
  456. runops-1.3.0/src/runops/slurm/__init__.py +0 -3
  457. runops-1.3.0/src/runops/slurm/query.py +0 -384
  458. runops-1.3.0/src/runops/slurm/submit.py +0 -239
  459. runops-1.3.0/src/runops/templates/README.md +0 -38
  460. runops-1.3.0/src/runops/templates/__init__.py +0 -29
  461. runops-1.3.0/src/runops/templates/adapters/beach/agent_guide.md +0 -39
  462. runops-1.3.0/src/runops/templates/adapters/beach/beach.toml +0 -19
  463. runops-1.3.0/src/runops/templates/adapters/beach/case.toml +0 -16
  464. runops-1.3.0/src/runops/templates/adapters/beach/summarize.py +0 -272
  465. runops-1.3.0/src/runops/templates/adapters/emses/agent_guide.md +0 -42
  466. runops-1.3.0/src/runops/templates/adapters/emses/case.toml +0 -18
  467. runops-1.3.0/src/runops/templates/adapters/emses/plasma.toml +0 -118
  468. runops-1.3.0/src/runops/templates/adapters/emses/summarize.py +0 -413
  469. runops-1.3.0/src/runops/templates/adapters/generic/case.toml.j2 +0 -13
  470. runops-1.3.0/src/runops/templates/adapters/generic/summarize.py +0 -21
  471. runops-1.3.0/src/runops/templates/demo/replay.html.j2 +0 -1593
  472. runops-1.3.0/src/runops/templates/harness/claude/CLAUDE.md.j2 +0 -7
  473. runops-1.3.0/src/runops/templates/harness/claude/rules/cookbook.md.j2 +0 -6
  474. runops-1.3.0/src/runops/templates/harness/claude/rules/plan-before-act.md +0 -16
  475. runops-1.3.0/src/runops/templates/harness/claude/rules/runops-workflow.md +0 -53
  476. runops-1.3.0/src/runops/templates/harness/codex/AGENTS.md.j2 +0 -21
  477. runops-1.3.0/src/runops/templates/harness/codex/README.md.j2 +0 -127
  478. runops-1.3.0/src/runops/templates/harness/codex/config.toml.j2 +0 -21
  479. runops-1.3.0/src/runops/templates/harness/codex/rules/runops.rules +0 -160
  480. runops-1.3.0/src/runops/templates/harness/shared/cases.md +0 -22
  481. runops-1.3.0/src/runops/templates/harness/shared/partials/agent-body.md.j2 +0 -155
  482. runops-1.3.0/src/runops/templates/harness/shared/rules/cookbook.md.j2 +0 -19
  483. runops-1.3.0/src/runops/templates/harness/shared/runs.md +0 -25
  484. runops-1.3.0/src/runops/templates/knowledge/runops/agent-user-guide.md +0 -60
  485. runops-1.3.0/src/runops/templates/scaffold/campaign.toml.j2 +0 -10
  486. runops-1.3.0/src/runops/templates/scaffold/facts.toml +0 -2
  487. runops-1.3.0/src/runops/templates/scaffold/gitignore.txt +0 -48
  488. runops-1.3.0/src/runops/templates/scaffold/materials/README.md +0 -38
  489. runops-1.3.0/src/runops/templates/scaffold/materials/index.toml +0 -12
  490. runops-1.3.0/src/runops/templates/scaffold/research/CURRENT.md +0 -29
  491. runops-1.3.0/src/runops/templates/scaffold/research/journal/active.md +0 -2
  492. runops-1.3.0/src/runops/templates/scaffold/vscode_settings.json +0 -57
  493. runops-1.3.0/src/runops/templates/skills/analyze/SKILL.md +0 -39
  494. runops-1.3.0/src/runops/templates/skills/check-status/SKILL.md +0 -52
  495. runops-1.3.0/src/runops/templates/skills/cleanup/SKILL.md +0 -38
  496. runops-1.3.0/src/runops/templates/skills/create-run/SKILL.md +0 -49
  497. runops-1.3.0/src/runops/templates/skills/debug-failed/SKILL.md +0 -35
  498. runops-1.3.0/src/runops/templates/skills/learn/SKILL.md +0 -26
  499. runops-1.3.0/src/runops/templates/skills/migrate-runops/SKILL.md +0 -55
  500. runops-1.3.0/src/runops/templates/skills/new-case/SKILL.md +0 -40
  501. runops-1.3.0/src/runops/templates/skills/patch-runops/SKILL.md +0 -47
  502. runops-1.3.0/src/runops/templates/skills/release/SKILL.md +0 -39
  503. runops-1.3.0/src/runops/templates/skills/research-workspace/SKILL.md +0 -30
  504. runops-1.3.0/src/runops/templates/skills/run-all/SKILL.md +0 -58
  505. runops-1.3.0/src/runops/templates/skills/runops-reference/SKILL.md +0 -55
  506. runops-1.3.0/src/runops/templates/skills/setup-campaign/SKILL.md +0 -47
  507. runops-1.3.0/src/runops/templates/skills/setup-env/SKILL.md +0 -28
  508. runops-1.3.0/src/runops/templates/skills/setup-plugins/SKILL.md +0 -58
  509. runops-1.3.0/src/runops/templates/skills/setup-runops/SKILL.md +0 -80
  510. runops-1.3.0/src/runops/templates/skills/summarize-script/SKILL.md +0 -51
  511. runops-1.3.0/src/runops/templates/skills/survey-design/SKILL.md +0 -48
  512. runops-1.3.0/src/runops/templates/skills/update-runops/SKILL.md +0 -51
  513. runops-1.3.0/src/runops/templates/survey.toml.j2 +0 -36
  514. runops-1.3.0/tests/__init__.py +0 -0
  515. runops-1.3.0/tests/conftest.py +0 -105
  516. runops-1.3.0/tests/factories.py +0 -121
  517. runops-1.3.0/tests/fixtures/sample_case.toml +0 -25
  518. runops-1.3.0/tests/fixtures/sample_launchers.toml +0 -16
  519. runops-1.3.0/tests/fixtures/sample_manifest.toml +0 -40
  520. runops-1.3.0/tests/fixtures/sample_runops.toml +0 -3
  521. runops-1.3.0/tests/fixtures/sample_simulators.toml +0 -6
  522. runops-1.3.0/tests/fixtures/sample_survey.toml +0 -25
  523. runops-1.3.0/tests/test_adapters/__init__.py +0 -0
  524. runops-1.3.0/tests/test_adapters/test_beach.py +0 -543
  525. runops-1.3.0/tests/test_adapters/test_contract.py +0 -293
  526. runops-1.3.0/tests/test_adapters/test_emses.py +0 -499
  527. runops-1.3.0/tests/test_adapters/test_generic.py +0 -574
  528. runops-1.3.0/tests/test_adapters/test_provenance.py +0 -127
  529. runops-1.3.0/tests/test_adapters/test_registry.py +0 -328
  530. runops-1.3.0/tests/test_adapters/test_runtime.py +0 -196
  531. runops-1.3.0/tests/test_adapters/test_toml_utils.py +0 -83
  532. runops-1.3.0/tests/test_application/__init__.py +0 -1
  533. runops-1.3.0/tests/test_application/test_action_contract.py +0 -316
  534. runops-1.3.0/tests/test_application/test_actions.py +0 -1643
  535. runops-1.3.0/tests/test_application/test_analysis.py +0 -215
  536. runops-1.3.0/tests/test_application/test_analysis_comparison.py +0 -93
  537. runops-1.3.0/tests/test_application/test_analysis_story.py +0 -547
  538. runops-1.3.0/tests/test_application/test_capability_facades.py +0 -19
  539. runops-1.3.0/tests/test_application/test_context.py +0 -608
  540. runops-1.3.0/tests/test_application/test_coverage_policy.py +0 -177
  541. runops-1.3.0/tests/test_application/test_harness_upgrade.py +0 -166
  542. runops-1.3.0/tests/test_application/test_lint.py +0 -443
  543. runops-1.3.0/tests/test_application/test_migrations.py +0 -169
  544. runops-1.3.0/tests/test_application/test_plugins.py +0 -724
  545. runops-1.3.0/tests/test_application/test_publication.py +0 -239
  546. runops-1.3.0/tests/test_application/test_readiness.py +0 -181
  547. runops-1.3.0/tests/test_application/test_research_workspace.py +0 -198
  548. runops-1.3.0/tests/test_application/test_retry.py +0 -136
  549. runops-1.3.0/tests/test_application/test_run_creation.py +0 -719
  550. runops-1.3.0/tests/test_application/test_story_audit.py +0 -128
  551. runops-1.3.0/tests/test_application/test_story_render.py +0 -113
  552. runops-1.3.0/tests/test_application/test_story_schema.py +0 -279
  553. runops-1.3.0/tests/test_application/test_story_sources.py +0 -261
  554. runops-1.3.0/tests/test_application/test_submission.py +0 -1057
  555. runops-1.3.0/tests/test_application/test_submission_parity.py +0 -252
  556. runops-1.3.0/tests/test_architecture/test_core_import_boundaries.py +0 -105
  557. runops-1.3.0/tests/test_cli/__init__.py +0 -0
  558. runops-1.3.0/tests/test_cli/test_analyze.py +0 -1105
  559. runops-1.3.0/tests/test_cli/test_clone.py +0 -241
  560. runops-1.3.0/tests/test_cli/test_config.py +0 -183
  561. runops-1.3.0/tests/test_cli/test_context_cli.py +0 -75
  562. runops-1.3.0/tests/test_cli/test_create.py +0 -560
  563. runops-1.3.0/tests/test_cli/test_dashboard.py +0 -233
  564. runops-1.3.0/tests/test_cli/test_demo.py +0 -297
  565. runops-1.3.0/tests/test_cli/test_event_log.py +0 -143
  566. runops-1.3.0/tests/test_cli/test_extend.py +0 -344
  567. runops-1.3.0/tests/test_cli/test_history.py +0 -103
  568. runops-1.3.0/tests/test_cli/test_init.py +0 -958
  569. runops-1.3.0/tests/test_cli/test_init_bootstrap.py +0 -192
  570. runops-1.3.0/tests/test_cli/test_init_github_auth.py +0 -131
  571. runops-1.3.0/tests/test_cli/test_init_helpers.py +0 -245
  572. runops-1.3.0/tests/test_cli/test_init_scaffold.py +0 -119
  573. runops-1.3.0/tests/test_cli/test_jobs.py +0 -150
  574. runops-1.3.0/tests/test_cli/test_knowledge.py +0 -828
  575. runops-1.3.0/tests/test_cli/test_knowledge_source_helpers.py +0 -133
  576. runops-1.3.0/tests/test_cli/test_lint.py +0 -97
  577. runops-1.3.0/tests/test_cli/test_list.py +0 -235
  578. runops-1.3.0/tests/test_cli/test_log.py +0 -191
  579. runops-1.3.0/tests/test_cli/test_main.py +0 -249
  580. runops-1.3.0/tests/test_cli/test_manage.py +0 -675
  581. runops-1.3.0/tests/test_cli/test_mcp.py +0 -54
  582. runops-1.3.0/tests/test_cli/test_migrate.py +0 -80
  583. runops-1.3.0/tests/test_cli/test_new.py +0 -220
  584. runops-1.3.0/tests/test_cli/test_plugins.py +0 -362
  585. runops-1.3.0/tests/test_cli/test_regenerate.py +0 -157
  586. runops-1.3.0/tests/test_cli/test_research.py +0 -139
  587. runops-1.3.0/tests/test_cli/test_retry.py +0 -175
  588. runops-1.3.0/tests/test_cli/test_setup.py +0 -287
  589. runops-1.3.0/tests/test_cli/test_status.py +0 -532
  590. runops-1.3.0/tests/test_cli/test_submit.py +0 -511
  591. runops-1.3.0/tests/test_cli/test_update.py +0 -413
  592. runops-1.3.0/tests/test_cli/test_update_harness.py +0 -634
  593. runops-1.3.0/tests/test_cli/test_update_notice.py +0 -139
  594. runops-1.3.0/tests/test_cli/test_update_refs.py +0 -198
  595. runops-1.3.0/tests/test_core/__init__.py +0 -0
  596. runops-1.3.0/tests/test_core/test_case.py +0 -90
  597. runops-1.3.0/tests/test_core/test_demo_import.py +0 -289
  598. runops-1.3.0/tests/test_core/test_demo_replay.py +0 -218
  599. runops-1.3.0/tests/test_core/test_discovery.py +0 -153
  600. runops-1.3.0/tests/test_core/test_environment.py +0 -215
  601. runops-1.3.0/tests/test_core/test_event_log.py +0 -208
  602. runops-1.3.0/tests/test_core/test_knowledge_source.py +0 -786
  603. runops-1.3.0/tests/test_core/test_knowledge_source_render.py +0 -212
  604. runops-1.3.0/tests/test_core/test_knowledge_source_validation.py +0 -157
  605. runops-1.3.0/tests/test_core/test_manifest.py +0 -302
  606. runops-1.3.0/tests/test_core/test_project.py +0 -113
  607. runops-1.3.0/tests/test_core/test_provenance.py +0 -96
  608. runops-1.3.0/tests/test_core/test_repository.py +0 -11
  609. runops-1.3.0/tests/test_core/test_research_workspace.py +0 -77
  610. runops-1.3.0/tests/test_core/test_run.py +0 -112
  611. runops-1.3.0/tests/test_core/test_schemas.py +0 -179
  612. runops-1.3.0/tests/test_core/test_site.py +0 -319
  613. runops-1.3.0/tests/test_core/test_state.py +0 -217
  614. runops-1.3.0/tests/test_core/test_survey.py +0 -386
  615. runops-1.3.0/tests/test_core/test_upgrade_chain.py +0 -50
  616. runops-1.3.0/tests/test_e2e/test_bootstrap.py +0 -479
  617. runops-1.3.0/tests/test_e2e/test_golden_path.py +0 -181
  618. runops-1.3.0/tests/test_harness/test_claude.py +0 -61
  619. runops-1.3.0/tests/test_harness/test_codex.py +0 -360
  620. runops-1.3.0/tests/test_harness/test_development_guidance.py +0 -253
  621. runops-1.3.0/tests/test_launchers/__init__.py +0 -0
  622. runops-1.3.0/tests/test_launchers/test_launcher_base.py +0 -184
  623. runops-1.3.0/tests/test_launchers/test_mpiexec.py +0 -83
  624. runops-1.3.0/tests/test_launchers/test_mpirun.py +0 -85
  625. runops-1.3.0/tests/test_launchers/test_srun.py +0 -99
  626. runops-1.3.0/tests/test_mcp/__init__.py +0 -1
  627. runops-1.3.0/tests/test_mcp/test_registry.py +0 -78
  628. runops-1.3.0/tests/test_mcp/test_server.py +0 -369
  629. runops-1.3.0/tests/test_mcp/test_tools.py +0 -579
  630. runops-1.3.0/tests/test_slurm/__init__.py +0 -0
  631. runops-1.3.0/tests/test_slurm/test_jobgen.py +0 -603
  632. runops-1.3.0/tests/test_slurm/test_slurm_query.py +0 -339
  633. runops-1.3.0/tests/test_slurm/test_slurm_submit.py +0 -279
  634. runops-1.3.0/uv.lock +0 -1375
  635. {runops-1.3.0 → runops-2.0.0}/.agents/skills/python-package-refactor/SKILL.md +0 -0
  636. {runops-1.3.0 → runops-2.0.0}/.agents/skills/python-package-refactor/agents/openai.yaml +0 -0
  637. {runops-1.3.0 → runops-2.0.0}/.agents/skills/python-package-refactor/examples/refactor-request.md +0 -0
  638. {runops-1.3.0 → runops-2.0.0}/.agents/skills/python-package-refactor/references/anti-patterns.md +0 -0
  639. {runops-1.3.0 → runops-2.0.0}/.agents/skills/python-package-refactor/references/api-compatibility.md +0 -0
  640. {runops-1.3.0 → runops-2.0.0}/.agents/skills/python-package-refactor/references/packaging-modernization.md +0 -0
  641. {runops-1.3.0 → runops-2.0.0}/.agents/skills/python-package-refactor/references/refactor-playbook.md +0 -0
  642. {runops-1.3.0 → runops-2.0.0}/.agents/skills/python-package-refactor/references/verification.md +0 -0
  643. {runops-1.3.0 → runops-2.0.0}/.agents/skills/python-package-refactor/scripts/api_surface_snapshot.py +0 -0
  644. {runops-1.3.0 → runops-2.0.0}/.agents/skills/python-package-refactor/scripts/import_smoke.py +0 -0
  645. {runops-1.3.0 → runops-2.0.0}/.agents/skills/python-package-refactor/scripts/inspect_python_package.py +0 -0
  646. {runops-1.3.0 → runops-2.0.0}/.agents/skills/python-package-refactor/scripts/refactor_quality_gate.py +0 -0
  647. {runops-1.3.0 → runops-2.0.0}/.claude/settings.json +0 -0
  648. {runops-1.3.0 → runops-2.0.0}/.codex/config.toml +0 -0
  649. {runops-1.3.0 → runops-2.0.0}/.dockerignore +0 -0
  650. {runops-1.3.0 → runops-2.0.0}/.gitattributes +0 -0
  651. {runops-1.3.0 → runops-2.0.0}/.gitignore +0 -0
  652. {runops-1.3.0 → runops-2.0.0}/.pre-commit-config.yaml +0 -0
  653. {runops-1.3.0 → runops-2.0.0}/.vscode/settings.json +0 -0
  654. {runops-1.3.0 → runops-2.0.0}/LICENSE +0 -0
  655. {runops-1.3.0/src/runops/sites → runops-2.0.0/tests}/__init__.py +0 -0
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: check
3
+ description: "Run runops quality gates (ruff format, ruff check, mypy, pytest with branch coverage) after code changes, and the extra checks for filesystem, adapter, or migration changes. Report pass/fail per step and fix failures."
4
+ ---
5
+
6
+ # 品質チェック
7
+
8
+ ## 常に実行する
9
+
10
+ ```bash
11
+ uv run ruff format --check src/ tests/
12
+ uv run ruff check src/ tests/
13
+ uv run mypy src/
14
+ uv run pytest -q --cov=runops --cov-branch --cov-fail-under=80
15
+ ```
16
+
17
+ pytest は 60 秒以内が目標(SPEC §13.1)。Slurm は `tests/conftest.py` の `FakeSlurm` で
18
+ mock する。実際の `sbatch` を呼ぶテストを書かない。
19
+
20
+ ## 変更内容に応じて追加する
21
+
22
+ | 変更 | 追加の確認 |
23
+ |---|---|
24
+ | rename / move / archive / 作成など filesystem 操作 | `uv run pytest -q -p no:cacheprovider --basetemp=/LARGE0/gr20001/b36291/claude_scratch/pytest-lustre` で Lustre 上でも通す(`RENAME_NOREPLACE` が EINVAL になる経路) |
25
+ | adapter 解決、`.venv` の entry point、skill 展開 | `tests/test_skills.py` と `tests/test_adapters.py`。必要なら scratch project で `uv venv` + `uv pip install -e <simulator>` して `runo doctor` |
26
+ | `migrate-v1` | `tests/test_migrate.py`。実 project には `runo migrate-v1 --dry-run` だけを実行し、適用は `work/` を除いたコピーで行う |
27
+ | job.sh 生成 | `tests/golden/*.sh` との差分を目視し、意図した変更なら `UPDATE_GOLDEN=1 uv run pytest tests/test_jobgen.py` |
28
+ | project に展開する skill / AGENTS.md block | `tests/test_skills.py`(行数上限)と `sync-docs` skill |
29
+ | 開発ハーネス | `tests/test_dev_harness.py` |
30
+
31
+ ## 報告
32
+
33
+ 各ステップの pass / fail を示し、失敗はエラー出力と修正内容を添える。
34
+ `ruff format` の違反は `uv run ruff format src/ tests/` で直してよい。
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: improve-harness
3
+ description: "Audit or improve the runops agent harnesses: the development harness of this repository (AGENTS.md, .agents/skills, .claude, .codex) and the project harness runops generates (src/runops/harness.py, src/runops/skills). Use when instructions drift from the code, repeat friction appears, or a new workflow needs a skill."
4
+ ---
5
+
6
+ # ハーネスの改善
7
+
8
+ runops には 2 つのハーネスがある。どちらを直すかを先に決める。
9
+
10
+ | ハーネス | 正本 | 読む人 |
11
+ |---|---|---|
12
+ | 開発ハーネス | `AGENTS.md`、`.agents/skills/*/SKILL.md`、`.claude/rules/*.md`、`.codex/rules/runops.rules`、`.claude/settings.json`、`.codex/config.toml` | runops を開発するエージェント |
13
+ | project ハーネス | `src/runops/harness.py`(AGENTS.md の管理 block)、`src/runops/skills/*/SKILL.md` | runops を使う project のエージェント |
14
+
15
+ ## 開発ハーネスの構造
16
+
17
+ - skill の正本は `.agents/skills/<name>/SKILL.md`(Codex が読む)。`.claude/skills/<name>/SKILL.md`
18
+ は同じ `name` / `description` の frontmatter と、正本を読むよう指示する 1 文だけを持つ。
19
+ - 専門 agent(`spec-reviewer`)も同様に、`.claude/agents/*.md` と `.codex/agents/*.toml` は
20
+ `.agents/skills/<name>/SKILL.md` を指す入口に留める。
21
+ - 規約の正本は `.claude/rules/*.md`(Claude Code が自動で読む)。Codex 向けには `AGENTS.md` の表から
22
+ 同じ file を参照する。`.codex/rules/` には execpolicy の `runops.rules` だけを置く。
23
+ - `AGENTS.md` は 80 行程度の入口に保つ。`CLAUDE.md` は `@AGENTS.md` だけ。
24
+ - `tests/test_dev_harness.py` が、入口と正本の対応、参照先の存在、AGENTS.md の長さを検査する。
25
+
26
+ ## 進め方
27
+
28
+ 1. 摩擦を具体的に特定する(どの作業で、何を誤り、何を読み直したか)。
29
+ 2. 直す場所を 1 か所に決める。恒久規約は rules、繰り返す手順は skill、project の利用者向けは
30
+ project ハーネス。同じ内容を 2 か所に書かない。
31
+ 3. skill を足すときは description に発火条件を書き、手順は判断に必要な分だけにする。
32
+ `.claude/skills/` に入口を作る。
33
+ 4. project ハーネスを変えたら `sync-docs` に従い、SPEC §8.3 / §10 と README も確認する。
34
+ 5. `uv run pytest -q tests/test_dev_harness.py tests/test_skills.py` を通す。
@@ -5,7 +5,7 @@ description: "Prepare and publish a new runops release from main. Bump version,
5
5
 
6
6
  # runops リリース
7
7
 
8
- `/release` は新しいバージョンの runops をリリースするスキル。
8
+ 新しいバージョンの runops をリリースするスキル(Codex では `$release`、Claude Code では `/release`)。
9
9
 
10
10
  ## リリースノート方針
11
11
 
@@ -17,16 +17,17 @@ description: "Prepare and publish a new runops release from main. Bump version,
17
17
  ## 使い方
18
18
 
19
19
  ```
20
- /release patch # 0.2.1 -> 0.2.2
21
- /release minor # 0.2.1 -> 0.3.0
22
- /release major # 0.2.1 -> 1.0.0
23
- /release 0.3.0 # 明示的にバージョン指定
20
+ release patch # 0.2.1 -> 0.2.2
21
+ release minor # 0.2.1 -> 0.3.0
22
+ release major # 0.2.1 -> 1.0.0
23
+ release 0.3.0 # 明示的にバージョン指定
24
24
  ```
25
25
 
26
26
  引数なしで呼んだ場合は、変更内容から bump レベルを自動判定し、
27
27
  main release commit → main push → CI 確認 → tag → GitHub Release → publish 確認まで一気通貫で実行する。
28
28
 
29
- 現在は個人開発のため main-first。release commit は `main` 上で作り、
29
+ 現在は個人開発のため main-first。v2 の作業 branch(`v2`)は、最初の 2.0.0 リリース前に
30
+ `main` へ fast-forward または merge しておく。release commit は `main` 上で作り、
30
31
  品質ゲートと CI green を確認してから、その release commit に tag を切る。
31
32
  `--force`、non-fast-forward push、`--no-verify` は使わない。
32
33
 
@@ -42,6 +43,7 @@ git status --porcelain
42
43
  uv run pytest tests/ -x -q
43
44
 
44
45
  # lint / type check
46
+ uv run ruff format --check src/ tests/
45
47
  uv run ruff check src/ tests/
46
48
  uv run mypy src/
47
49
  ```
@@ -0,0 +1,35 @@
1
+ ---
2
+ name: simulator-adapter
3
+ description: "Add or update runops v2 support in a simulator's own Python package (runops.adapters entry point, agent_context_dir packaging, tests), or adjust runops.legacy_adapters. Use when a simulator such as MPIEMSES3D, BEACH, or a new code needs to work with runops."
4
+ ---
5
+
6
+ # simulator 側の adapter
7
+
8
+ runops 本体には simulator 固有の adapter を置かない(SPEC §8.1)。adapter は simulator の
9
+ Python package に置き、`runops.adapters` entry point で公開する。
10
+
11
+ ## 手順
12
+
13
+ 1. simulator repo の規約(AGENTS.md、テスト、ログインノードでの実行可否)を読み、作業中の branch を
14
+ 壊さないよう `git worktree add -b <branch> <scratch> main` で作業する。
15
+ 2. `<package>/runops_adapter.py` に `Adapter` を書く。runops は関数内で遅延 import し、
16
+ module の import 時に runops を要求しない。契約は `docs/adapter.md`。
17
+ - `render_inputs` は `runops.adapters.toml_override` で dotted key を適用する
18
+ - `build_command` は run_dir を cwd とした argv、`detect_status` は job 終了後の判定
19
+ - 既存の移植元は `src/runops/legacy_adapters/<name>.py`
20
+ 3. `pyproject.toml` に entry point を足す:
21
+ `[project.entry-points."runops.adapters"] <name> = "<package>.runops_adapter:Adapter"`
22
+ 4. skill と reference を wheel に入れ、`agent_context_dir()` で返す。候補は
23
+ `<package>/agent_context`(wheel)→ repo の `plugins/<name>-context`(source checkout)の順。
24
+ - package dir の外にある場合: setuptools の `package-dir` で data-only package に対応付ける
25
+ (BEACH: `"beach.agent_context" = "plugins/beach-context"`)
26
+ - 配布 workflow が package をコピーして build する場合: build 前に stage する script
27
+ (MPIEMSES3D: `tools/stage_agent_context.py`)
28
+ 5. テスト: `build_command`、`detect_status`、`summarize`、`agent_context_dir` は runops 無しで、
29
+ `render_inputs` は runops があるときだけ(skip)。wheel の中身を確認できるなら
30
+ `agent_context/skills/*/SKILL.md` と `entry_points.txt` の `[runops.adapters]` を見る。
31
+ 6. E2E: scratch project で `uv venv` → `uv pip install --no-deps <wheel or -e path>` →
32
+ `runo init <name> --no-install` → `runo doctor`(`resolved via entry-point`)→ skill 展開と
33
+ `runo new` の job.sh を確認する。
34
+ 7. entry point を持つ版が出たら、runops 側の `legacy_adapters/<name>.py` と
35
+ `ops/setup.py` の `KNOWN_PACKAGES` を見直す。
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: spec-reviewer
3
+ description: "Review runops changes against SPEC.md: design principles, command budget, manifest/state semantics, adapter contract, filesystem safety, and missing acceptance tests. Use before merging non-trivial changes."
4
+ ---
5
+
6
+ # SPEC レビュー
7
+
8
+ 毎回 `SPEC.md` を読み直す。正本は SPEC 本文と §14、実装、テストの順。
9
+
10
+ ## 観点
11
+
12
+ - **原則(§1.2)**: 作成をゲートしていないか。case / run / sweep 以外の永続 entity、ID 空間、
13
+ ledger を足していないか。simulator 固有の知識を runops 本体に入れていないか。
14
+ - **command(§7.3, §13.1)**: 数が 25 を超えないか。read-only と状態変更を同じ名前で兼ねていないか。
15
+ 破壊的操作が確認(`-y` 以外)を経るか。exit code が 0 / 1 / 2 の規約通りか。
16
+ - **manifest(§6)**: runops だけが書き、atomic write か。未知 field を落とさないか
17
+ (`Manifest` は dict を保持する)。状態遷移が `_TRANSITIONS` に沿うか。`run_dir` は project 相対か。
18
+ - **filesystem**: run の公開・移動は `move_noreplace`。別 filesystem へ黙ってコピーしない。
19
+ `runs/` 外や pinned を消さない。Lustre(NOREPLACE 非対応)でも正しいか。
20
+ - **adapter(§8)**: Protocol だけに依存し、任意 hook は `optional()` で呼ぶか。解決順
21
+ (entry point → `adapters/X.py` → generic)を変えていないか。
22
+ - **ops / cli 境界**: `ops/` は print / prompt せず、Slurm は runner 引数で注入されるか。
23
+ - **テスト**: SPEC §13.2 の受け入れ基準に対応するテストがあるか。失敗系(不正入力、既存 path、
24
+ Slurm 失敗、状態違い)も見ているか。
25
+
26
+ ## 報告
27
+
28
+ finding ごとに severity(Critical / Important / Minor)、file:line、根拠(SPEC の節か再現手順)、
29
+ 修正案を書く。推測だけで blocker にしない。style の好みは報告しない。
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: sync-docs
3
+ description: "Keep runops specs, user docs, and agent-facing text consistent after a change to commands, options, config fields, manifest fields, adapter contract, or project layout. Use before committing such a change."
4
+ ---
5
+
6
+ # 仕様と文書の同期
7
+
8
+ runops の挙動は複数の場所に書かれている。変更の種類から直す場所を決め、正本から順に直す。
9
+
10
+ | 変更 | 正本 | 追随させる場所 |
11
+ |---|---|---|
12
+ | command / option の追加・変更 | `SPEC.md` §7.3(先に更新。§13.1 の上限 25 を確認) | `docs/reference.md` の command 表、`src/runops/skills/runops-reference/SKILL.md`、`src/runops/harness.py` の `COMMANDS` |
13
+ | `runops.toml` / `case.toml` の field | `SPEC.md` §4, §5 | `docs/reference.md`、`config.py` / `case.py` の既知 key 集合 |
14
+ | manifest の field | `SPEC.md` §6.2 | `docs/reference.md` の manifest 表、`ops/migrate.py` の変換 |
15
+ | adapter 契約・skill 同梱 | `SPEC.md` §8 | `docs/adapter.md`、`adapters/base.py` の docstring、`legacy_adapters/` |
16
+ | エージェントの使い方・規則 | `src/runops/harness.py`(project の AGENTS.md block) | `src/runops/skills/*/SKILL.md`、README の依頼例 |
17
+ | 実装中の判断で SPEC 本文と違う結論になった | `SPEC.md` 本文を直し、§14 に理由を 1 行追加 | — |
18
+
19
+ ## 規則
20
+
21
+ - README は利用者向けで、人が覚えるコマンドは `runo init` だけという前提で書く。それ以外は
22
+ エージェントへの依頼例として書く。
23
+ - `docs/` は `reference.md` と `adapter.md` の 2 本だけ。ページを増やす前に既存ページの節で収める。
24
+ - project に展開する skill は各 60 行以内、AGENTS.md block は 120 行以内(テストあり)。
25
+ - 経緯は書かない(commit message と SPEC §14 に残す)。現在の挙動だけを書く。
26
+
27
+ ## 確認
28
+
29
+ ```bash
30
+ uv run pytest -q tests/test_skills.py tests/test_dev_harness.py
31
+ uv run runo --help
32
+ ```
33
+
34
+ `--help` の command 一覧と SPEC §7.3、`docs/reference.md` の表が一致することを確認する。
@@ -0,0 +1,7 @@
1
+ ---
2
+ name: spec-reviewer
3
+ description: "Review runops changes against SPEC.md: design principles, command budget, manifest/state semantics, adapter contract, filesystem safety, and missing acceptance tests. Use before merging non-trivial changes."
4
+ tools: Read, Grep, Glob, Bash
5
+ ---
6
+
7
+ Read `.agents/skills/spec-reviewer/SKILL.md` and review the requested change as it instructs. Do not edit files; report findings only.
@@ -0,0 +1,29 @@
1
+ # アーキテクチャ(runops v2)
2
+
3
+ 正本は `SPEC.md`。ここには実装時に守る境界だけを書く。
4
+
5
+ ## 層
6
+
7
+ ```text
8
+ cli.py ──> ops/* ──> config / project / manifest / case / runtime / jobgen / launchers / slurm / util
9
+ └─> adapters/ (base, registry, generic)
10
+ ```
11
+
12
+ - `cli.py`: 引数の解釈、確認 prompt、表示だけ。処理は `ops/` を呼ぶ。`RunopsError` の
13
+ `exit_code`(1: 実行時エラー、2: 使い方・設定)を `main()` が終了コードにする。
14
+ - `ops/`: command ごとの処理。print / prompt をしない。Slurm を呼ぶ関数は `runner` 引数を取り、
15
+ CLI は `slurm.default_runner` を呼び出し時に参照して渡す(テストは monkeypatch で差し替える)。
16
+ - 基盤 module は `ops/` と `cli.py` を import しない。`adapters/` は runops の他 module に依存しない
17
+ (`base.py` は `util.load_toml` のみ)。
18
+ - `legacy_adapters/` は registry に登録しない。`ops/migrate.py` と `ops/setup.py` がファイルとして
19
+ project にコピーするだけ。
20
+
21
+ ## 不変条件
22
+
23
+ - run directory が主単位、`manifest.toml` が正本。書き込みは `Manifest.save()`(atomic)。
24
+ `Manifest` は dict を保持し、知らない field を落とさない。
25
+ - run の発見は `runs/` 配下の走査。`.runops/index.toml` は捨ててよい cache。
26
+ - run の公開・移動は `util.move_noreplace`。`shutil.move` で別 filesystem へコピーしない。
27
+ - run id の採番と作成は `Project.id_lock()` の中で行い、staging は対象と同じ親 directory に置く。
28
+ - adapter の任意 hook は `registry.optional()` 経由で呼ぶ(Protocol を満たすだけの class も動く)。
29
+ - simulator 固有の知識(入力形式、完了判定、skill)を runops 本体に足さない。
@@ -0,0 +1,32 @@
1
+ # 開発ワークフロー
2
+
3
+ ## 品質ゲート
4
+
5
+ コミット前に `check` skill の手順を通す。CI(`.github/workflows/ci.yml`)も同じ
6
+ ruff format / ruff check / mypy / pytest(branch coverage 80%)を Python 3.10–3.13 で実行する。
7
+
8
+ ## コーディング
9
+
10
+ - Python 3.10+。`tomllib` は `runops.util.tomllib` を使う(3.10 は `tomli`)。
11
+ - 型ヒントを付ける(mypy は `disallow_untyped_defs`)。line length 100。
12
+ - 新しい command / option / field は先に `SPEC.md` を更新し、`sync-docs` skill の表に沿って
13
+ 文書と skill を揃える。command は合計 25 を超えない。
14
+ - 新しい永続 entity、ID 空間、ledger、作成前のゲートを足さない(SPEC §1.2)。
15
+
16
+ ## テスト
17
+
18
+ - 受け入れ基準(SPEC §13.2)ごとにテストがある。挙動を変えたら対応するテストを直す。
19
+ - CLI は `tests/conftest.py` の `cli` fixture(`runops.cli.main` を呼び exit code と出力を返す)、
20
+ Slurm は `fake_slurm`、project は `project_dir`(generic simulator と `demo` case)を使う。
21
+ - job.sh は `tests/golden/`、v1 移行は `tests/fixtures/v1-project/` を使う。
22
+ - 実際の Slurm、ネットワーク、計算ノードを必要とするテストを書かない。
23
+
24
+ ## Git
25
+
26
+ - 1 コミット 1 論理変更。message は英語の Conventional Commits(`feat:`, `fix:`, `docs:` ...)。
27
+ - main-first。大きな変更だけ branch を切る。`--no-verify`、`--force`、`git reset --hard` は使わない。
28
+ - コミットや push はユーザーの依頼があるときだけ行う。
29
+
30
+ ## リリース
31
+
32
+ `release` skill に従う。`pyproject.toml` と `src/runops/__init__.py` の version を同時に更新する。
@@ -0,0 +1,37 @@
1
+ # Gotchas
2
+
3
+ ## KUDPC の Lustre は RENAME_NOREPLACE に未対応
4
+
5
+ `/LARGE0`、`/LARGE1` では `renameat2(RENAME_NOREPLACE)` が EINVAL を返す。
6
+ `util.move_noreplace` は存在確認 + `rename` に落とす。`/tmp` 上のテストだけでは
7
+ この経路を通らないので、filesystem を触る変更は `--basetemp=/LARGE0/...` でも確認する。
8
+
9
+ ## importlib.metadata のキャッシュ
10
+
11
+ `.venv` の dist-info 一覧は directory の mtime でキャッシュされる。Lustre の mtime は秒単位のため、
12
+ 同じ秒に入れ替えた package を見落とす。`registry._entry_point` は探索前に
13
+ `importlib.invalidate_caches()` と `MetadataPathFinder.invalidate_caches()` を呼ぶ
14
+ (Python 3.10 では前者だけでは metadata のキャッシュが消えない)。`.pth`(editable install)を効かせるため
15
+ `sys.path.append` ではなく `site.addsitedir` を使う。
16
+
17
+ ## project ローカル adapter の module 名
18
+
19
+ `adapters/X.py` は `runops_project_adapters.X` として読み込まれる。同じ process で別 project を
20
+ 開くと `sys.modules` が上書きされる(テストでは問題にならないが、長寿命 process では注意)。
21
+
22
+ ## typer の `standalone_mode=False`
23
+
24
+ `main()` は `app(..., standalone_mode=False)` で呼ぶため、`typer.Exit` は例外ではなく戻り値の
25
+ 終了コードになる。`--version` の callback も同じ経路を通る。
26
+
27
+ ## ログインノードでの実行
28
+
29
+ pytest は軽量なのでログインノードで実行してよい。simulator の build(`runo build`、
30
+ `local_source`)や他 repo の重いテストは、各 repo の規約に従い計算ノード(`tssrun`)で行う。
31
+
32
+ ## v1 project を触るとき
33
+
34
+ 実運用の v1 project(例: `~/large1/project_dust_release`)には `runo migrate-v1 --dry-run` だけを
35
+ 実行する。適用は `work/`、`.venv`、`refs/`、`materials/` を除いたコピーで行う。v1 の
36
+ `.runops/work/<build>/src` は simulator repo の git worktree のことがある(migrate が
37
+ `git worktree repair` する)。
@@ -0,0 +1,6 @@
1
+ ---
2
+ name: check
3
+ description: "Run runops quality gates (ruff format, ruff check, mypy, pytest with branch coverage) after code changes, and the extra checks for filesystem, adapter, or migration changes. Report pass/fail per step and fix failures."
4
+ ---
5
+
6
+ Read `.agents/skills/check/SKILL.md` and follow it. That file is the single source for this skill; files it references are relative to `.agents/skills/check/`.
@@ -0,0 +1,6 @@
1
+ ---
2
+ name: improve-harness
3
+ description: "Audit or improve the runops agent harnesses: the development harness of this repository (AGENTS.md, .agents/skills, .claude, .codex) and the project harness runops generates (src/runops/harness.py, src/runops/skills). Use when instructions drift from the code, repeat friction appears, or a new workflow needs a skill."
4
+ ---
5
+
6
+ Read `.agents/skills/improve-harness/SKILL.md` and follow it. That file is the single source for this skill; files it references are relative to `.agents/skills/improve-harness/`.
@@ -0,0 +1,6 @@
1
+ ---
2
+ name: python-package-refactor
3
+ description: Safely refactor Python packages and libraries with repository inspection, public API preservation, import-boundary cleanup, packaging modernization, tests, typing, linting, and behavior-preserving code changes. Use when working on Python package architecture, module layout, pyproject/setup configuration, dependency boundaries, circular imports, API compatibility, large-module decomposition, or refactoring pull requests. Do not use for isolated Python snippets or unrelated bug fixes unless the user asks for package-level refactoring.
4
+ ---
5
+
6
+ Read `.agents/skills/python-package-refactor/SKILL.md` and follow it. That file is the single source for this skill; files it references are relative to `.agents/skills/python-package-refactor/`.
@@ -0,0 +1,6 @@
1
+ ---
2
+ name: release
3
+ description: "Prepare and publish a new runops release from main. Bump version, sync __init__.py, draft Japanese release notes, push main, tag the release commit, create GitHub Release, and verify PyPI publish."
4
+ ---
5
+
6
+ Read `.agents/skills/release/SKILL.md` and follow it. That file is the single source for this skill; files it references are relative to `.agents/skills/release/`.
@@ -0,0 +1,6 @@
1
+ ---
2
+ name: simulator-adapter
3
+ description: "Add or update runops v2 support in a simulator's own Python package (runops.adapters entry point, agent_context_dir packaging, tests), or adjust runops.legacy_adapters. Use when a simulator such as MPIEMSES3D, BEACH, or a new code needs to work with runops."
4
+ ---
5
+
6
+ Read `.agents/skills/simulator-adapter/SKILL.md` and follow it. That file is the single source for this skill; files it references are relative to `.agents/skills/simulator-adapter/`.
@@ -0,0 +1,6 @@
1
+ ---
2
+ name: spec-reviewer
3
+ description: "Review runops changes against SPEC.md: design principles, command budget, manifest/state semantics, adapter contract, filesystem safety, and missing acceptance tests. Use before merging non-trivial changes."
4
+ ---
5
+
6
+ Read `.agents/skills/spec-reviewer/SKILL.md` and follow it. That file is the single source for this skill; files it references are relative to `.agents/skills/spec-reviewer/`.
@@ -0,0 +1,6 @@
1
+ ---
2
+ name: sync-docs
3
+ description: "Keep runops specs, user docs, and agent-facing text consistent after a change to commands, options, config fields, manifest fields, adapter contract, or project layout. Use before committing such a change."
4
+ ---
5
+
6
+ Read `.agents/skills/sync-docs/SKILL.md` and follow it. That file is the single source for this skill; files it references are relative to `.agents/skills/sync-docs/`.
@@ -0,0 +1,25 @@
1
+ # Codex CLI harness — runops
2
+
3
+ runops 開発リポジトリ用の Codex 設定。Claude Code と同じ正本を共有する。
4
+
5
+ | 目的 | 正本 | Codex の入口 | Claude Code の入口 |
6
+ |---|---|---|---|
7
+ | project doc | `AGENTS.md` | `AGENTS.md` | `CLAUDE.md`(`@AGENTS.md`) |
8
+ | 規約 | `.claude/rules/*.md` | `AGENTS.md` の表から参照 | 自動で読まれる |
9
+ | 定型作業 | `.agents/skills/<name>/SKILL.md` | `$name` / 自動発火 | `.claude/skills/<name>/SKILL.md`(正本を指す入口) |
10
+ | 専門 agent | `.agents/skills/spec-reviewer/SKILL.md` | `.codex/agents/spec-reviewer.toml` | `.claude/agents/spec-reviewer.md` |
11
+ | 実行 policy | — | `.codex/config.toml`、`.codex/rules/runops.rules` | `.claude/settings.json` |
12
+
13
+ `tests/test_dev_harness.py` が入口と正本の対応を検査する。skill を足すときは
14
+ `.agents/skills/` に書き、`.claude/skills/` には同じ frontmatter の入口だけを置く。
15
+
16
+ `.codex/config.toml` は project を trusted に登録したときだけ読まれる:
17
+
18
+ ```toml
19
+ [projects."<このリポジトリの絶対パス>"]
20
+ trust_level = "trusted"
21
+ ```
22
+
23
+ この repository では unattended な保守作業を優先し、`sandbox_mode = "danger-full-access"`、
24
+ `approval_policy = "never"` を共有設定にしている。高コスト・不可逆な command は
25
+ `.codex/rules/runops.rules` で prompt / forbidden にする。
@@ -0,0 +1,6 @@
1
+ name = "spec-reviewer"
2
+ description = "Review runops changes against SPEC.md: design principles, command budget, manifest/state semantics, adapter contract, filesystem safety, and missing acceptance tests. Use before merging non-trivial changes."
3
+ developer_instructions = """
4
+ Read `.agents/skills/spec-reviewer/SKILL.md` and review the requested change as it instructs.
5
+ Do not edit files; report findings only.
6
+ """
@@ -0,0 +1,67 @@
1
+ # Codex execpolicy rules for the runops development repository.
2
+ #
3
+ # Only high-cost or irreversible command prefixes live here. Workflow guidance is
4
+ # in AGENTS.md, .claude/rules/*.md and .agents/skills/.
5
+
6
+ prefix_rule(
7
+ pattern = ["runo", "submit"],
8
+ decision = "prompt",
9
+ justification = "Submitting spends HPC allocation; confirm targets and resources first.",
10
+ match = ["runo submit R20261015-0001", "runo submit --all runs/case"],
11
+ )
12
+
13
+ prefix_rule(
14
+ pattern = ["uv", "run", "runo", "submit"],
15
+ decision = "prompt",
16
+ justification = "Submitting spends HPC allocation; confirm targets and resources first.",
17
+ match = ["uv run runo submit R20261015-0001"],
18
+ )
19
+
20
+ prefix_rule(
21
+ pattern = ["runo", "delete"],
22
+ decision = "prompt",
23
+ justification = "Deleting a run removes its directory.",
24
+ match = ["runo delete R20261015-0001"],
25
+ )
26
+
27
+ prefix_rule(
28
+ pattern = ["runo", "tidy", "--apply"],
29
+ decision = "prompt",
30
+ justification = "tidy --apply deletes or archives runs.",
31
+ match = ["runo tidy --apply", "runo tidy --apply --only expired-scratch"],
32
+ )
33
+
34
+ prefix_rule(
35
+ pattern = ["runo", "migrate-v1"],
36
+ decision = "prompt",
37
+ justification = "Migration rewrites a project; run --dry-run and review first.",
38
+ match = ["runo migrate-v1 -y"],
39
+ )
40
+
41
+ prefix_rule(
42
+ pattern = ["rm", "-rf"],
43
+ decision = "forbidden",
44
+ justification = "Avoid broad recursive deletion; use runo delete / tidy.",
45
+ match = ["rm -rf runs/case"],
46
+ )
47
+
48
+ prefix_rule(
49
+ pattern = ["git", "push", "origin", "main"],
50
+ decision = "allow",
51
+ justification = "runops is main-first; push only after local quality gates and when the user asked.",
52
+ match = ["git push origin main"],
53
+ )
54
+
55
+ prefix_rule(
56
+ pattern = ["git", "push", "--force"],
57
+ decision = "forbidden",
58
+ justification = "Force-pushing rewrites shared history.",
59
+ match = ["git push --force", "git push --force origin main"],
60
+ )
61
+
62
+ prefix_rule(
63
+ pattern = ["git", "reset", "--hard"],
64
+ decision = "forbidden",
65
+ justification = "Hard reset discards local work.",
66
+ match = ["git reset --hard", "git reset --hard HEAD~1"],
67
+ )