runops 1.2.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 (654) 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.2.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.2.0 → runops-2.0.0}/.github/workflows/ci.yml +1 -2
  27. {runops-1.2.0 → runops-2.0.0}/.github/workflows/publish.yml +1 -2
  28. {runops-1.2.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.2.0/.agents/skills/beach/SKILL.md +0 -54
  112. runops-1.2.0/.agents/skills/check/SKILL.md +0 -19
  113. runops-1.2.0/.agents/skills/emses/SKILL.md +0 -56
  114. runops-1.2.0/.agents/skills/implement-adapter/SKILL.md +0 -113
  115. runops-1.2.0/.agents/skills/implement-cli/SKILL.md +0 -33
  116. runops-1.2.0/.agents/skills/implement-core/SKILL.md +0 -45
  117. runops-1.2.0/.agents/skills/implement-launcher/SKILL.md +0 -130
  118. runops-1.2.0/.agents/skills/implement-slurm/SKILL.md +0 -104
  119. runops-1.2.0/.agents/skills/improve-harness/SKILL.md +0 -84
  120. runops-1.2.0/.agents/skills/release/SKILL.md +0 -175
  121. runops-1.2.0/.agents/skills/scaffold/SKILL.md +0 -104
  122. runops-1.2.0/.agents/skills/spec-reviewer/SKILL.md +0 -30
  123. runops-1.2.0/.agents/skills/test-module/SKILL.md +0 -20
  124. runops-1.2.0/.agents/skills/test-writer/SKILL.md +0 -31
  125. runops-1.2.0/.agents/skills/update-docs/SKILL.md +0 -76
  126. runops-1.2.0/.claude/agents/beach.md +0 -45
  127. runops-1.2.0/.claude/agents/emses.md +0 -46
  128. runops-1.2.0/.claude/agents/implement-adapter.md +0 -114
  129. runops-1.2.0/.claude/agents/implement-cli.md +0 -33
  130. runops-1.2.0/.claude/agents/implement-core.md +0 -44
  131. runops-1.2.0/.claude/agents/implement-launcher.md +0 -131
  132. runops-1.2.0/.claude/agents/implement-slurm.md +0 -105
  133. runops-1.2.0/.claude/agents/scaffold.md +0 -106
  134. runops-1.2.0/.claude/agents/spec-reviewer.md +0 -30
  135. runops-1.2.0/.claude/agents/test-writer.md +0 -31
  136. runops-1.2.0/.claude/rules/architecture.md +0 -73
  137. runops-1.2.0/.claude/rules/commands.md +0 -107
  138. runops-1.2.0/.claude/rules/dev-workflow.md +0 -60
  139. runops-1.2.0/.claude/rules/gotchas.md +0 -66
  140. runops-1.2.0/.claude/rules/knowledge-layer.md +0 -24
  141. runops-1.2.0/.claude/skills/check/SKILL.md +0 -19
  142. runops-1.2.0/.claude/skills/improve-harness/SKILL.md +0 -92
  143. runops-1.2.0/.claude/skills/python-package-refactor/SKILL.md +0 -128
  144. runops-1.2.0/.claude/skills/python-package-refactor/agents/openai.yaml +0 -3
  145. runops-1.2.0/.claude/skills/python-package-refactor/examples/refactor-request.md +0 -19
  146. runops-1.2.0/.claude/skills/python-package-refactor/references/anti-patterns.md +0 -14
  147. runops-1.2.0/.claude/skills/python-package-refactor/references/api-compatibility.md +0 -92
  148. runops-1.2.0/.claude/skills/python-package-refactor/references/packaging-modernization.md +0 -37
  149. runops-1.2.0/.claude/skills/python-package-refactor/references/refactor-playbook.md +0 -80
  150. runops-1.2.0/.claude/skills/python-package-refactor/references/verification.md +0 -65
  151. runops-1.2.0/.claude/skills/python-package-refactor/scripts/api_surface_snapshot.py +0 -506
  152. runops-1.2.0/.claude/skills/python-package-refactor/scripts/import_smoke.py +0 -179
  153. runops-1.2.0/.claude/skills/python-package-refactor/scripts/inspect_python_package.py +0 -681
  154. runops-1.2.0/.claude/skills/python-package-refactor/scripts/refactor_quality_gate.py +0 -453
  155. runops-1.2.0/.claude/skills/test-module/SKILL.md +0 -20
  156. runops-1.2.0/.claude/skills/update-docs/SKILL.md +0 -76
  157. runops-1.2.0/.codex/README.md +0 -137
  158. runops-1.2.0/.codex/agents/beach.toml +0 -61
  159. runops-1.2.0/.codex/agents/emses.toml +0 -62
  160. runops-1.2.0/.codex/agents/implement-adapter.toml +0 -111
  161. runops-1.2.0/.codex/agents/implement-cli.toml +0 -32
  162. runops-1.2.0/.codex/agents/implement-core.toml +0 -43
  163. runops-1.2.0/.codex/agents/implement-launcher.toml +0 -128
  164. runops-1.2.0/.codex/agents/implement-slurm.toml +0 -102
  165. runops-1.2.0/.codex/agents/scaffold.toml +0 -102
  166. runops-1.2.0/.codex/agents/spec-reviewer.toml +0 -29
  167. runops-1.2.0/.codex/agents/test-writer.toml +0 -30
  168. runops-1.2.0/.codex/rules/architecture.md +0 -73
  169. runops-1.2.0/.codex/rules/commands.md +0 -107
  170. runops-1.2.0/.codex/rules/dev-workflow.md +0 -60
  171. runops-1.2.0/.codex/rules/gotchas.md +0 -69
  172. runops-1.2.0/.codex/rules/knowledge-layer.md +0 -36
  173. runops-1.2.0/.codex/rules/runops.rules +0 -169
  174. runops-1.2.0/AGENTS.md +0 -140
  175. runops-1.2.0/CLAUDE.md +0 -146
  176. runops-1.2.0/PKG-INFO +0 -211
  177. runops-1.2.0/README.md +0 -194
  178. runops-1.2.0/SKILLS.md +0 -250
  179. runops-1.2.0/SPEC.md +0 -1487
  180. runops-1.2.0/docs/agent-user-guide.md +0 -110
  181. runops-1.2.0/docs/architecture.md +0 -770
  182. runops-1.2.0/docs/demo-replay.md +0 -143
  183. runops-1.2.0/docs/extending.md +0 -963
  184. runops-1.2.0/docs/figures/layers/overview.png +0 -0
  185. runops-1.2.0/docs/get-started-with-agent.md +0 -204
  186. runops-1.2.0/docs/layers/README.md +0 -59
  187. runops-1.2.0/docs/layers/analysis.md +0 -26
  188. runops-1.2.0/docs/layers/execution-kernel.md +0 -119
  189. runops-1.2.0/docs/layers/experiment.md +0 -78
  190. runops-1.2.0/docs/layers/harness.md +0 -116
  191. runops-1.2.0/docs/layers/interface.md +0 -235
  192. runops-1.2.0/docs/layers/knowledge.md +0 -78
  193. runops-1.2.0/docs/layers/research.md +0 -37
  194. runops-1.2.0/docs/layers/upstream.md +0 -21
  195. runops-1.2.0/docs/local-runops-patches.md +0 -4
  196. runops-1.2.0/docs/mcp.md +0 -265
  197. runops-1.2.0/docs/migrations/README.md +0 -129
  198. runops-1.2.0/docs/migrations/v0.md +0 -268
  199. runops-1.2.0/docs/paper-requests.md +0 -13
  200. runops-1.2.0/docs/project-health.md +0 -80
  201. runops-1.2.0/docs/runops-intro.pdf +0 -0
  202. runops-1.2.0/docs/runops-intro.tex +0 -514
  203. runops-1.2.0/docs/simulator-kb-spec.md +0 -579
  204. runops-1.2.0/docs/toml-reference.md +0 -1361
  205. runops-1.2.0/entrypoints.toml +0 -1
  206. runops-1.2.0/examples/beach/campaign.toml +0 -16
  207. runops-1.2.0/examples/beach/cases/periodic2_basic/beach_template.toml +0 -62
  208. runops-1.2.0/examples/beach/cases/periodic2_basic/case.toml +0 -26
  209. runops-1.2.0/examples/beach/launchers.toml +0 -7
  210. runops-1.2.0/examples/beach/simulators.toml +0 -5
  211. runops-1.2.0/examples/beach/surveys/density_scan/survey.toml +0 -27
  212. runops-1.2.0/examples/emses/campaign.toml +0 -18
  213. runops-1.2.0/examples/emses/cases/flat_surface/case.toml +0 -28
  214. runops-1.2.0/examples/emses/cases/flat_surface/plasma.toml +0 -81
  215. runops-1.2.0/examples/emses/launchers.toml +0 -7
  216. runops-1.2.0/examples/emses/simulators.toml +0 -5
  217. runops-1.2.0/examples/emses/surveys/mag_angle_scan/survey.toml +0 -27
  218. runops-1.2.0/pyproject.toml +0 -109
  219. runops-1.2.0/schemas/campaign.json +0 -106
  220. runops-1.2.0/schemas/case.json +0 -80
  221. runops-1.2.0/schemas/codex-plugin-check-result.json +0 -58
  222. runops-1.2.0/schemas/codex-plugin-inventory.json +0 -122
  223. runops-1.2.0/schemas/codex-plugin-recommendation.json +0 -41
  224. runops-1.2.0/schemas/launchers.json +0 -78
  225. runops-1.2.0/schemas/manifest.json +0 -170
  226. runops-1.2.0/schemas/runops.json +0 -132
  227. runops-1.2.0/schemas/simulators.json +0 -51
  228. runops-1.2.0/schemas/site.json +0 -80
  229. runops-1.2.0/schemas/survey.json +0 -157
  230. runops-1.2.0/src/runops/__init__.py +0 -5
  231. runops-1.2.0/src/runops/adapters/__init__.py +0 -37
  232. runops-1.2.0/src/runops/adapters/_provenance.py +0 -93
  233. runops-1.2.0/src/runops/adapters/_runtime.py +0 -112
  234. runops-1.2.0/src/runops/adapters/_utils/__init__.py +0 -36
  235. runops-1.2.0/src/runops/adapters/_utils/toml_utils.py +0 -81
  236. runops-1.2.0/src/runops/adapters/base.py +0 -380
  237. runops-1.2.0/src/runops/adapters/bundled.py +0 -28
  238. runops-1.2.0/src/runops/adapters/contrib/__init__.py +0 -5
  239. runops-1.2.0/src/runops/adapters/contrib/_paths.py +0 -10
  240. runops-1.2.0/src/runops/adapters/contrib/beach/__init__.py +0 -17
  241. runops-1.2.0/src/runops/adapters/contrib/beach/adapter.py +0 -549
  242. runops-1.2.0/src/runops/adapters/contrib/beach/constants.py +0 -19
  243. runops-1.2.0/src/runops/adapters/contrib/beach/diagnostics.py +0 -306
  244. runops-1.2.0/src/runops/adapters/contrib/beach/metadata.py +0 -256
  245. runops-1.2.0/src/runops/adapters/contrib/beach/validation.py +0 -126
  246. runops-1.2.0/src/runops/adapters/contrib/emses/__init__.py +0 -23
  247. runops-1.2.0/src/runops/adapters/contrib/emses/adapter.py +0 -465
  248. runops-1.2.0/src/runops/adapters/contrib/emses/constants.py +0 -11
  249. runops-1.2.0/src/runops/adapters/contrib/emses/diagnostics.py +0 -274
  250. runops-1.2.0/src/runops/adapters/contrib/emses/metadata.py +0 -327
  251. runops-1.2.0/src/runops/adapters/contrib/emses/validation.py +0 -157
  252. runops-1.2.0/src/runops/adapters/generic.py +0 -327
  253. runops-1.2.0/src/runops/adapters/registry.py +0 -338
  254. runops-1.2.0/src/runops/application/__init__.py +0 -1
  255. runops-1.2.0/src/runops/application/actions/__init__.py +0 -118
  256. runops-1.2.0/src/runops/application/actions/admin.py +0 -541
  257. runops-1.2.0/src/runops/application/actions/analysis.py +0 -196
  258. runops-1.2.0/src/runops/application/actions/helpers.py +0 -57
  259. runops-1.2.0/src/runops/application/actions/knowledge.py +0 -142
  260. runops-1.2.0/src/runops/application/actions/registry.py +0 -94
  261. runops-1.2.0/src/runops/application/actions/result.py +0 -52
  262. runops-1.2.0/src/runops/application/actions/run_lifecycle.py +0 -480
  263. runops-1.2.0/src/runops/application/actions/specs.py +0 -327
  264. runops-1.2.0/src/runops/application/analysis/__init__.py +0 -67
  265. runops-1.2.0/src/runops/application/analysis/artifacts.py +0 -270
  266. runops-1.2.0/src/runops/application/analysis/collection.py +0 -528
  267. runops-1.2.0/src/runops/application/analysis/comparison.py +0 -232
  268. runops-1.2.0/src/runops/application/analysis/plotting.py +0 -248
  269. runops-1.2.0/src/runops/application/analysis/report.py +0 -103
  270. runops-1.2.0/src/runops/application/analysis/story/__init__.py +0 -19
  271. runops-1.2.0/src/runops/application/analysis/story/audit.py +0 -127
  272. runops-1.2.0/src/runops/application/analysis/story/models.py +0 -132
  273. runops-1.2.0/src/runops/application/analysis/story/render.py +0 -73
  274. runops-1.2.0/src/runops/application/analysis/story/schema.py +0 -172
  275. runops-1.2.0/src/runops/application/analysis/story/sources.py +0 -289
  276. runops-1.2.0/src/runops/application/analysis/story/workspace.py +0 -180
  277. runops-1.2.0/src/runops/application/analysis/workflow.py +0 -373
  278. runops-1.2.0/src/runops/application/context.py +0 -604
  279. runops-1.2.0/src/runops/application/execution/__init__.py +0 -55
  280. runops-1.2.0/src/runops/application/execution/readiness.py +0 -598
  281. runops-1.2.0/src/runops/application/execution/retry.py +0 -347
  282. runops-1.2.0/src/runops/application/execution/submission/__init__.py +0 -79
  283. runops-1.2.0/src/runops/application/execution/submission/apply.py +0 -265
  284. runops-1.2.0/src/runops/application/execution/submission/claim.py +0 -191
  285. runops-1.2.0/src/runops/application/execution/submission/models.py +0 -198
  286. runops-1.2.0/src/runops/application/execution/submission/planning.py +0 -188
  287. runops-1.2.0/src/runops/application/gateway/__init__.py +0 -1
  288. runops-1.2.0/src/runops/application/gateway/plugins/__init__.py +0 -41
  289. runops-1.2.0/src/runops/application/gateway/plugins/discovery.py +0 -415
  290. runops-1.2.0/src/runops/application/gateway/plugins/inventory.py +0 -66
  291. runops-1.2.0/src/runops/application/gateway/plugins/models.py +0 -123
  292. runops-1.2.0/src/runops/application/gateway/plugins/validation.py +0 -146
  293. runops-1.2.0/src/runops/application/operator/__init__.py +0 -1
  294. runops-1.2.0/src/runops/application/operator/coverage_policy.py +0 -140
  295. runops-1.2.0/src/runops/application/operator/harness_upgrade.py +0 -257
  296. runops-1.2.0/src/runops/application/operator/lint/__init__.py +0 -18
  297. runops-1.2.0/src/runops/application/operator/lint/analysis.py +0 -127
  298. runops-1.2.0/src/runops/application/operator/lint/knowledge.py +0 -114
  299. runops-1.2.0/src/runops/application/operator/lint/models.py +0 -123
  300. runops-1.2.0/src/runops/application/operator/lint/plugins.py +0 -52
  301. runops-1.2.0/src/runops/application/operator/lint/registry.py +0 -131
  302. runops-1.2.0/src/runops/application/operator/lint/runs.py +0 -284
  303. runops-1.2.0/src/runops/application/operator/lint/structure.py +0 -87
  304. runops-1.2.0/src/runops/application/operator/migrations/__init__.py +0 -33
  305. runops-1.2.0/src/runops/application/operator/migrations/models.py +0 -79
  306. runops-1.2.0/src/runops/application/operator/migrations/registry.py +0 -139
  307. runops-1.2.0/src/runops/application/operator/migrations/v0.py +0 -386
  308. runops-1.2.0/src/runops/application/ports/__init__.py +0 -15
  309. runops-1.2.0/src/runops/application/ports/scheduler.py +0 -22
  310. runops-1.2.0/src/runops/application/publication/__init__.py +0 -17
  311. runops-1.2.0/src/runops/application/publication/files.py +0 -127
  312. runops-1.2.0/src/runops/application/publication/sources.py +0 -389
  313. runops-1.2.0/src/runops/application/publication/workflow.py +0 -371
  314. runops-1.2.0/src/runops/application/research/__init__.py +0 -37
  315. runops-1.2.0/src/runops/application/research/workspace.py +0 -898
  316. runops-1.2.0/src/runops/application/run_creation/__init__.py +0 -70
  317. runops-1.2.0/src/runops/application/run_creation/manifest.py +0 -215
  318. runops-1.2.0/src/runops/application/run_creation/merge.py +0 -84
  319. runops-1.2.0/src/runops/application/run_creation/plan.py +0 -61
  320. runops-1.2.0/src/runops/application/run_creation/regenerate.py +0 -119
  321. runops-1.2.0/src/runops/application/run_creation/resolve.py +0 -71
  322. runops-1.2.0/src/runops/application/run_creation/staging.py +0 -45
  323. runops-1.2.0/src/runops/application/run_creation/workflow.py +0 -404
  324. runops-1.2.0/src/runops/cli/__init__.py +0 -3
  325. runops-1.2.0/src/runops/cli/analyze.py +0 -471
  326. runops-1.2.0/src/runops/cli/clone.py +0 -204
  327. runops-1.2.0/src/runops/cli/config.py +0 -217
  328. runops-1.2.0/src/runops/cli/context.py +0 -80
  329. runops-1.2.0/src/runops/cli/create.py +0 -284
  330. runops-1.2.0/src/runops/cli/dashboard.py +0 -233
  331. runops-1.2.0/src/runops/cli/demo.py +0 -212
  332. runops-1.2.0/src/runops/cli/extend.py +0 -217
  333. runops-1.2.0/src/runops/cli/groups/__init__.py +0 -15
  334. runops-1.2.0/src/runops/cli/groups/analyze.py +0 -29
  335. runops-1.2.0/src/runops/cli/groups/case.py +0 -12
  336. runops-1.2.0/src/runops/cli/groups/research.py +0 -31
  337. runops-1.2.0/src/runops/cli/groups/runs.py +0 -45
  338. runops-1.2.0/src/runops/cli/history.py +0 -105
  339. runops-1.2.0/src/runops/cli/init/__init__.py +0 -42
  340. runops-1.2.0/src/runops/cli/init/bootstrap.py +0 -138
  341. runops-1.2.0/src/runops/cli/init/command.py +0 -9
  342. runops-1.2.0/src/runops/cli/init/doctor.py +0 -227
  343. runops-1.2.0/src/runops/cli/init/github_auth.py +0 -121
  344. runops-1.2.0/src/runops/cli/init/knowledge.py +0 -147
  345. runops-1.2.0/src/runops/cli/init/prompting.py +0 -321
  346. runops-1.2.0/src/runops/cli/init/scaffold.py +0 -165
  347. runops-1.2.0/src/runops/cli/init/serialization.py +0 -126
  348. runops-1.2.0/src/runops/cli/init/workflow.py +0 -471
  349. runops-1.2.0/src/runops/cli/jobs.py +0 -145
  350. runops-1.2.0/src/runops/cli/knowledge/__init__.py +0 -46
  351. runops-1.2.0/src/runops/cli/knowledge/command.py +0 -475
  352. runops-1.2.0/src/runops/cli/knowledge/common.py +0 -21
  353. runops-1.2.0/src/runops/cli/knowledge/sources.py +0 -521
  354. runops-1.2.0/src/runops/cli/lint.py +0 -100
  355. runops-1.2.0/src/runops/cli/list.py +0 -128
  356. runops-1.2.0/src/runops/cli/log.py +0 -163
  357. runops-1.2.0/src/runops/cli/main.py +0 -132
  358. runops-1.2.0/src/runops/cli/manage.py +0 -446
  359. runops-1.2.0/src/runops/cli/mcp.py +0 -153
  360. runops-1.2.0/src/runops/cli/migrate.py +0 -177
  361. runops-1.2.0/src/runops/cli/new.py +0 -388
  362. runops-1.2.0/src/runops/cli/operations.py +0 -95
  363. runops-1.2.0/src/runops/cli/plugins.py +0 -151
  364. runops-1.2.0/src/runops/cli/regenerate.py +0 -89
  365. runops-1.2.0/src/runops/cli/research.py +0 -245
  366. runops-1.2.0/src/runops/cli/retry.py +0 -140
  367. runops-1.2.0/src/runops/cli/run_lookup.py +0 -148
  368. runops-1.2.0/src/runops/cli/setup.py +0 -264
  369. runops-1.2.0/src/runops/cli/status.py +0 -373
  370. runops-1.2.0/src/runops/cli/submit.py +0 -399
  371. runops-1.2.0/src/runops/cli/update.py +0 -354
  372. runops-1.2.0/src/runops/cli/update_harness.py +0 -657
  373. runops-1.2.0/src/runops/cli/update_notice.py +0 -303
  374. runops-1.2.0/src/runops/cli/update_refs.py +0 -372
  375. runops-1.2.0/src/runops/core/__init__.py +0 -3
  376. runops-1.2.0/src/runops/core/campaign.py +0 -156
  377. runops-1.2.0/src/runops/core/case.py +0 -310
  378. runops-1.2.0/src/runops/core/codex_plugin.py +0 -203
  379. runops-1.2.0/src/runops/core/demo/__init__.py +0 -31
  380. runops-1.2.0/src/runops/core/demo/importer.py +0 -676
  381. runops-1.2.0/src/runops/core/demo/replay.py +0 -382
  382. runops-1.2.0/src/runops/core/demo/sanitize.py +0 -184
  383. runops-1.2.0/src/runops/core/discovery.py +0 -199
  384. runops-1.2.0/src/runops/core/environment/__init__.py +0 -19
  385. runops-1.2.0/src/runops/core/environment/runtime.py +0 -291
  386. runops-1.2.0/src/runops/core/event_log.py +0 -445
  387. runops-1.2.0/src/runops/core/exceptions.py +0 -101
  388. runops-1.2.0/src/runops/core/knowledge/__init__.py +0 -32
  389. runops-1.2.0/src/runops/core/knowledge/facts.py +0 -307
  390. runops-1.2.0/src/runops/core/knowledge/insights.py +0 -131
  391. runops-1.2.0/src/runops/core/knowledge/paths.py +0 -39
  392. runops-1.2.0/src/runops/core/knowledge_source/__init__.py +0 -85
  393. runops-1.2.0/src/runops/core/knowledge_source/config.py +0 -284
  394. runops-1.2.0/src/runops/core/knowledge_source/discovery.py +0 -50
  395. runops-1.2.0/src/runops/core/knowledge_source/entrypoints.py +0 -162
  396. runops-1.2.0/src/runops/core/knowledge_source/imports.py +0 -126
  397. runops-1.2.0/src/runops/core/knowledge_source/paths.py +0 -103
  398. runops-1.2.0/src/runops/core/knowledge_source/render.py +0 -115
  399. runops-1.2.0/src/runops/core/knowledge_source/sync.py +0 -150
  400. runops-1.2.0/src/runops/core/knowledge_source/validation.py +0 -205
  401. runops-1.2.0/src/runops/core/manifest.py +0 -300
  402. runops-1.2.0/src/runops/core/models/__init__.py +0 -1
  403. runops-1.2.0/src/runops/core/models/analysis.py +0 -113
  404. runops-1.2.0/src/runops/core/models/knowledge.py +0 -76
  405. runops-1.2.0/src/runops/core/models/knowledge_source.py +0 -92
  406. runops-1.2.0/src/runops/core/models/publication.py +0 -47
  407. runops-1.2.0/src/runops/core/models/run_creation.py +0 -46
  408. runops-1.2.0/src/runops/core/project.py +0 -174
  409. runops-1.2.0/src/runops/core/project_files.py +0 -6
  410. runops-1.2.0/src/runops/core/provenance.py +0 -147
  411. runops-1.2.0/src/runops/core/repository.py +0 -11
  412. runops-1.2.0/src/runops/core/research/__init__.py +0 -10
  413. runops-1.2.0/src/runops/core/research/workspace.py +0 -76
  414. runops-1.2.0/src/runops/core/run/__init__.py +0 -25
  415. runops-1.2.0/src/runops/core/run/derivation.py +0 -130
  416. runops-1.2.0/src/runops/core/run/records.py +0 -170
  417. runops-1.2.0/src/runops/core/site/__init__.py +0 -19
  418. runops-1.2.0/src/runops/core/site/profile.py +0 -374
  419. runops-1.2.0/src/runops/core/state.py +0 -300
  420. runops-1.2.0/src/runops/core/survey/__init__.py +0 -31
  421. runops-1.2.0/src/runops/core/survey/config.py +0 -513
  422. runops-1.2.0/src/runops/core/survey/naming.py +0 -157
  423. runops-1.2.0/src/runops/core/upgrade_chain.py +0 -167
  424. runops-1.2.0/src/runops/core/validation/__init__.py +0 -40
  425. runops-1.2.0/src/runops/harness/__init__.py +0 -47
  426. runops-1.2.0/src/runops/harness/_adapters.py +0 -62
  427. runops-1.2.0/src/runops/harness/_plugins.py +0 -65
  428. runops-1.2.0/src/runops/harness/_skills.py +0 -67
  429. runops-1.2.0/src/runops/harness/builder.py +0 -460
  430. runops-1.2.0/src/runops/harness/claude.py +0 -231
  431. runops-1.2.0/src/runops/harness/codex.py +0 -48
  432. runops-1.2.0/src/runops/jobgen/__init__.py +0 -3
  433. runops-1.2.0/src/runops/jobgen/generator.py +0 -324
  434. runops-1.2.0/src/runops/launchers/__init__.py +0 -17
  435. runops-1.2.0/src/runops/launchers/base.py +0 -313
  436. runops-1.2.0/src/runops/launchers/mpiexec.py +0 -131
  437. runops-1.2.0/src/runops/launchers/mpirun.py +0 -132
  438. runops-1.2.0/src/runops/launchers/srun.py +0 -126
  439. runops-1.2.0/src/runops/mcp/__init__.py +0 -7
  440. runops-1.2.0/src/runops/mcp/_tools/__init__.py +0 -1
  441. runops-1.2.0/src/runops/mcp/_tools/analysis.py +0 -327
  442. runops-1.2.0/src/runops/mcp/_tools/common.py +0 -366
  443. runops-1.2.0/src/runops/mcp/_tools/project.py +0 -338
  444. runops-1.2.0/src/runops/mcp/_tools/provider.py +0 -74
  445. runops-1.2.0/src/runops/mcp/_tools/publication.py +0 -235
  446. runops-1.2.0/src/runops/mcp/_tools/runs.py +0 -241
  447. runops-1.2.0/src/runops/mcp/_tools/scheduler.py +0 -239
  448. runops-1.2.0/src/runops/mcp/registry.py +0 -422
  449. runops-1.2.0/src/runops/mcp/safety.py +0 -71
  450. runops-1.2.0/src/runops/mcp/schemas.py +0 -152
  451. runops-1.2.0/src/runops/mcp/server.py +0 -287
  452. runops-1.2.0/src/runops/mcp/tools.py +0 -49
  453. runops-1.2.0/src/runops/sites/camphor.md +0 -123
  454. runops-1.2.0/src/runops/sites/camphor.toml +0 -47
  455. runops-1.2.0/src/runops/slurm/__init__.py +0 -3
  456. runops-1.2.0/src/runops/slurm/query.py +0 -384
  457. runops-1.2.0/src/runops/slurm/submit.py +0 -239
  458. runops-1.2.0/src/runops/templates/README.md +0 -38
  459. runops-1.2.0/src/runops/templates/__init__.py +0 -29
  460. runops-1.2.0/src/runops/templates/adapters/beach/agent_guide.md +0 -39
  461. runops-1.2.0/src/runops/templates/adapters/beach/beach.toml +0 -19
  462. runops-1.2.0/src/runops/templates/adapters/beach/case.toml +0 -16
  463. runops-1.2.0/src/runops/templates/adapters/beach/summarize.py +0 -272
  464. runops-1.2.0/src/runops/templates/adapters/emses/agent_guide.md +0 -42
  465. runops-1.2.0/src/runops/templates/adapters/emses/case.toml +0 -18
  466. runops-1.2.0/src/runops/templates/adapters/emses/plasma.toml +0 -118
  467. runops-1.2.0/src/runops/templates/adapters/emses/summarize.py +0 -413
  468. runops-1.2.0/src/runops/templates/adapters/generic/case.toml.j2 +0 -13
  469. runops-1.2.0/src/runops/templates/adapters/generic/summarize.py +0 -21
  470. runops-1.2.0/src/runops/templates/demo/replay.html.j2 +0 -1593
  471. runops-1.2.0/src/runops/templates/harness/claude/CLAUDE.md.j2 +0 -7
  472. runops-1.2.0/src/runops/templates/harness/claude/rules/cookbook.md.j2 +0 -6
  473. runops-1.2.0/src/runops/templates/harness/claude/rules/plan-before-act.md +0 -16
  474. runops-1.2.0/src/runops/templates/harness/claude/rules/runops-workflow.md +0 -53
  475. runops-1.2.0/src/runops/templates/harness/codex/AGENTS.md.j2 +0 -21
  476. runops-1.2.0/src/runops/templates/harness/codex/README.md.j2 +0 -127
  477. runops-1.2.0/src/runops/templates/harness/codex/config.toml.j2 +0 -21
  478. runops-1.2.0/src/runops/templates/harness/codex/rules/runops.rules +0 -160
  479. runops-1.2.0/src/runops/templates/harness/shared/cases.md +0 -22
  480. runops-1.2.0/src/runops/templates/harness/shared/partials/agent-body.md.j2 +0 -155
  481. runops-1.2.0/src/runops/templates/harness/shared/rules/cookbook.md.j2 +0 -19
  482. runops-1.2.0/src/runops/templates/harness/shared/runs.md +0 -25
  483. runops-1.2.0/src/runops/templates/knowledge/runops/agent-user-guide.md +0 -60
  484. runops-1.2.0/src/runops/templates/scaffold/campaign.toml.j2 +0 -10
  485. runops-1.2.0/src/runops/templates/scaffold/facts.toml +0 -2
  486. runops-1.2.0/src/runops/templates/scaffold/gitignore.txt +0 -43
  487. runops-1.2.0/src/runops/templates/scaffold/materials/README.md +0 -38
  488. runops-1.2.0/src/runops/templates/scaffold/materials/index.toml +0 -12
  489. runops-1.2.0/src/runops/templates/scaffold/research/CURRENT.md +0 -29
  490. runops-1.2.0/src/runops/templates/scaffold/research/journal/active.md +0 -2
  491. runops-1.2.0/src/runops/templates/scaffold/vscode_settings.json +0 -57
  492. runops-1.2.0/src/runops/templates/skills/analyze/SKILL.md +0 -39
  493. runops-1.2.0/src/runops/templates/skills/check-status/SKILL.md +0 -52
  494. runops-1.2.0/src/runops/templates/skills/cleanup/SKILL.md +0 -38
  495. runops-1.2.0/src/runops/templates/skills/create-run/SKILL.md +0 -49
  496. runops-1.2.0/src/runops/templates/skills/debug-failed/SKILL.md +0 -35
  497. runops-1.2.0/src/runops/templates/skills/learn/SKILL.md +0 -26
  498. runops-1.2.0/src/runops/templates/skills/migrate-runops/SKILL.md +0 -55
  499. runops-1.2.0/src/runops/templates/skills/new-case/SKILL.md +0 -40
  500. runops-1.2.0/src/runops/templates/skills/patch-runops/SKILL.md +0 -47
  501. runops-1.2.0/src/runops/templates/skills/release/SKILL.md +0 -39
  502. runops-1.2.0/src/runops/templates/skills/research-workspace/SKILL.md +0 -30
  503. runops-1.2.0/src/runops/templates/skills/run-all/SKILL.md +0 -58
  504. runops-1.2.0/src/runops/templates/skills/runops-reference/SKILL.md +0 -55
  505. runops-1.2.0/src/runops/templates/skills/setup-campaign/SKILL.md +0 -47
  506. runops-1.2.0/src/runops/templates/skills/setup-env/SKILL.md +0 -28
  507. runops-1.2.0/src/runops/templates/skills/setup-plugins/SKILL.md +0 -58
  508. runops-1.2.0/src/runops/templates/skills/setup-runops/SKILL.md +0 -80
  509. runops-1.2.0/src/runops/templates/skills/summarize-script/SKILL.md +0 -51
  510. runops-1.2.0/src/runops/templates/skills/survey-design/SKILL.md +0 -48
  511. runops-1.2.0/src/runops/templates/skills/update-runops/SKILL.md +0 -51
  512. runops-1.2.0/src/runops/templates/survey.toml.j2 +0 -36
  513. runops-1.2.0/tests/__init__.py +0 -0
  514. runops-1.2.0/tests/conftest.py +0 -105
  515. runops-1.2.0/tests/factories.py +0 -121
  516. runops-1.2.0/tests/fixtures/sample_case.toml +0 -25
  517. runops-1.2.0/tests/fixtures/sample_launchers.toml +0 -16
  518. runops-1.2.0/tests/fixtures/sample_manifest.toml +0 -40
  519. runops-1.2.0/tests/fixtures/sample_runops.toml +0 -3
  520. runops-1.2.0/tests/fixtures/sample_simulators.toml +0 -6
  521. runops-1.2.0/tests/fixtures/sample_survey.toml +0 -25
  522. runops-1.2.0/tests/test_adapters/__init__.py +0 -0
  523. runops-1.2.0/tests/test_adapters/test_beach.py +0 -543
  524. runops-1.2.0/tests/test_adapters/test_contract.py +0 -293
  525. runops-1.2.0/tests/test_adapters/test_emses.py +0 -499
  526. runops-1.2.0/tests/test_adapters/test_generic.py +0 -574
  527. runops-1.2.0/tests/test_adapters/test_provenance.py +0 -127
  528. runops-1.2.0/tests/test_adapters/test_registry.py +0 -328
  529. runops-1.2.0/tests/test_adapters/test_runtime.py +0 -196
  530. runops-1.2.0/tests/test_adapters/test_toml_utils.py +0 -83
  531. runops-1.2.0/tests/test_application/__init__.py +0 -1
  532. runops-1.2.0/tests/test_application/test_action_contract.py +0 -310
  533. runops-1.2.0/tests/test_application/test_actions.py +0 -1337
  534. runops-1.2.0/tests/test_application/test_analysis.py +0 -215
  535. runops-1.2.0/tests/test_application/test_analysis_comparison.py +0 -93
  536. runops-1.2.0/tests/test_application/test_analysis_story.py +0 -547
  537. runops-1.2.0/tests/test_application/test_capability_facades.py +0 -19
  538. runops-1.2.0/tests/test_application/test_context.py +0 -608
  539. runops-1.2.0/tests/test_application/test_coverage_policy.py +0 -177
  540. runops-1.2.0/tests/test_application/test_harness_upgrade.py +0 -166
  541. runops-1.2.0/tests/test_application/test_lint.py +0 -443
  542. runops-1.2.0/tests/test_application/test_migrations.py +0 -169
  543. runops-1.2.0/tests/test_application/test_plugins.py +0 -724
  544. runops-1.2.0/tests/test_application/test_publication.py +0 -239
  545. runops-1.2.0/tests/test_application/test_readiness.py +0 -181
  546. runops-1.2.0/tests/test_application/test_research_workspace.py +0 -198
  547. runops-1.2.0/tests/test_application/test_retry.py +0 -136
  548. runops-1.2.0/tests/test_application/test_run_creation.py +0 -719
  549. runops-1.2.0/tests/test_application/test_story_audit.py +0 -128
  550. runops-1.2.0/tests/test_application/test_story_render.py +0 -113
  551. runops-1.2.0/tests/test_application/test_story_schema.py +0 -279
  552. runops-1.2.0/tests/test_application/test_story_sources.py +0 -261
  553. runops-1.2.0/tests/test_application/test_submission.py +0 -1057
  554. runops-1.2.0/tests/test_application/test_submission_parity.py +0 -252
  555. runops-1.2.0/tests/test_architecture/test_core_import_boundaries.py +0 -105
  556. runops-1.2.0/tests/test_cli/__init__.py +0 -0
  557. runops-1.2.0/tests/test_cli/test_analyze.py +0 -1105
  558. runops-1.2.0/tests/test_cli/test_clone.py +0 -241
  559. runops-1.2.0/tests/test_cli/test_config.py +0 -183
  560. runops-1.2.0/tests/test_cli/test_context_cli.py +0 -75
  561. runops-1.2.0/tests/test_cli/test_create.py +0 -560
  562. runops-1.2.0/tests/test_cli/test_dashboard.py +0 -233
  563. runops-1.2.0/tests/test_cli/test_demo.py +0 -297
  564. runops-1.2.0/tests/test_cli/test_event_log.py +0 -143
  565. runops-1.2.0/tests/test_cli/test_extend.py +0 -344
  566. runops-1.2.0/tests/test_cli/test_history.py +0 -103
  567. runops-1.2.0/tests/test_cli/test_init.py +0 -950
  568. runops-1.2.0/tests/test_cli/test_init_bootstrap.py +0 -192
  569. runops-1.2.0/tests/test_cli/test_init_github_auth.py +0 -131
  570. runops-1.2.0/tests/test_cli/test_init_helpers.py +0 -245
  571. runops-1.2.0/tests/test_cli/test_init_scaffold.py +0 -119
  572. runops-1.2.0/tests/test_cli/test_jobs.py +0 -150
  573. runops-1.2.0/tests/test_cli/test_knowledge.py +0 -828
  574. runops-1.2.0/tests/test_cli/test_knowledge_source_helpers.py +0 -133
  575. runops-1.2.0/tests/test_cli/test_lint.py +0 -97
  576. runops-1.2.0/tests/test_cli/test_list.py +0 -216
  577. runops-1.2.0/tests/test_cli/test_log.py +0 -191
  578. runops-1.2.0/tests/test_cli/test_main.py +0 -249
  579. runops-1.2.0/tests/test_cli/test_manage.py +0 -558
  580. runops-1.2.0/tests/test_cli/test_mcp.py +0 -54
  581. runops-1.2.0/tests/test_cli/test_migrate.py +0 -80
  582. runops-1.2.0/tests/test_cli/test_new.py +0 -220
  583. runops-1.2.0/tests/test_cli/test_plugins.py +0 -362
  584. runops-1.2.0/tests/test_cli/test_regenerate.py +0 -157
  585. runops-1.2.0/tests/test_cli/test_research.py +0 -139
  586. runops-1.2.0/tests/test_cli/test_retry.py +0 -175
  587. runops-1.2.0/tests/test_cli/test_setup.py +0 -287
  588. runops-1.2.0/tests/test_cli/test_status.py +0 -532
  589. runops-1.2.0/tests/test_cli/test_submit.py +0 -511
  590. runops-1.2.0/tests/test_cli/test_update.py +0 -413
  591. runops-1.2.0/tests/test_cli/test_update_harness.py +0 -634
  592. runops-1.2.0/tests/test_cli/test_update_notice.py +0 -139
  593. runops-1.2.0/tests/test_cli/test_update_refs.py +0 -198
  594. runops-1.2.0/tests/test_core/__init__.py +0 -0
  595. runops-1.2.0/tests/test_core/test_case.py +0 -90
  596. runops-1.2.0/tests/test_core/test_demo_import.py +0 -289
  597. runops-1.2.0/tests/test_core/test_demo_replay.py +0 -218
  598. runops-1.2.0/tests/test_core/test_discovery.py +0 -153
  599. runops-1.2.0/tests/test_core/test_environment.py +0 -215
  600. runops-1.2.0/tests/test_core/test_event_log.py +0 -208
  601. runops-1.2.0/tests/test_core/test_knowledge_source.py +0 -786
  602. runops-1.2.0/tests/test_core/test_knowledge_source_render.py +0 -212
  603. runops-1.2.0/tests/test_core/test_knowledge_source_validation.py +0 -157
  604. runops-1.2.0/tests/test_core/test_manifest.py +0 -302
  605. runops-1.2.0/tests/test_core/test_project.py +0 -113
  606. runops-1.2.0/tests/test_core/test_provenance.py +0 -96
  607. runops-1.2.0/tests/test_core/test_repository.py +0 -11
  608. runops-1.2.0/tests/test_core/test_research_workspace.py +0 -77
  609. runops-1.2.0/tests/test_core/test_run.py +0 -112
  610. runops-1.2.0/tests/test_core/test_schemas.py +0 -179
  611. runops-1.2.0/tests/test_core/test_site.py +0 -319
  612. runops-1.2.0/tests/test_core/test_state.py +0 -217
  613. runops-1.2.0/tests/test_core/test_survey.py +0 -386
  614. runops-1.2.0/tests/test_core/test_upgrade_chain.py +0 -50
  615. runops-1.2.0/tests/test_e2e/test_bootstrap.py +0 -479
  616. runops-1.2.0/tests/test_e2e/test_golden_path.py +0 -181
  617. runops-1.2.0/tests/test_harness/test_claude.py +0 -61
  618. runops-1.2.0/tests/test_harness/test_codex.py +0 -360
  619. runops-1.2.0/tests/test_harness/test_development_guidance.py +0 -253
  620. runops-1.2.0/tests/test_launchers/__init__.py +0 -0
  621. runops-1.2.0/tests/test_launchers/test_launcher_base.py +0 -184
  622. runops-1.2.0/tests/test_launchers/test_mpiexec.py +0 -83
  623. runops-1.2.0/tests/test_launchers/test_mpirun.py +0 -85
  624. runops-1.2.0/tests/test_launchers/test_srun.py +0 -99
  625. runops-1.2.0/tests/test_mcp/__init__.py +0 -1
  626. runops-1.2.0/tests/test_mcp/test_registry.py +0 -78
  627. runops-1.2.0/tests/test_mcp/test_server.py +0 -369
  628. runops-1.2.0/tests/test_mcp/test_tools.py +0 -579
  629. runops-1.2.0/tests/test_slurm/__init__.py +0 -0
  630. runops-1.2.0/tests/test_slurm/test_jobgen.py +0 -603
  631. runops-1.2.0/tests/test_slurm/test_slurm_query.py +0 -339
  632. runops-1.2.0/tests/test_slurm/test_slurm_submit.py +0 -279
  633. runops-1.2.0/uv.lock +0 -1375
  634. {runops-1.2.0 → runops-2.0.0}/.agents/skills/python-package-refactor/SKILL.md +0 -0
  635. {runops-1.2.0 → runops-2.0.0}/.agents/skills/python-package-refactor/agents/openai.yaml +0 -0
  636. {runops-1.2.0 → runops-2.0.0}/.agents/skills/python-package-refactor/examples/refactor-request.md +0 -0
  637. {runops-1.2.0 → runops-2.0.0}/.agents/skills/python-package-refactor/references/anti-patterns.md +0 -0
  638. {runops-1.2.0 → runops-2.0.0}/.agents/skills/python-package-refactor/references/api-compatibility.md +0 -0
  639. {runops-1.2.0 → runops-2.0.0}/.agents/skills/python-package-refactor/references/packaging-modernization.md +0 -0
  640. {runops-1.2.0 → runops-2.0.0}/.agents/skills/python-package-refactor/references/refactor-playbook.md +0 -0
  641. {runops-1.2.0 → runops-2.0.0}/.agents/skills/python-package-refactor/references/verification.md +0 -0
  642. {runops-1.2.0 → runops-2.0.0}/.agents/skills/python-package-refactor/scripts/api_surface_snapshot.py +0 -0
  643. {runops-1.2.0 → runops-2.0.0}/.agents/skills/python-package-refactor/scripts/import_smoke.py +0 -0
  644. {runops-1.2.0 → runops-2.0.0}/.agents/skills/python-package-refactor/scripts/inspect_python_package.py +0 -0
  645. {runops-1.2.0 → runops-2.0.0}/.agents/skills/python-package-refactor/scripts/refactor_quality_gate.py +0 -0
  646. {runops-1.2.0 → runops-2.0.0}/.claude/settings.json +0 -0
  647. {runops-1.2.0 → runops-2.0.0}/.codex/config.toml +0 -0
  648. {runops-1.2.0 → runops-2.0.0}/.dockerignore +0 -0
  649. {runops-1.2.0 → runops-2.0.0}/.gitattributes +0 -0
  650. {runops-1.2.0 → runops-2.0.0}/.gitignore +0 -0
  651. {runops-1.2.0 → runops-2.0.0}/.pre-commit-config.yaml +0 -0
  652. {runops-1.2.0 → runops-2.0.0}/.vscode/settings.json +0 -0
  653. {runops-1.2.0 → runops-2.0.0}/LICENSE +0 -0
  654. {runops-1.2.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
+ )