roar-cli 0.2.10__tar.gz → 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (450) hide show
  1. {roar_cli-0.2.10 → roar_cli-0.3.0}/PKG-INFO +208 -14
  2. {roar_cli-0.2.10 → roar_cli-0.3.0}/README.md +205 -13
  3. {roar_cli-0.2.10 → roar_cli-0.3.0}/pyproject.toml +21 -2
  4. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/__main__.py +1 -1
  5. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/git.py +12 -3
  6. roar_cli-0.3.0/roar/application/label_rendering.py +37 -0
  7. roar_cli-0.3.0/roar/application/labels.py +861 -0
  8. roar_cli-0.3.0/roar/application/lookup/__init__.py +21 -0
  9. roar_cli-0.3.0/roar/application/lookup/models.py +52 -0
  10. roar_cli-0.3.0/roar/application/lookup/policy.py +35 -0
  11. roar_cli-0.3.0/roar/application/lookup/refs.py +38 -0
  12. roar_cli-0.3.0/roar/application/lookup/remote_artifacts.py +40 -0
  13. roar_cli-0.3.0/roar/application/lookup/runner.py +32 -0
  14. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/publish/collection.py +73 -14
  15. roar_cli-0.3.0/roar/application/publish/git_remote.py +124 -0
  16. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/publish/job_preparation.py +9 -1
  17. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/publish/lineage.py +142 -0
  18. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/publish/put_composites.py +11 -4
  19. roar_cli-0.3.0/roar/application/publish/put_execution.py +1048 -0
  20. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/publish/put_preparation.py +12 -1
  21. roar_cli-0.3.0/roar/application/publish/register_execution.py +545 -0
  22. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/publish/register_preparation.py +37 -5
  23. roar_cli-0.3.0/roar/application/publish/register_preview_jobs.py +112 -0
  24. roar_cli-0.3.0/roar/application/publish/register_tag_push.py +157 -0
  25. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/publish/registration.py +26 -9
  26. roar_cli-0.3.0/roar/application/publish/registration_package.py +511 -0
  27. roar_cli-0.3.0/roar/application/publish/remote_job_uids.py +50 -0
  28. roar_cli-0.3.0/roar/application/publish/remote_registry.py +85 -0
  29. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/publish/requests.py +4 -0
  30. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/publish/results.py +17 -0
  31. roar_cli-0.3.0/roar/application/publish/runtime.py +77 -0
  32. roar_cli-0.3.0/roar/application/publish/service.py +671 -0
  33. roar_cli-0.3.0/roar/application/publish/session.py +429 -0
  34. roar_cli-0.3.0/roar/application/query/__init__.py +60 -0
  35. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/query/dag.py +27 -7
  36. roar_cli-0.3.0/roar/application/query/diff.py +69 -0
  37. roar_cli-0.3.0/roar/application/query/diff_engine.py +535 -0
  38. roar_cli-0.3.0/roar/application/query/diff_graph.py +427 -0
  39. roar_cli-0.3.0/roar/application/query/diff_refs.py +159 -0
  40. roar_cli-0.3.0/roar/application/query/git_readiness.py +216 -0
  41. roar_cli-0.3.0/roar/application/query/inputs.py +317 -0
  42. roar_cli-0.3.0/roar/application/query/label.py +368 -0
  43. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/query/log.py +6 -7
  44. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/query/requests.py +55 -0
  45. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/query/results.py +115 -2
  46. roar_cli-0.3.0/roar/application/query/show.py +508 -0
  47. roar_cli-0.3.0/roar/application/query/status.py +194 -0
  48. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/reproduce/environment.py +1 -1
  49. roar_cli-0.3.0/roar/application/reproduce/lookup.py +287 -0
  50. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/reproduce/requests.py +2 -0
  51. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/reproduce/results.py +3 -0
  52. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/reproduce/service.py +63 -15
  53. roar_cli-0.3.0/roar/application/run/dirty_tree_error.py +163 -0
  54. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/run/execution.py +70 -40
  55. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/run/requests.py +2 -0
  56. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/run/service.py +121 -33
  57. roar_cli-0.3.0/roar/application/run/verbosity.py +112 -0
  58. roar_cli-0.3.0/roar/application/system_labels.py +612 -0
  59. roar_cli-0.3.0/roar/application/workflow/__init__.py +13 -0
  60. roar_cli-0.3.0/roar/application/workflow/requests.py +18 -0
  61. roar_cli-0.3.0/roar/application/workflow/results.py +27 -0
  62. roar_cli-0.3.0/roar/application/workflow/service.py +359 -0
  63. roar_cli-0.3.0/roar/auth_store.py +148 -0
  64. roar_cli-0.3.0/roar/backends/osmo/__init__.py +29 -0
  65. roar_cli-0.3.0/roar/backends/osmo/config.py +171 -0
  66. roar_cli-0.3.0/roar/backends/osmo/export.py +188 -0
  67. roar_cli-0.3.0/roar/backends/osmo/host_execution.py +1652 -0
  68. roar_cli-0.3.0/roar/backends/osmo/lineage.py +315 -0
  69. roar_cli-0.3.0/roar/backends/osmo/plugin.py +37 -0
  70. roar_cli-0.3.0/roar/backends/osmo/runtime_bundle.py +131 -0
  71. roar_cli-0.3.0/roar/backends/osmo/submit.py +65 -0
  72. roar_cli-0.3.0/roar/backends/osmo/workflow.py +516 -0
  73. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/backends/ray/env_contract.py +2 -0
  74. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/backends/ray/fragment_reconstituter.py +2 -0
  75. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/backends/ray/runtime_hooks.py +4 -1
  76. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/backends/ray/submit_context.py +2 -0
  77. roar_cli-0.3.0/roar/cli/__init__.py +225 -0
  78. roar_cli-0.3.0/roar/cli/_format.py +70 -0
  79. roar_cli-0.3.0/roar/cli/command_registry.py +271 -0
  80. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/cli/commands/__init__.py +1 -0
  81. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/cli/commands/auth.py +44 -18
  82. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/cli/commands/build.py +2 -2
  83. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/cli/commands/config.py +13 -2
  84. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/cli/commands/dag.py +30 -1
  85. roar_cli-0.3.0/roar/cli/commands/diff.py +77 -0
  86. roar_cli-0.3.0/roar/cli/commands/export_registration_package.py +80 -0
  87. roar_cli-0.3.0/roar/cli/commands/init.py +407 -0
  88. roar_cli-0.3.0/roar/cli/commands/init_agents.py +292 -0
  89. roar_cli-0.3.0/roar/cli/commands/inputs.py +116 -0
  90. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/cli/commands/label.py +69 -7
  91. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/cli/commands/lineage.py +2 -1
  92. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/cli/commands/log.py +8 -2
  93. roar_cli-0.3.0/roar/cli/commands/login.py +219 -0
  94. roar_cli-0.3.0/roar/cli/commands/logout.py +24 -0
  95. roar_cli-0.3.0/roar/cli/commands/osmo.py +360 -0
  96. roar_cli-0.3.0/roar/cli/commands/projects.py +195 -0
  97. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/cli/commands/put.py +103 -13
  98. roar_cli-0.3.0/roar/cli/commands/register.py +270 -0
  99. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/cli/commands/reproduce.py +22 -9
  100. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/cli/commands/reset.py +14 -5
  101. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/cli/commands/run.py +39 -4
  102. roar_cli-0.3.0/roar/cli/commands/scope.py +375 -0
  103. roar_cli-0.3.0/roar/cli/commands/show.py +135 -0
  104. roar_cli-0.3.0/roar/cli/commands/status.py +37 -0
  105. roar_cli-0.3.0/roar/cli/commands/telemetry.py +86 -0
  106. roar_cli-0.3.0/roar/cli/commands/tracer.py +661 -0
  107. roar_cli-0.3.0/roar/cli/commands/tui.py +22 -0
  108. roar_cli-0.3.0/roar/cli/commands/whoami.py +95 -0
  109. roar_cli-0.3.0/roar/cli/commands/workflow.py +94 -0
  110. roar_cli-0.3.0/roar/cli/publish_intent.py +65 -0
  111. roar_cli-0.3.0/roar/cli/templates/agents/SKILL.md.tmpl +103 -0
  112. roar_cli-0.3.0/roar/cli/templates/agents/agents_section.md.tmpl +11 -0
  113. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/__init__.py +2 -0
  114. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/bootstrap.py +14 -26
  115. roar_cli-0.3.0/roar/core/canonical_session.py +98 -0
  116. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/exceptions.py +25 -0
  117. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/interfaces/provenance.py +2 -0
  118. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/interfaces/registration.py +24 -1
  119. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/interfaces/repositories.py +5 -0
  120. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/interfaces/reproduction.py +3 -1
  121. roar_cli-0.3.0/roar/core/label_constants.py +15 -0
  122. roar_cli-0.3.0/roar/core/label_origins.py +72 -0
  123. roar_cli-0.3.0/roar/core/models/__init__.py +81 -0
  124. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/models/provenance.py +32 -0
  125. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/models/run.py +41 -0
  126. roar_cli-0.3.0/roar/core/session_hash.py +30 -0
  127. roar_cli-0.3.0/roar/core/step_name.py +46 -0
  128. roar_cli-0.3.0/roar/db/__init__.py +47 -0
  129. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/db/context.py +116 -118
  130. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/db/models.py +1 -0
  131. roar_cli-0.3.0/roar/db/query_context.py +776 -0
  132. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/db/repositories/label.py +3 -0
  133. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/db/repositories/session.py +10 -37
  134. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/db/schema.py +9 -0
  135. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/db/services/job_recording.py +44 -1
  136. roar_cli-0.3.0/roar/db/step_priority.py +91 -0
  137. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/fragments/lineage.py +36 -0
  138. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/framework/registry.py +1 -0
  139. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/provenance/assembler.py +2 -0
  140. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/provenance/data_loader.py +19 -9
  141. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/provenance/file_filter.py +67 -29
  142. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/provenance/service.py +12 -1
  143. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/recording/dataset_metadata.py +7 -11
  144. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/recording/job_recording.py +19 -1
  145. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/runtime/__init__.py +9 -7
  146. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/runtime/coordinator.py +213 -80
  147. roar_cli-0.3.0/roar/execution/runtime/errors.py +5 -0
  148. roar_cli-0.3.0/roar/execution/runtime/host_execution.py +26 -0
  149. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/runtime/inject/sitecustomize.py +18 -0
  150. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/runtime/inject/tracker.py +22 -0
  151. roar_cli-0.3.0/roar/execution/runtime/proxy_resource.py +81 -0
  152. roar_cli-0.3.0/roar/execution/runtime/resources.py +133 -0
  153. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/runtime/tracer.py +183 -32
  154. roar_cli-0.3.0/roar/execution/runtime/tracer_backends.py +905 -0
  155. roar_cli-0.3.0/roar/execution/runtime/tracer_banner.py +45 -0
  156. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/filters/files.py +1 -1
  157. roar_cli-0.3.0/roar/glaas_auth.py +456 -0
  158. roar_cli-0.3.0/roar/glaas_client.py +162 -0
  159. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/__init__.py +3 -0
  160. roar_cli-0.3.0/roar/integrations/bootstrap.py +27 -0
  161. roar_cli-0.3.0/roar/integrations/config/__init__.py +64 -0
  162. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/config/access.py +405 -28
  163. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/config/loader.py +17 -1
  164. roar_cli-0.3.0/roar/integrations/config/raw.py +230 -0
  165. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/config/schema.py +61 -1
  166. roar_cli-0.3.0/roar/integrations/discovery.py +107 -0
  167. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/git/provider.py +24 -12
  168. roar_cli-0.3.0/roar/integrations/glaas/__init__.py +41 -0
  169. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/glaas/client.py +314 -15
  170. roar_cli-0.3.0/roar/integrations/glaas/registration/__init__.py +30 -0
  171. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/glaas/registration/coordinator.py +136 -0
  172. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/glaas/registration/job.py +293 -0
  173. roar_cli-0.3.0/roar/integrations/glaas/registration/session.py +269 -0
  174. roar_cli-0.3.0/roar/integrations/glaas/transport.py +310 -0
  175. roar_cli-0.3.0/roar/presenters/__init__.py +31 -0
  176. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/presenters/dag_data_builder.py +9 -3
  177. roar_cli-0.3.0/roar/presenters/diff_renderer.py +273 -0
  178. roar_cli-0.3.0/roar/presenters/run_report.py +430 -0
  179. roar_cli-0.3.0/roar/presenters/show_renderer.py +482 -0
  180. roar_cli-0.3.0/roar/presenters/spinner.py +104 -0
  181. roar_cli-0.3.0/roar/presenters/terminal.py +81 -0
  182. roar_cli-0.3.0/roar/publish_auth.py +220 -0
  183. roar_cli-0.3.0/roar/require.py +115 -0
  184. roar_cli-0.3.0/roar/scope_config.py +155 -0
  185. roar_cli-0.3.0/roar/telemetry/__init__.py +171 -0
  186. roar_cli-0.3.0/roar/telemetry/_io.py +65 -0
  187. roar_cli-0.3.0/roar/telemetry/capabilities.py +103 -0
  188. roar_cli-0.3.0/roar/telemetry/config.py +328 -0
  189. roar_cli-0.3.0/roar/telemetry/hooks.py +109 -0
  190. roar_cli-0.3.0/roar/telemetry/install.py +42 -0
  191. roar_cli-0.3.0/roar/telemetry/paths.py +72 -0
  192. roar_cli-0.3.0/roar/telemetry/payload.py +144 -0
  193. roar_cli-0.3.0/roar/telemetry/queue.py +122 -0
  194. roar_cli-0.3.0/roar/telemetry/stats.py +284 -0
  195. roar_cli-0.3.0/roar/telemetry/uploader.py +104 -0
  196. roar_cli-0.3.0/roar/tui/__init__.py +19 -0
  197. roar_cli-0.3.0/roar/tui/app.py +100 -0
  198. roar_cli-0.3.0/roar/tui/data.py +252 -0
  199. roar_cli-0.3.0/roar/tui/screens/__init__.py +0 -0
  200. roar_cli-0.3.0/roar/tui/screens/config_editor.py +402 -0
  201. roar_cli-0.3.0/roar/tui/screens/label_editor.py +346 -0
  202. roar_cli-0.3.0/roar/tui/screens/launcher.py +260 -0
  203. roar_cli-0.3.0/roar/tui/screens/log.py +122 -0
  204. roar_cli-0.3.0/roar/tui/screens/main.py +581 -0
  205. roar_cli-0.3.0/roar/tui/screens/search.py +83 -0
  206. roar_cli-0.3.0/roar/tui/screens/session_picker.py +126 -0
  207. roar_cli-0.3.0/roar/tui/tmux.py +127 -0
  208. roar_cli-0.3.0/roar/tui/widgets/__init__.py +1 -0
  209. roar_cli-0.3.0/roar/tui/widgets/detail.py +574 -0
  210. {roar_cli-0.2.10 → roar_cli-0.3.0}/rust/Cargo.lock +4 -0
  211. roar_cli-0.3.0/rust/crates/tracer-fd/Cargo.toml +14 -0
  212. roar_cli-0.3.0/rust/crates/tracer-fd/src/lib.rs +741 -0
  213. roar_cli-0.3.0/rust/crates/tracer-runtime/Cargo.toml +8 -0
  214. roar_cli-0.3.0/rust/crates/tracer-runtime/src/lib.rs +121 -0
  215. roar_cli-0.3.0/rust/crates/tracer-schema/Cargo.toml +11 -0
  216. roar_cli-0.3.0/rust/crates/tracer-schema/src/lib.rs +146 -0
  217. roar_cli-0.3.0/rust/services/proxy/Cargo.lock +2521 -0
  218. roar_cli-0.3.0/rust/services/proxy/Cargo.toml +29 -0
  219. roar_cli-0.3.0/rust/services/proxy/src/forward.rs +331 -0
  220. roar_cli-0.3.0/rust/services/proxy/src/main.rs +301 -0
  221. roar_cli-0.3.0/rust/services/proxy/src/s3.rs +472 -0
  222. roar_cli-0.3.0/rust/tracers/ebpf/common/Cargo.toml +12 -0
  223. roar_cli-0.3.0/rust/tracers/ebpf/common/src/lib.rs +121 -0
  224. roar_cli-0.3.0/rust/tracers/ebpf/probe/Cargo.toml +13 -0
  225. roar_cli-0.3.0/rust/tracers/ebpf/probe/rust-toolchain.toml +3 -0
  226. roar_cli-0.3.0/rust/tracers/ebpf/probe/src/main.rs +919 -0
  227. roar_cli-0.3.0/rust/tracers/ebpf/userspace/Cargo.toml +39 -0
  228. roar_cli-0.3.0/rust/tracers/ebpf/userspace/build.rs +16 -0
  229. roar_cli-0.3.0/rust/tracers/ebpf/userspace/src/attach.rs +132 -0
  230. roar_cli-0.3.0/rust/tracers/ebpf/userspace/src/bin/roard.rs +58 -0
  231. roar_cli-0.3.0/rust/tracers/ebpf/userspace/src/client.rs +104 -0
  232. roar_cli-0.3.0/rust/tracers/ebpf/userspace/src/daemon.rs +706 -0
  233. roar_cli-0.3.0/rust/tracers/ebpf/userspace/src/events.rs +686 -0
  234. roar_cli-0.3.0/rust/tracers/ebpf/userspace/src/ipc.rs +187 -0
  235. roar_cli-0.3.0/rust/tracers/ebpf/userspace/src/lib.rs +6 -0
  236. roar_cli-0.3.0/rust/tracers/ebpf/userspace/src/main.rs +505 -0
  237. roar_cli-0.3.0/rust/tracers/ebpf/userspace/src/state.rs +539 -0
  238. roar_cli-0.3.0/rust/tracers/preload/Cargo.toml +32 -0
  239. roar_cli-0.3.0/rust/tracers/preload/build.rs +7 -0
  240. roar_cli-0.3.0/rust/tracers/preload/src/bin/io_fixture.rs +166 -0
  241. roar_cli-0.3.0/rust/tracers/preload/src/interpose.c +186 -0
  242. roar_cli-0.3.0/rust/tracers/preload/src/ipc.rs +20 -0
  243. roar_cli-0.3.0/rust/tracers/preload/src/lib.rs +1639 -0
  244. roar_cli-0.3.0/rust/tracers/preload/src/main.rs +814 -0
  245. roar_cli-0.3.0/rust/tracers/preload/tests/comprehensive.rs +507 -0
  246. roar_cli-0.3.0/rust/tracers/preload/tests/standalone.rs +200 -0
  247. roar_cli-0.3.0/rust/tracers/ptrace/Cargo.toml +26 -0
  248. roar_cli-0.3.0/rust/tracers/ptrace/rustfmt.toml +4 -0
  249. roar_cli-0.3.0/rust/tracers/ptrace/src/arch.rs +203 -0
  250. roar_cli-0.3.0/rust/tracers/ptrace/src/main.rs +1014 -0
  251. roar_cli-0.3.0/rust/tracers/ptrace/src/seccomp.rs +108 -0
  252. roar_cli-0.3.0/scripts/sync_packaged_rust_artifacts.py +355 -0
  253. roar_cli-0.2.10/roar/application/labels.py +0 -398
  254. roar_cli-0.2.10/roar/application/publish/put_execution.py +0 -627
  255. roar_cli-0.2.10/roar/application/publish/register_execution.py +0 -281
  256. roar_cli-0.2.10/roar/application/publish/runtime.py +0 -33
  257. roar_cli-0.2.10/roar/application/publish/service.py +0 -176
  258. roar_cli-0.2.10/roar/application/publish/session.py +0 -84
  259. roar_cli-0.2.10/roar/application/query/__init__.py +0 -67
  260. roar_cli-0.2.10/roar/application/query/label.py +0 -114
  261. roar_cli-0.2.10/roar/application/query/show.py +0 -325
  262. roar_cli-0.2.10/roar/application/query/status.py +0 -90
  263. roar_cli-0.2.10/roar/application/reproduce/lookup.py +0 -144
  264. roar_cli-0.2.10/roar/bin/libroar_tracer_preload.so +0 -0
  265. roar_cli-0.2.10/roar/bin/roar-proxy +0 -0
  266. roar_cli-0.2.10/roar/bin/roar-tracer +0 -0
  267. roar_cli-0.2.10/roar/bin/roar-tracer-ebpf +0 -0
  268. roar_cli-0.2.10/roar/bin/roar-tracer-preload +0 -0
  269. roar_cli-0.2.10/roar/bin/roard +0 -0
  270. roar_cli-0.2.10/roar/cli/__init__.py +0 -158
  271. roar_cli-0.2.10/roar/cli/commands/init.py +0 -288
  272. roar_cli-0.2.10/roar/cli/commands/register.py +0 -143
  273. roar_cli-0.2.10/roar/cli/commands/show.py +0 -38
  274. roar_cli-0.2.10/roar/cli/commands/status.py +0 -17
  275. roar_cli-0.2.10/roar/cli/commands/tracer.py +0 -304
  276. roar_cli-0.2.10/roar/core/models/__init__.py +0 -140
  277. roar_cli-0.2.10/roar/db/__init__.py +0 -65
  278. roar_cli-0.2.10/roar/execution/runtime/host_execution.py +0 -39
  279. roar_cli-0.2.10/roar/execution/runtime/tracer_backends.py +0 -371
  280. roar_cli-0.2.10/roar/integrations/config/__init__.py +0 -70
  281. roar_cli-0.2.10/roar/integrations/discovery.py +0 -54
  282. roar_cli-0.2.10/roar/integrations/glaas/__init__.py +0 -38
  283. roar_cli-0.2.10/roar/integrations/glaas/registration/__init__.py +0 -13
  284. roar_cli-0.2.10/roar/integrations/glaas/registration/session.py +0 -151
  285. roar_cli-0.2.10/roar/integrations/glaas/transport.py +0 -153
  286. roar_cli-0.2.10/roar/presenters/__init__.py +0 -14
  287. roar_cli-0.2.10/roar/presenters/run_report.py +0 -172
  288. roar_cli-0.2.10/roar/presenters/show_renderer.py +0 -378
  289. roar_cli-0.2.10/roar/presenters/spinner.py +0 -60
  290. {roar_cli-0.2.10 → roar_cli-0.3.0}/LICENSE +0 -0
  291. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/__init__.py +0 -0
  292. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/analyzers/__init__.py +0 -0
  293. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/analyzers/base.py +0 -0
  294. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/analyzers/experiment_trackers.py +0 -0
  295. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/__init__.py +0 -0
  296. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/get/__init__.py +0 -0
  297. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/get/requests.py +0 -0
  298. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/get/results.py +0 -0
  299. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/get/service.py +0 -0
  300. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/get/transfer.py +0 -0
  301. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/publish/__init__.py +0 -0
  302. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/publish/blake3_upgrade.py +0 -0
  303. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/publish/composite_builder.py +0 -0
  304. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/publish/composites.py +0 -0
  305. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/publish/datasets.py +0 -0
  306. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/publish/job_links.py +0 -0
  307. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/publish/lineage_composites.py +0 -0
  308. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/publish/metadata.py +0 -0
  309. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/publish/secrets.py +0 -0
  310. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/publish/source_resolution.py +0 -0
  311. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/publish/targets.py +0 -0
  312. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/query/lineage.py +0 -0
  313. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/reproduce/__init__.py +0 -0
  314. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/run/__init__.py +0 -0
  315. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/application/run/dag_references.py +0 -0
  316. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/backends/__init__.py +0 -0
  317. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/backends/local/__init__.py +0 -0
  318. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/backends/local/plugin.py +0 -0
  319. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/backends/ray/__init__.py +0 -0
  320. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/backends/ray/_agent_names.py +0 -0
  321. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/backends/ray/collector.py +0 -0
  322. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/backends/ray/config.py +0 -0
  323. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/backends/ray/constants.py +0 -0
  324. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/backends/ray/fragment.py +0 -0
  325. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/backends/ray/node_agent.py +0 -0
  326. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/backends/ray/plugin.py +0 -0
  327. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/backends/ray/proxy_fragments.py +0 -0
  328. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/backends/ray/roar_worker.py +0 -0
  329. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/backends/ray/s3_key_paths.py +0 -0
  330. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/backends/ray/submit.py +0 -0
  331. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/cli/commands/env.py +0 -0
  332. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/cli/commands/get.py +0 -0
  333. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/cli/commands/pop.py +0 -0
  334. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/cli/commands/proxy.py +0 -0
  335. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/cli/context.py +0 -0
  336. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/cli/decorators.py +0 -0
  337. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/digests.py +0 -0
  338. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/dto/__init__.py +0 -0
  339. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/dto/registration.py +0 -0
  340. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/interfaces/__init__.py +0 -0
  341. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/interfaces/config.py +0 -0
  342. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/interfaces/lineage.py +0 -0
  343. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/interfaces/logger.py +0 -0
  344. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/interfaces/presenter.py +0 -0
  345. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/interfaces/run.py +0 -0
  346. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/interfaces/services.py +0 -0
  347. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/interfaces/telemetry.py +0 -0
  348. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/interfaces/vcs.py +0 -0
  349. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/logging.py +0 -0
  350. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/models/artifact.py +0 -0
  351. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/models/base.py +0 -0
  352. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/models/dag.py +0 -0
  353. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/models/dataset_identifier.py +0 -0
  354. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/models/glaas.py +0 -0
  355. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/models/job.py +0 -0
  356. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/models/lineage.py +0 -0
  357. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/models/session.py +0 -0
  358. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/models/telemetry.py +0 -0
  359. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/models/vcs.py +0 -0
  360. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/operation_metadata.py +0 -0
  361. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/tracer_modes.py +0 -0
  362. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/core/validation.py +0 -0
  363. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/db/engine.py +0 -0
  364. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/db/hashing/__init__.py +0 -0
  365. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/db/hashing/backend.py +0 -0
  366. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/db/hashing/blake3.py +0 -0
  367. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/db/repositories/__init__.py +0 -0
  368. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/db/repositories/artifact.py +0 -0
  369. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/db/repositories/collection.py +0 -0
  370. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/db/repositories/composite.py +0 -0
  371. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/db/repositories/hash_cache.py +0 -0
  372. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/db/repositories/job.py +0 -0
  373. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/db/services/__init__.py +0 -0
  374. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/db/services/hashing.py +0 -0
  375. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/db/services/lineage.py +0 -0
  376. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/db/services/session.py +0 -0
  377. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/__init__.py +0 -0
  378. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/cluster/__init__.py +0 -0
  379. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/cluster/bridge.py +0 -0
  380. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/cluster/proxy.py +0 -0
  381. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/cluster/proxy_config.py +0 -0
  382. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/fragments/__init__.py +0 -0
  383. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/fragments/models.py +0 -0
  384. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/fragments/reconstitution.py +0 -0
  385. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/fragments/sessions.py +0 -0
  386. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/fragments/transport.py +0 -0
  387. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/framework/__init__.py +0 -0
  388. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/framework/contract.py +0 -0
  389. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/framework/planning.py +0 -0
  390. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/framework/runtime_imports.py +0 -0
  391. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/provenance/__init__.py +0 -0
  392. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/provenance/build_pip_collector.py +0 -0
  393. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/provenance/build_tool_collector.py +0 -0
  394. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/provenance/package_collector.py +0 -0
  395. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/provenance/process_summarizer.py +0 -0
  396. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/provenance/runtime_collector.py +0 -0
  397. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/recording/__init__.py +0 -0
  398. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/recording/dataset_identifier.py +0 -0
  399. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/recording/dataset_profile.py +0 -0
  400. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/reproduction/__init__.py +0 -0
  401. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/reproduction/environment_setup.py +0 -0
  402. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/reproduction/installers.py +0 -0
  403. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/reproduction/pipeline_executor.py +0 -0
  404. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/reproduction/pipeline_metadata.py +0 -0
  405. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/runtime/backup.py +0 -0
  406. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/runtime/driver_entrypoint.py +0 -0
  407. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/runtime/inject/__init__.py +0 -0
  408. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/runtime/inject/support.py +0 -0
  409. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/runtime/signal_handler.py +0 -0
  410. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/execution/runtime/worker_bootstrap.py +0 -0
  411. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/filters/__init__.py +0 -0
  412. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/filters/omit.py +0 -0
  413. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/download/__init__.py +0 -0
  414. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/download/base.py +0 -0
  415. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/download/gcs.py +0 -0
  416. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/download/get.py +0 -0
  417. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/download/http.py +0 -0
  418. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/download/noop.py +0 -0
  419. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/download/s3.py +0 -0
  420. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/git/__init__.py +0 -0
  421. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/git/base.py +0 -0
  422. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/git/context.py +0 -0
  423. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/glaas/auth.py +0 -0
  424. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/glaas/fragment_streamer.py +0 -0
  425. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/glaas/registration/_artifact_ref.py +0 -0
  426. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/glaas/registration/artifact.py +0 -0
  427. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/registry.py +0 -0
  428. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/resolution.py +0 -0
  429. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/storage/__init__.py +0 -0
  430. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/storage/base.py +0 -0
  431. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/storage/gcs.py +0 -0
  432. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/storage/memory.py +0 -0
  433. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/storage/noop.py +0 -0
  434. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/storage/publish.py +0 -0
  435. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/storage/s3.py +0 -0
  436. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/telemetry/__init__.py +0 -0
  437. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/telemetry/base.py +0 -0
  438. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/integrations/telemetry/wandb.py +0 -0
  439. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/presenters/console.py +0 -0
  440. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/presenters/dag_renderer.py +0 -0
  441. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/presenters/formatting.py +0 -0
  442. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/presenters/null.py +0 -0
  443. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/utils/__init__.py +0 -0
  444. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/utils/cloud.py +0 -0
  445. {roar_cli-0.2.10 → roar_cli-0.3.0}/roar/utils/git_url.py +0 -0
  446. {roar_cli-0.2.10 → roar_cli-0.3.0}/rust/Cargo.toml +0 -0
  447. {roar_cli-0.2.10 → roar_cli-0.3.0}/rust/crates/artifact-hash-core/Cargo.toml +0 -0
  448. {roar_cli-0.2.10 → roar_cli-0.3.0}/rust/crates/artifact-hash-core/src/lib.rs +0 -0
  449. {roar_cli-0.2.10 → roar_cli-0.3.0}/rust/crates/artifact-hash-py/Cargo.toml +0 -0
  450. {roar_cli-0.2.10 → roar_cli-0.3.0}/rust/crates/artifact-hash-py/src/lib.rs +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: roar-cli
3
- Version: 0.2.10
3
+ Version: 0.3.0
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: Intended Audience :: Science/Research
@@ -18,10 +18,12 @@ Requires-Dist: click>=8.1.0
18
18
  Requires-Dist: cryptography>=42.0.0
19
19
  Requires-Dist: dependency-injector>=4.40.0
20
20
  Requires-Dist: msgpack>=1.0.0
21
+ Requires-Dist: pyyaml>=6.0
21
22
  Requires-Dist: sqlalchemy>=2.0.0
22
23
  Requires-Dist: pysqlite3-binary>=0.5.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'
23
24
  Requires-Dist: pydantic>=2.0.0
24
25
  Requires-Dist: pydantic-settings>=2.0.0
26
+ Requires-Dist: textual>=0.80
25
27
  Requires-Dist: tomli>=2.0.0 ; python_full_version < '3.11'
26
28
  Requires-Dist: pytest>=7.0.0 ; extra == 'dev'
27
29
  Requires-Dist: pytest-timeout>=2.0.0 ; extra == 'dev'
@@ -65,6 +67,11 @@ uv pip install roar-cli
65
67
 
66
68
  Requires Python 3.10+.
67
69
 
70
+ > For the full prereqs, platform support matrix, tracer-backend setup,
71
+ > macOS SIP notes, and sdist build steps, see the canonical
72
+ > [Installing roar](https://glaas.ai/docs/roar-guide#installing-roar) docs page.
73
+ > What's below is a TL;DR.
74
+
68
75
  ### Platform Support
69
76
 
70
77
  | Platform | Status |
@@ -74,7 +81,12 @@ Requires Python 3.10+.
74
81
  | macOS | 🚧 Experimental ([limitations](#macos-tracing-limitations)) |
75
82
  | Windows | Coming soon |
76
83
 
77
- PyPI wheels are published for Linux and macOS (`x86_64` and `arm64`).
84
+ PyPI wheels are published for Linux (`x86_64`, `aarch64`) and macOS (`x86_64`, `arm64`).
85
+
86
+ If a matching wheel isn't available, `pip install` falls through to the
87
+ source distribution. The sdist ships the Rust tracer source but no
88
+ pre-built binaries, so it requires a C toolchain (`gcc` / `clang`), Rust
89
+ (`rustup`), and a few minutes to compile the tracers on first install.
78
90
 
79
91
  ### Development Installation
80
92
 
@@ -83,12 +95,20 @@ PyPI wheels are published for Linux and macOS (`x86_64` and `arm64`).
83
95
  git clone https://github.com/treqs/roar.git
84
96
  cd roar
85
97
 
86
- # Install in development mode
87
- uv pip install -e ".[dev]"
88
- # or without uv
89
- pip install -e ".[dev]"
98
+ # One-shot dev install: Python package + Rust tracer binaries
99
+ bash scripts/install-dev.sh
90
100
  ```
91
101
 
102
+ `scripts/install-dev.sh` runs `pip install -e ".[dev]"` (preferring `uv`
103
+ when available) and then builds the Rust tracer binaries
104
+ (`roar-tracer`, `roar-tracer-preload`, `roar-tracer-ebpf`, `roard`,
105
+ `roar-proxy`) and stages them into `roar/bin/`. A bare
106
+ `pip install -e .` does *not* build the tracer binaries because they
107
+ live in separate cargo crates outside the maturin manifest, so
108
+ `roar run` would fail with "No tracer binary found" until the script
109
+ runs. See [Building from source](#building-from-source) below for
110
+ details and the manual flow.
111
+
92
112
  ## Quick Start
93
113
 
94
114
  ```bash
@@ -102,6 +122,53 @@ roar run python train.py --data features.parquet --output model.pt
102
122
  roar run python evaluate.py --model model.pt --output metrics.json
103
123
  ```
104
124
 
125
+ ## Product Telemetry
126
+
127
+ `roar` keeps anonymous product telemetry counters by default so maintainers can
128
+ prioritize reliability and platform support work. Telemetry is local-first:
129
+ small counters are stored under the XDG cache directory and uploaded
130
+ opportunistically in a background process. Telemetry never uploads file
131
+ contents, command arguments, file paths, environment variables, repository
132
+ names, hostnames, usernames, lineage payloads, or GLaaS auth tokens.
133
+
134
+ Uploaded payloads are limited to:
135
+
136
+ - A random `install_id`, event id, sequence number, and coarse timestamps.
137
+ - The installed `roar` version.
138
+ - Coarse platform values: OS family, CPU architecture, Python major/minor,
139
+ shell name, installer class, and whether the process appears containerized.
140
+ - Allowlisted command counters such as `run`, `init`, `register`, and
141
+ successful or failed `roar run` outcomes.
142
+ - Allowlisted tracer selection counters and coarse feature capability flags.
143
+
144
+ Inspect the current status and exact next payload preview:
145
+
146
+ ```bash
147
+ roar telemetry --status
148
+ roar telemetry --print
149
+ ```
150
+
151
+ When `telemetry.endpoint` is unset, roar derives the upload endpoint from the
152
+ configured GLaaS API URL. For example, `glaas.url = "https://api.dev.glaas.ai"`
153
+ uses `https://api.dev.glaas.ai/api/v1/telemetry/roar`.
154
+
155
+ Disable telemetry globally or for a single project:
156
+
157
+ ```bash
158
+ roar telemetry --disable
159
+ roar config set telemetry.enabled false
160
+ ```
161
+
162
+ Environment opt-outs always win over saved config:
163
+
164
+ ```bash
165
+ DO_NOT_TRACK=1 roar run python train.py
166
+ ROAR_NO_TELEMETRY=1 roar run python train.py
167
+ ```
168
+
169
+ Telemetry is also suppressed automatically in CI, pytest, and Roar-managed
170
+ backend worker environments such as Ray and OSMO jobs.
171
+
105
172
  ## Tracer Backends
106
173
 
107
174
  `roar run` relies on a Rust "tracer" binary to observe file I/O. If you see an error like "No tracer binary found", build one of the backends below.
@@ -135,10 +202,16 @@ By default, `roar` uses `auto` mode: prefer eBPF, then preload, then ptrace.
135
202
 
136
203
  ```bash
137
204
  # Show what roar can currently find and whether it looks usable
138
- roar tracer status
205
+ roar tracer
139
206
 
140
207
  # Set a default backend (auto|ebpf|preload|ptrace)
141
- roar tracer set-default preload
208
+ roar tracer use preload
209
+
210
+ # Deep preflight for one backend, with the exact failure cause
211
+ roar tracer check ebpf
212
+
213
+ # One-shot host setup for the eBPF backend (applies CAP_BPF)
214
+ roar tracer enable ebpf
142
215
  ```
143
216
 
144
217
  ### macOS Tracing Limitations
@@ -213,9 +286,13 @@ roar reproduce abc123de --run --package-sync
213
286
 
214
287
  # Show all required packages (no truncation)
215
288
  roar reproduce abc123de --list-requirements
289
+
290
+ # Reproduce a full lineage/session by its 64-character DAG hash
291
+ roar reproduce <lineage-hash> --lineage
292
+ roar reproduce <lineage-hash> --lineage --run
216
293
  ```
217
294
 
218
- Full reproduction clones the git repository, creates a virtual environment, installs recorded packages, and runs the pipeline steps.
295
+ Unflagged `roar reproduce <hash>` continues to default to artifact reproduction. Full reproduction clones the git repository, creates a virtual environment, installs recorded packages, and runs the pipeline steps.
219
296
 
220
297
  ### `roar build <command>`
221
298
 
@@ -234,7 +311,7 @@ Use for setup that should run before the main pipeline (compiling, installing).
234
311
 
235
312
  ### `roar auth`
236
313
 
237
- Manage GLaaS authentication.
314
+ Manage SSH-key-based GLaaS registration settings.
238
315
 
239
316
  ```bash
240
317
  roar auth register # Show SSH public key for registration
@@ -242,7 +319,7 @@ roar auth test # Test connection to GLaaS server
242
319
  roar auth status # Show current auth status
243
320
  ```
244
321
 
245
- To register with GLaaS:
322
+ To register SSH auth with GLaaS:
246
323
 
247
324
  1. Run `roar auth register` to display your public key
248
325
  2. Sign up at <https://glaas.ai> where you can paste your public key
@@ -270,6 +347,7 @@ Run `roar config list` to see all available options with descriptions. Common op
270
347
  | `filters.ignore_tmp_files` | true | Ignore /tmp files |
271
348
  | `glaas.url` | <https://api.glaas.ai> | GLaaS server URL |
272
349
  | `glaas.web_url` | <https://glaas.ai> | GLaaS web UI URL |
350
+ | `registration.public_by_default` | false | Default `register`/`put` visibility |
273
351
  | `registration.omit.enabled` | true | Enable secret filtering |
274
352
  | `hash.primary` | blake3 | Primary hash algorithm |
275
353
  | `logging.level` | warning | Log level (debug, info, warning, error) |
@@ -304,6 +382,45 @@ Display recent job execution history.
304
382
  roar log # Show recent job history
305
383
  ```
306
384
 
385
+ ### `roar label`
386
+
387
+ Manage local labels for DAGs (sessions), jobs, and artifacts.
388
+
389
+ ```bash
390
+ # Set labels (patches the current label document)
391
+ roar label set dag current owner=alice team=ml
392
+ roar label set job @2 phase=train lr=0.001
393
+ roar label set artifact ./outputs/model.pt model.name=resnet50 stage=baseline
394
+
395
+ # Remove labels
396
+ roar label unset artifact ./outputs/model.pt stage
397
+
398
+ # Copy labels from one entity to another
399
+ roar label cp job @2 artifact ./outputs/model.pt
400
+
401
+ # Show current labels
402
+ roar label show dag current
403
+ roar label show job @2
404
+ roar label show artifact ./outputs/model.pt
405
+
406
+ # Show label history (all versions)
407
+ roar label history dag current
408
+ roar label history artifact <artifact-hash>
409
+
410
+ # Sync local user-managed labels to GLaaS
411
+ roar label sync
412
+ roar label sync job @2
413
+ roar label sync artifact ./outputs/model.pt --dry-run
414
+ ```
415
+
416
+ **Entity targets:**
417
+
418
+ - `dag`: `current` or a session hash prefix
419
+ - `job`: step ref (`@N` or `@BN`) or job UID
420
+ - `artifact`: file path or artifact hash
421
+
422
+ Labels are stored locally by default. You can explicitly reconcile current local user-managed labels to GLaaS with `roar label sync ...`, and labels are also included in lineage registration/publish flows when supported by the configured server.
423
+
307
424
  ### `roar register`
308
425
 
309
426
  Register session, job, step, or artifact lineage with GLaaS.
@@ -330,6 +447,14 @@ roar register s3://bucket/run/out # Register a tracked remote S3 artifact
330
447
 
331
448
  For bare 8-character hex targets, `roar register` prefers a matching local job UID before falling back to session-hash-prefix resolution.
332
449
 
450
+ To make public publication the default for `roar register` and `roar put`:
451
+
452
+ ```bash
453
+ roar config set registration.public_by_default true
454
+ ```
455
+
456
+ Override per command with `--public` or `--private`. Use `--anonymous` on `roar register` or `roar put` to force public anonymous publication even when local GLaaS auth is configured. When public visibility comes from config rather than an explicit flag, `roar` prints a warning before publishing.
457
+
333
458
  ### `roar put`
334
459
 
335
460
  Upload artifacts to cloud storage and register lineage with GLaaS.
@@ -345,6 +470,8 @@ roar put @2 s3://bucket/outputs/ -m "Step 2 outputs"
345
470
  - `-m, --message` — Description of the upload (required)
346
471
  - `--dry-run` — Preview without uploading
347
472
  - `--no-tag` — Skip git tagging
473
+ - `--public` / `--private` — Override configured publish visibility
474
+ - `--anonymous` — Force public anonymous registration even when local GLaaS auth is configured
348
475
 
349
476
  **Source formats:**
350
477
 
@@ -397,12 +524,27 @@ roar show ./output/model.pkl # Show artifact by path
397
524
 
398
525
  ### `roar status`
399
526
 
400
- Show a summary of the active session.
527
+ Show a summary of the active session, including the current DAG hash.
401
528
 
402
529
  ```bash
403
530
  roar status
404
531
  ```
405
532
 
533
+ ### `roar workflow`
534
+
535
+ Generate TReqs workflow YAML from a local session.
536
+
537
+ ```bash
538
+ roar workflow generate
539
+ roar workflow generate .treqs/workflows/train.yaml
540
+ roar workflow generate --session 8d7a1f2c --name train
541
+ ```
542
+
543
+ Generated workflows follow the TReqs workflow format: `name`, optional
544
+ `working_directory`, and one YAML key per task in session step order.
545
+ By default, `roar workflow generate` uses the active session and writes the
546
+ workflow under `.treqs/workflows/` at the repo root.
547
+
406
548
  ### `roar pop`
407
549
 
408
550
  Remove the most recent job from the active session. Useful for undoing a mistaken `roar run` or correcting the pipeline before registration.
@@ -513,10 +655,62 @@ roar auth test
513
655
  ### Setup
514
656
 
515
657
  ```bash
516
- # Install dev dependencies
517
- uv pip install -e ".[dev]"
658
+ bash scripts/install-dev.sh
518
659
  ```
519
660
 
661
+ The script handles Python install + Rust tracer builds + staging
662
+ binaries into `roar/bin/`. See [Building from source](#building-from-source)
663
+ for what it does and how to run the steps manually.
664
+
665
+ ### Building from source
666
+
667
+ `pip install -e .` runs `maturin develop` to build the `artifact-hash-py`
668
+ pyo3 extension, but the tracer binaries (`roar-tracer*`, `roard`,
669
+ `roar-proxy`) are separate cargo packages outside the maturin manifest.
670
+ The PyPI wheels bundle them under `roar/bin/`; an editable install
671
+ does not, and `roar run` fails until they're built and staged.
672
+
673
+ The fastest path is `scripts/install-dev.sh`, which does this:
674
+
675
+ ```bash
676
+ # 1. Python package (editable, with dev extras)
677
+ uv pip install -e ".[dev]" # or pip install -e ".[dev]"
678
+
679
+ # 2. Build the per-platform tracer crates
680
+ cd rust
681
+ # Linux:
682
+ cargo build --release \
683
+ -p roar-tracer -p roar-tracer-preload -p roar-tracer-ebpf -p roar-proxy
684
+ # macOS:
685
+ cargo build --release -p roar-tracer-preload -p roar-proxy
686
+
687
+ # 3. Stage the built binaries where the editable install looks for them
688
+ cd ..
689
+ mkdir -p roar/bin
690
+ # Linux: install five binaries + the preload .so
691
+ install -m 0755 rust/target/release/{roar-tracer,roar-tracer-preload,roar-tracer-ebpf,roard,roar-proxy} roar/bin/
692
+ install -m 0755 rust/target/release/libroar_tracer_preload.so roar/bin/
693
+ # macOS: install the launcher + the preload .dylib + roar-proxy
694
+ # install -m 0755 rust/target/release/{roar-tracer-preload,roar-proxy} roar/bin/
695
+ # install -m 0755 rust/target/release/libroar_tracer_preload.dylib roar/bin/
696
+ ```
697
+
698
+ The eBPF tracer (Linux only) needs `bpf-linker` and a Rust nightly
699
+ toolchain with `rust-src` for the BPF probe build:
700
+
701
+ ```bash
702
+ cargo install bpf-linker
703
+ rustup install nightly
704
+ rustup component add rust-src --toolchain nightly
705
+ ```
706
+
707
+ `scripts/install-dev.sh` skips eBPF gracefully when `bpf-linker` is
708
+ absent — the other tracers still work.
709
+
710
+ Verify the install with `roar tracer`; every backend listed should be
711
+ `ready` (or have a clear platform-specific reason it isn't, like
712
+ `perf_event_paranoid=4 (needs <= 1)` for eBPF on a hardened kernel).
713
+
520
714
  ### Running Quality Checks
521
715
 
522
716
  ```bash
@@ -18,6 +18,11 @@ uv pip install roar-cli
18
18
 
19
19
  Requires Python 3.10+.
20
20
 
21
+ > For the full prereqs, platform support matrix, tracer-backend setup,
22
+ > macOS SIP notes, and sdist build steps, see the canonical
23
+ > [Installing roar](https://glaas.ai/docs/roar-guide#installing-roar) docs page.
24
+ > What's below is a TL;DR.
25
+
21
26
  ### Platform Support
22
27
 
23
28
  | Platform | Status |
@@ -27,7 +32,12 @@ Requires Python 3.10+.
27
32
  | macOS | 🚧 Experimental ([limitations](#macos-tracing-limitations)) |
28
33
  | Windows | Coming soon |
29
34
 
30
- PyPI wheels are published for Linux and macOS (`x86_64` and `arm64`).
35
+ PyPI wheels are published for Linux (`x86_64`, `aarch64`) and macOS (`x86_64`, `arm64`).
36
+
37
+ If a matching wheel isn't available, `pip install` falls through to the
38
+ source distribution. The sdist ships the Rust tracer source but no
39
+ pre-built binaries, so it requires a C toolchain (`gcc` / `clang`), Rust
40
+ (`rustup`), and a few minutes to compile the tracers on first install.
31
41
 
32
42
  ### Development Installation
33
43
 
@@ -36,12 +46,20 @@ PyPI wheels are published for Linux and macOS (`x86_64` and `arm64`).
36
46
  git clone https://github.com/treqs/roar.git
37
47
  cd roar
38
48
 
39
- # Install in development mode
40
- uv pip install -e ".[dev]"
41
- # or without uv
42
- pip install -e ".[dev]"
49
+ # One-shot dev install: Python package + Rust tracer binaries
50
+ bash scripts/install-dev.sh
43
51
  ```
44
52
 
53
+ `scripts/install-dev.sh` runs `pip install -e ".[dev]"` (preferring `uv`
54
+ when available) and then builds the Rust tracer binaries
55
+ (`roar-tracer`, `roar-tracer-preload`, `roar-tracer-ebpf`, `roard`,
56
+ `roar-proxy`) and stages them into `roar/bin/`. A bare
57
+ `pip install -e .` does *not* build the tracer binaries because they
58
+ live in separate cargo crates outside the maturin manifest, so
59
+ `roar run` would fail with "No tracer binary found" until the script
60
+ runs. See [Building from source](#building-from-source) below for
61
+ details and the manual flow.
62
+
45
63
  ## Quick Start
46
64
 
47
65
  ```bash
@@ -55,6 +73,53 @@ roar run python train.py --data features.parquet --output model.pt
55
73
  roar run python evaluate.py --model model.pt --output metrics.json
56
74
  ```
57
75
 
76
+ ## Product Telemetry
77
+
78
+ `roar` keeps anonymous product telemetry counters by default so maintainers can
79
+ prioritize reliability and platform support work. Telemetry is local-first:
80
+ small counters are stored under the XDG cache directory and uploaded
81
+ opportunistically in a background process. Telemetry never uploads file
82
+ contents, command arguments, file paths, environment variables, repository
83
+ names, hostnames, usernames, lineage payloads, or GLaaS auth tokens.
84
+
85
+ Uploaded payloads are limited to:
86
+
87
+ - A random `install_id`, event id, sequence number, and coarse timestamps.
88
+ - The installed `roar` version.
89
+ - Coarse platform values: OS family, CPU architecture, Python major/minor,
90
+ shell name, installer class, and whether the process appears containerized.
91
+ - Allowlisted command counters such as `run`, `init`, `register`, and
92
+ successful or failed `roar run` outcomes.
93
+ - Allowlisted tracer selection counters and coarse feature capability flags.
94
+
95
+ Inspect the current status and exact next payload preview:
96
+
97
+ ```bash
98
+ roar telemetry --status
99
+ roar telemetry --print
100
+ ```
101
+
102
+ When `telemetry.endpoint` is unset, roar derives the upload endpoint from the
103
+ configured GLaaS API URL. For example, `glaas.url = "https://api.dev.glaas.ai"`
104
+ uses `https://api.dev.glaas.ai/api/v1/telemetry/roar`.
105
+
106
+ Disable telemetry globally or for a single project:
107
+
108
+ ```bash
109
+ roar telemetry --disable
110
+ roar config set telemetry.enabled false
111
+ ```
112
+
113
+ Environment opt-outs always win over saved config:
114
+
115
+ ```bash
116
+ DO_NOT_TRACK=1 roar run python train.py
117
+ ROAR_NO_TELEMETRY=1 roar run python train.py
118
+ ```
119
+
120
+ Telemetry is also suppressed automatically in CI, pytest, and Roar-managed
121
+ backend worker environments such as Ray and OSMO jobs.
122
+
58
123
  ## Tracer Backends
59
124
 
60
125
  `roar run` relies on a Rust "tracer" binary to observe file I/O. If you see an error like "No tracer binary found", build one of the backends below.
@@ -88,10 +153,16 @@ By default, `roar` uses `auto` mode: prefer eBPF, then preload, then ptrace.
88
153
 
89
154
  ```bash
90
155
  # Show what roar can currently find and whether it looks usable
91
- roar tracer status
156
+ roar tracer
92
157
 
93
158
  # Set a default backend (auto|ebpf|preload|ptrace)
94
- roar tracer set-default preload
159
+ roar tracer use preload
160
+
161
+ # Deep preflight for one backend, with the exact failure cause
162
+ roar tracer check ebpf
163
+
164
+ # One-shot host setup for the eBPF backend (applies CAP_BPF)
165
+ roar tracer enable ebpf
95
166
  ```
96
167
 
97
168
  ### macOS Tracing Limitations
@@ -166,9 +237,13 @@ roar reproduce abc123de --run --package-sync
166
237
 
167
238
  # Show all required packages (no truncation)
168
239
  roar reproduce abc123de --list-requirements
240
+
241
+ # Reproduce a full lineage/session by its 64-character DAG hash
242
+ roar reproduce <lineage-hash> --lineage
243
+ roar reproduce <lineage-hash> --lineage --run
169
244
  ```
170
245
 
171
- Full reproduction clones the git repository, creates a virtual environment, installs recorded packages, and runs the pipeline steps.
246
+ Unflagged `roar reproduce <hash>` continues to default to artifact reproduction. Full reproduction clones the git repository, creates a virtual environment, installs recorded packages, and runs the pipeline steps.
172
247
 
173
248
  ### `roar build <command>`
174
249
 
@@ -187,7 +262,7 @@ Use for setup that should run before the main pipeline (compiling, installing).
187
262
 
188
263
  ### `roar auth`
189
264
 
190
- Manage GLaaS authentication.
265
+ Manage SSH-key-based GLaaS registration settings.
191
266
 
192
267
  ```bash
193
268
  roar auth register # Show SSH public key for registration
@@ -195,7 +270,7 @@ roar auth test # Test connection to GLaaS server
195
270
  roar auth status # Show current auth status
196
271
  ```
197
272
 
198
- To register with GLaaS:
273
+ To register SSH auth with GLaaS:
199
274
 
200
275
  1. Run `roar auth register` to display your public key
201
276
  2. Sign up at <https://glaas.ai> where you can paste your public key
@@ -223,6 +298,7 @@ Run `roar config list` to see all available options with descriptions. Common op
223
298
  | `filters.ignore_tmp_files` | true | Ignore /tmp files |
224
299
  | `glaas.url` | <https://api.glaas.ai> | GLaaS server URL |
225
300
  | `glaas.web_url` | <https://glaas.ai> | GLaaS web UI URL |
301
+ | `registration.public_by_default` | false | Default `register`/`put` visibility |
226
302
  | `registration.omit.enabled` | true | Enable secret filtering |
227
303
  | `hash.primary` | blake3 | Primary hash algorithm |
228
304
  | `logging.level` | warning | Log level (debug, info, warning, error) |
@@ -257,6 +333,45 @@ Display recent job execution history.
257
333
  roar log # Show recent job history
258
334
  ```
259
335
 
336
+ ### `roar label`
337
+
338
+ Manage local labels for DAGs (sessions), jobs, and artifacts.
339
+
340
+ ```bash
341
+ # Set labels (patches the current label document)
342
+ roar label set dag current owner=alice team=ml
343
+ roar label set job @2 phase=train lr=0.001
344
+ roar label set artifact ./outputs/model.pt model.name=resnet50 stage=baseline
345
+
346
+ # Remove labels
347
+ roar label unset artifact ./outputs/model.pt stage
348
+
349
+ # Copy labels from one entity to another
350
+ roar label cp job @2 artifact ./outputs/model.pt
351
+
352
+ # Show current labels
353
+ roar label show dag current
354
+ roar label show job @2
355
+ roar label show artifact ./outputs/model.pt
356
+
357
+ # Show label history (all versions)
358
+ roar label history dag current
359
+ roar label history artifact <artifact-hash>
360
+
361
+ # Sync local user-managed labels to GLaaS
362
+ roar label sync
363
+ roar label sync job @2
364
+ roar label sync artifact ./outputs/model.pt --dry-run
365
+ ```
366
+
367
+ **Entity targets:**
368
+
369
+ - `dag`: `current` or a session hash prefix
370
+ - `job`: step ref (`@N` or `@BN`) or job UID
371
+ - `artifact`: file path or artifact hash
372
+
373
+ Labels are stored locally by default. You can explicitly reconcile current local user-managed labels to GLaaS with `roar label sync ...`, and labels are also included in lineage registration/publish flows when supported by the configured server.
374
+
260
375
  ### `roar register`
261
376
 
262
377
  Register session, job, step, or artifact lineage with GLaaS.
@@ -283,6 +398,14 @@ roar register s3://bucket/run/out # Register a tracked remote S3 artifact
283
398
 
284
399
  For bare 8-character hex targets, `roar register` prefers a matching local job UID before falling back to session-hash-prefix resolution.
285
400
 
401
+ To make public publication the default for `roar register` and `roar put`:
402
+
403
+ ```bash
404
+ roar config set registration.public_by_default true
405
+ ```
406
+
407
+ Override per command with `--public` or `--private`. Use `--anonymous` on `roar register` or `roar put` to force public anonymous publication even when local GLaaS auth is configured. When public visibility comes from config rather than an explicit flag, `roar` prints a warning before publishing.
408
+
286
409
  ### `roar put`
287
410
 
288
411
  Upload artifacts to cloud storage and register lineage with GLaaS.
@@ -298,6 +421,8 @@ roar put @2 s3://bucket/outputs/ -m "Step 2 outputs"
298
421
  - `-m, --message` — Description of the upload (required)
299
422
  - `--dry-run` — Preview without uploading
300
423
  - `--no-tag` — Skip git tagging
424
+ - `--public` / `--private` — Override configured publish visibility
425
+ - `--anonymous` — Force public anonymous registration even when local GLaaS auth is configured
301
426
 
302
427
  **Source formats:**
303
428
 
@@ -350,12 +475,27 @@ roar show ./output/model.pkl # Show artifact by path
350
475
 
351
476
  ### `roar status`
352
477
 
353
- Show a summary of the active session.
478
+ Show a summary of the active session, including the current DAG hash.
354
479
 
355
480
  ```bash
356
481
  roar status
357
482
  ```
358
483
 
484
+ ### `roar workflow`
485
+
486
+ Generate TReqs workflow YAML from a local session.
487
+
488
+ ```bash
489
+ roar workflow generate
490
+ roar workflow generate .treqs/workflows/train.yaml
491
+ roar workflow generate --session 8d7a1f2c --name train
492
+ ```
493
+
494
+ Generated workflows follow the TReqs workflow format: `name`, optional
495
+ `working_directory`, and one YAML key per task in session step order.
496
+ By default, `roar workflow generate` uses the active session and writes the
497
+ workflow under `.treqs/workflows/` at the repo root.
498
+
359
499
  ### `roar pop`
360
500
 
361
501
  Remove the most recent job from the active session. Useful for undoing a mistaken `roar run` or correcting the pipeline before registration.
@@ -466,10 +606,62 @@ roar auth test
466
606
  ### Setup
467
607
 
468
608
  ```bash
469
- # Install dev dependencies
470
- uv pip install -e ".[dev]"
609
+ bash scripts/install-dev.sh
471
610
  ```
472
611
 
612
+ The script handles Python install + Rust tracer builds + staging
613
+ binaries into `roar/bin/`. See [Building from source](#building-from-source)
614
+ for what it does and how to run the steps manually.
615
+
616
+ ### Building from source
617
+
618
+ `pip install -e .` runs `maturin develop` to build the `artifact-hash-py`
619
+ pyo3 extension, but the tracer binaries (`roar-tracer*`, `roard`,
620
+ `roar-proxy`) are separate cargo packages outside the maturin manifest.
621
+ The PyPI wheels bundle them under `roar/bin/`; an editable install
622
+ does not, and `roar run` fails until they're built and staged.
623
+
624
+ The fastest path is `scripts/install-dev.sh`, which does this:
625
+
626
+ ```bash
627
+ # 1. Python package (editable, with dev extras)
628
+ uv pip install -e ".[dev]" # or pip install -e ".[dev]"
629
+
630
+ # 2. Build the per-platform tracer crates
631
+ cd rust
632
+ # Linux:
633
+ cargo build --release \
634
+ -p roar-tracer -p roar-tracer-preload -p roar-tracer-ebpf -p roar-proxy
635
+ # macOS:
636
+ cargo build --release -p roar-tracer-preload -p roar-proxy
637
+
638
+ # 3. Stage the built binaries where the editable install looks for them
639
+ cd ..
640
+ mkdir -p roar/bin
641
+ # Linux: install five binaries + the preload .so
642
+ install -m 0755 rust/target/release/{roar-tracer,roar-tracer-preload,roar-tracer-ebpf,roard,roar-proxy} roar/bin/
643
+ install -m 0755 rust/target/release/libroar_tracer_preload.so roar/bin/
644
+ # macOS: install the launcher + the preload .dylib + roar-proxy
645
+ # install -m 0755 rust/target/release/{roar-tracer-preload,roar-proxy} roar/bin/
646
+ # install -m 0755 rust/target/release/libroar_tracer_preload.dylib roar/bin/
647
+ ```
648
+
649
+ The eBPF tracer (Linux only) needs `bpf-linker` and a Rust nightly
650
+ toolchain with `rust-src` for the BPF probe build:
651
+
652
+ ```bash
653
+ cargo install bpf-linker
654
+ rustup install nightly
655
+ rustup component add rust-src --toolchain nightly
656
+ ```
657
+
658
+ `scripts/install-dev.sh` skips eBPF gracefully when `bpf-linker` is
659
+ absent — the other tracers still work.
660
+
661
+ Verify the install with `roar tracer`; every backend listed should be
662
+ `ready` (or have a clear platform-specific reason it isn't, like
663
+ `perf_event_paranoid=4 (needs <= 1)` for eBPF on a hardened kernel).
664
+
473
665
  ### Running Quality Checks
474
666
 
475
667
  ```bash