roar-cli 0.2.11__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 (437) hide show
  1. {roar_cli-0.2.11 → roar_cli-0.3.0}/PKG-INFO +176 -14
  2. {roar_cli-0.2.11 → roar_cli-0.3.0}/README.md +174 -13
  3. {roar_cli-0.2.11 → roar_cli-0.3.0}/pyproject.toml +18 -2
  4. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/__main__.py +1 -1
  5. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/git.py +12 -3
  6. roar_cli-0.3.0/roar/application/labels.py +861 -0
  7. roar_cli-0.3.0/roar/application/lookup/__init__.py +21 -0
  8. roar_cli-0.3.0/roar/application/lookup/models.py +52 -0
  9. roar_cli-0.3.0/roar/application/lookup/policy.py +35 -0
  10. roar_cli-0.3.0/roar/application/lookup/refs.py +38 -0
  11. roar_cli-0.3.0/roar/application/lookup/remote_artifacts.py +40 -0
  12. roar_cli-0.3.0/roar/application/lookup/runner.py +32 -0
  13. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/collection.py +48 -9
  14. roar_cli-0.3.0/roar/application/publish/git_remote.py +124 -0
  15. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/put_composites.py +11 -4
  16. roar_cli-0.3.0/roar/application/publish/put_execution.py +1048 -0
  17. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/put_preparation.py +12 -1
  18. roar_cli-0.3.0/roar/application/publish/register_execution.py +545 -0
  19. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/register_preparation.py +30 -1
  20. roar_cli-0.3.0/roar/application/publish/register_tag_push.py +157 -0
  21. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/registration.py +26 -9
  22. roar_cli-0.3.0/roar/application/publish/registration_package.py +511 -0
  23. roar_cli-0.3.0/roar/application/publish/remote_job_uids.py +50 -0
  24. roar_cli-0.3.0/roar/application/publish/remote_registry.py +85 -0
  25. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/requests.py +4 -0
  26. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/results.py +17 -0
  27. roar_cli-0.3.0/roar/application/publish/runtime.py +77 -0
  28. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/service.py +209 -88
  29. roar_cli-0.3.0/roar/application/publish/session.py +429 -0
  30. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/query/__init__.py +6 -0
  31. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/query/dag.py +27 -7
  32. roar_cli-0.3.0/roar/application/query/diff.py +69 -0
  33. roar_cli-0.3.0/roar/application/query/diff_engine.py +535 -0
  34. roar_cli-0.3.0/roar/application/query/diff_graph.py +427 -0
  35. roar_cli-0.3.0/roar/application/query/diff_refs.py +159 -0
  36. roar_cli-0.3.0/roar/application/query/git_readiness.py +216 -0
  37. roar_cli-0.3.0/roar/application/query/label.py +368 -0
  38. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/query/requests.py +36 -0
  39. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/query/results.py +90 -2
  40. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/query/show.py +178 -40
  41. roar_cli-0.3.0/roar/application/query/status.py +194 -0
  42. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/reproduce/environment.py +1 -1
  43. roar_cli-0.3.0/roar/application/reproduce/lookup.py +287 -0
  44. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/reproduce/requests.py +2 -0
  45. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/reproduce/results.py +3 -0
  46. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/reproduce/service.py +63 -15
  47. roar_cli-0.3.0/roar/application/run/dirty_tree_error.py +163 -0
  48. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/run/execution.py +70 -40
  49. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/run/requests.py +2 -0
  50. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/run/service.py +121 -33
  51. roar_cli-0.3.0/roar/application/run/verbosity.py +112 -0
  52. roar_cli-0.3.0/roar/application/system_labels.py +612 -0
  53. roar_cli-0.3.0/roar/application/workflow/__init__.py +13 -0
  54. roar_cli-0.3.0/roar/application/workflow/requests.py +18 -0
  55. roar_cli-0.3.0/roar/application/workflow/results.py +27 -0
  56. roar_cli-0.3.0/roar/application/workflow/service.py +359 -0
  57. roar_cli-0.3.0/roar/auth_store.py +148 -0
  58. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/osmo/host_execution.py +7 -1
  59. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/osmo/workflow.py +1 -0
  60. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/env_contract.py +2 -0
  61. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/fragment_reconstituter.py +2 -0
  62. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/runtime_hooks.py +4 -1
  63. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/submit_context.py +2 -0
  64. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/__init__.py +37 -40
  65. roar_cli-0.3.0/roar/cli/_format.py +70 -0
  66. roar_cli-0.3.0/roar/cli/command_registry.py +271 -0
  67. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/__init__.py +1 -0
  68. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/config.py +13 -2
  69. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/dag.py +28 -0
  70. roar_cli-0.3.0/roar/cli/commands/diff.py +77 -0
  71. roar_cli-0.3.0/roar/cli/commands/export_registration_package.py +80 -0
  72. roar_cli-0.3.0/roar/cli/commands/init.py +407 -0
  73. roar_cli-0.3.0/roar/cli/commands/init_agents.py +292 -0
  74. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/label.py +61 -1
  75. roar_cli-0.3.0/roar/cli/commands/login.py +219 -0
  76. roar_cli-0.3.0/roar/cli/commands/logout.py +24 -0
  77. roar_cli-0.3.0/roar/cli/commands/projects.py +195 -0
  78. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/put.py +62 -0
  79. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/register.py +121 -5
  80. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/reproduce.py +22 -9
  81. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/reset.py +14 -5
  82. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/run.py +37 -2
  83. roar_cli-0.3.0/roar/cli/commands/scope.py +375 -0
  84. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/show.py +29 -3
  85. roar_cli-0.3.0/roar/cli/commands/status.py +37 -0
  86. roar_cli-0.3.0/roar/cli/commands/telemetry.py +86 -0
  87. roar_cli-0.3.0/roar/cli/commands/tracer.py +661 -0
  88. roar_cli-0.3.0/roar/cli/commands/tui.py +22 -0
  89. roar_cli-0.3.0/roar/cli/commands/whoami.py +95 -0
  90. roar_cli-0.3.0/roar/cli/commands/workflow.py +94 -0
  91. roar_cli-0.3.0/roar/cli/publish_intent.py +65 -0
  92. roar_cli-0.3.0/roar/cli/templates/agents/SKILL.md.tmpl +103 -0
  93. roar_cli-0.3.0/roar/cli/templates/agents/agents_section.md.tmpl +11 -0
  94. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/__init__.py +2 -0
  95. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/bootstrap.py +2 -20
  96. roar_cli-0.3.0/roar/core/canonical_session.py +98 -0
  97. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/exceptions.py +25 -0
  98. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/interfaces/provenance.py +2 -0
  99. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/interfaces/registration.py +24 -1
  100. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/interfaces/repositories.py +5 -0
  101. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/interfaces/reproduction.py +3 -1
  102. roar_cli-0.3.0/roar/core/label_constants.py +15 -0
  103. roar_cli-0.3.0/roar/core/label_origins.py +72 -0
  104. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/models/provenance.py +32 -0
  105. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/models/run.py +41 -0
  106. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/session_hash.py +5 -1
  107. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/models.py +1 -0
  108. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/query_context.py +52 -5
  109. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/repositories/label.py +3 -0
  110. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/repositories/session.py +8 -0
  111. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/schema.py +9 -0
  112. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/services/job_recording.py +24 -1
  113. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/fragments/lineage.py +36 -0
  114. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/provenance/assembler.py +2 -0
  115. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/provenance/file_filter.py +67 -29
  116. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/provenance/service.py +12 -1
  117. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/recording/dataset_metadata.py +7 -11
  118. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/recording/job_recording.py +19 -1
  119. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/runtime/__init__.py +9 -7
  120. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/runtime/coordinator.py +213 -80
  121. roar_cli-0.3.0/roar/execution/runtime/errors.py +5 -0
  122. roar_cli-0.3.0/roar/execution/runtime/host_execution.py +26 -0
  123. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/runtime/inject/sitecustomize.py +18 -0
  124. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/runtime/inject/tracker.py +22 -0
  125. roar_cli-0.3.0/roar/execution/runtime/proxy_resource.py +81 -0
  126. roar_cli-0.3.0/roar/execution/runtime/resources.py +133 -0
  127. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/runtime/tracer.py +183 -32
  128. roar_cli-0.3.0/roar/execution/runtime/tracer_backends.py +905 -0
  129. roar_cli-0.3.0/roar/execution/runtime/tracer_banner.py +45 -0
  130. roar_cli-0.3.0/roar/glaas_auth.py +456 -0
  131. roar_cli-0.3.0/roar/glaas_client.py +162 -0
  132. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/__init__.py +3 -0
  133. roar_cli-0.3.0/roar/integrations/bootstrap.py +27 -0
  134. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/config/__init__.py +3 -0
  135. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/config/access.py +376 -27
  136. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/config/loader.py +3 -0
  137. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/config/raw.py +37 -3
  138. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/config/schema.py +61 -1
  139. roar_cli-0.3.0/roar/integrations/discovery.py +107 -0
  140. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/git/provider.py +11 -1
  141. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/glaas/client.py +312 -12
  142. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/glaas/registration/coordinator.py +136 -0
  143. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/glaas/registration/job.py +293 -0
  144. roar_cli-0.3.0/roar/integrations/glaas/registration/session.py +269 -0
  145. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/glaas/transport.py +62 -5
  146. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/presenters/dag_data_builder.py +5 -1
  147. roar_cli-0.3.0/roar/presenters/diff_renderer.py +273 -0
  148. roar_cli-0.3.0/roar/presenters/run_report.py +430 -0
  149. roar_cli-0.3.0/roar/presenters/show_renderer.py +482 -0
  150. roar_cli-0.3.0/roar/presenters/spinner.py +104 -0
  151. roar_cli-0.3.0/roar/presenters/terminal.py +81 -0
  152. roar_cli-0.3.0/roar/publish_auth.py +220 -0
  153. roar_cli-0.3.0/roar/require.py +115 -0
  154. roar_cli-0.3.0/roar/scope_config.py +155 -0
  155. roar_cli-0.3.0/roar/telemetry/__init__.py +171 -0
  156. roar_cli-0.3.0/roar/telemetry/_io.py +65 -0
  157. roar_cli-0.3.0/roar/telemetry/capabilities.py +103 -0
  158. roar_cli-0.3.0/roar/telemetry/config.py +328 -0
  159. roar_cli-0.3.0/roar/telemetry/hooks.py +109 -0
  160. roar_cli-0.3.0/roar/telemetry/install.py +42 -0
  161. roar_cli-0.3.0/roar/telemetry/paths.py +72 -0
  162. roar_cli-0.3.0/roar/telemetry/payload.py +144 -0
  163. roar_cli-0.3.0/roar/telemetry/queue.py +122 -0
  164. roar_cli-0.3.0/roar/telemetry/stats.py +284 -0
  165. roar_cli-0.3.0/roar/telemetry/uploader.py +104 -0
  166. roar_cli-0.3.0/roar/tui/__init__.py +19 -0
  167. roar_cli-0.3.0/roar/tui/app.py +100 -0
  168. roar_cli-0.3.0/roar/tui/data.py +252 -0
  169. roar_cli-0.3.0/roar/tui/screens/__init__.py +0 -0
  170. roar_cli-0.3.0/roar/tui/screens/config_editor.py +402 -0
  171. roar_cli-0.3.0/roar/tui/screens/label_editor.py +346 -0
  172. roar_cli-0.3.0/roar/tui/screens/launcher.py +260 -0
  173. roar_cli-0.3.0/roar/tui/screens/log.py +122 -0
  174. roar_cli-0.3.0/roar/tui/screens/main.py +581 -0
  175. roar_cli-0.3.0/roar/tui/screens/search.py +83 -0
  176. roar_cli-0.3.0/roar/tui/screens/session_picker.py +126 -0
  177. roar_cli-0.3.0/roar/tui/tmux.py +127 -0
  178. roar_cli-0.3.0/roar/tui/widgets/__init__.py +1 -0
  179. roar_cli-0.3.0/roar/tui/widgets/detail.py +574 -0
  180. {roar_cli-0.2.11 → roar_cli-0.3.0}/rust/Cargo.lock +4 -0
  181. roar_cli-0.3.0/rust/crates/tracer-fd/Cargo.toml +14 -0
  182. roar_cli-0.3.0/rust/crates/tracer-fd/src/lib.rs +741 -0
  183. roar_cli-0.3.0/rust/crates/tracer-runtime/Cargo.toml +8 -0
  184. roar_cli-0.3.0/rust/crates/tracer-runtime/src/lib.rs +121 -0
  185. roar_cli-0.3.0/rust/crates/tracer-schema/Cargo.toml +11 -0
  186. roar_cli-0.3.0/rust/crates/tracer-schema/src/lib.rs +146 -0
  187. roar_cli-0.3.0/rust/services/proxy/Cargo.lock +2521 -0
  188. roar_cli-0.3.0/rust/services/proxy/Cargo.toml +29 -0
  189. roar_cli-0.3.0/rust/services/proxy/src/forward.rs +331 -0
  190. roar_cli-0.3.0/rust/services/proxy/src/main.rs +301 -0
  191. roar_cli-0.3.0/rust/services/proxy/src/s3.rs +472 -0
  192. roar_cli-0.3.0/rust/tracers/ebpf/common/Cargo.toml +12 -0
  193. roar_cli-0.3.0/rust/tracers/ebpf/common/src/lib.rs +121 -0
  194. roar_cli-0.3.0/rust/tracers/ebpf/probe/Cargo.toml +13 -0
  195. roar_cli-0.3.0/rust/tracers/ebpf/probe/rust-toolchain.toml +3 -0
  196. roar_cli-0.3.0/rust/tracers/ebpf/probe/src/main.rs +919 -0
  197. roar_cli-0.3.0/rust/tracers/ebpf/userspace/Cargo.toml +39 -0
  198. roar_cli-0.3.0/rust/tracers/ebpf/userspace/build.rs +16 -0
  199. roar_cli-0.3.0/rust/tracers/ebpf/userspace/src/attach.rs +132 -0
  200. roar_cli-0.3.0/rust/tracers/ebpf/userspace/src/bin/roard.rs +58 -0
  201. roar_cli-0.3.0/rust/tracers/ebpf/userspace/src/client.rs +104 -0
  202. roar_cli-0.3.0/rust/tracers/ebpf/userspace/src/daemon.rs +706 -0
  203. roar_cli-0.3.0/rust/tracers/ebpf/userspace/src/events.rs +686 -0
  204. roar_cli-0.3.0/rust/tracers/ebpf/userspace/src/ipc.rs +187 -0
  205. roar_cli-0.3.0/rust/tracers/ebpf/userspace/src/lib.rs +6 -0
  206. roar_cli-0.3.0/rust/tracers/ebpf/userspace/src/main.rs +505 -0
  207. roar_cli-0.3.0/rust/tracers/ebpf/userspace/src/state.rs +539 -0
  208. roar_cli-0.3.0/rust/tracers/preload/Cargo.toml +32 -0
  209. roar_cli-0.3.0/rust/tracers/preload/build.rs +7 -0
  210. roar_cli-0.3.0/rust/tracers/preload/src/bin/io_fixture.rs +166 -0
  211. roar_cli-0.3.0/rust/tracers/preload/src/interpose.c +186 -0
  212. roar_cli-0.3.0/rust/tracers/preload/src/ipc.rs +20 -0
  213. roar_cli-0.3.0/rust/tracers/preload/src/lib.rs +1639 -0
  214. roar_cli-0.3.0/rust/tracers/preload/src/main.rs +814 -0
  215. roar_cli-0.3.0/rust/tracers/preload/tests/comprehensive.rs +507 -0
  216. roar_cli-0.3.0/rust/tracers/preload/tests/standalone.rs +200 -0
  217. roar_cli-0.3.0/rust/tracers/ptrace/Cargo.toml +26 -0
  218. roar_cli-0.3.0/rust/tracers/ptrace/rustfmt.toml +4 -0
  219. roar_cli-0.3.0/rust/tracers/ptrace/src/arch.rs +203 -0
  220. roar_cli-0.3.0/rust/tracers/ptrace/src/main.rs +1014 -0
  221. roar_cli-0.3.0/rust/tracers/ptrace/src/seccomp.rs +108 -0
  222. roar_cli-0.3.0/scripts/sync_packaged_rust_artifacts.py +355 -0
  223. roar_cli-0.2.11/roar/application/labels.py +0 -368
  224. roar_cli-0.2.11/roar/application/publish/put_execution.py +0 -627
  225. roar_cli-0.2.11/roar/application/publish/register_execution.py +0 -359
  226. roar_cli-0.2.11/roar/application/publish/runtime.py +0 -33
  227. roar_cli-0.2.11/roar/application/publish/session.py +0 -84
  228. roar_cli-0.2.11/roar/application/query/label.py +0 -115
  229. roar_cli-0.2.11/roar/application/query/status.py +0 -106
  230. roar_cli-0.2.11/roar/application/reproduce/lookup.py +0 -144
  231. roar_cli-0.2.11/roar/bin/libroar_tracer_preload.so +0 -0
  232. roar_cli-0.2.11/roar/bin/roar-proxy +0 -0
  233. roar_cli-0.2.11/roar/bin/roar-tracer +0 -0
  234. roar_cli-0.2.11/roar/bin/roar-tracer-ebpf +0 -0
  235. roar_cli-0.2.11/roar/bin/roar-tracer-preload +0 -0
  236. roar_cli-0.2.11/roar/bin/roard +0 -0
  237. roar_cli-0.2.11/roar/cli/commands/init.py +0 -299
  238. roar_cli-0.2.11/roar/cli/commands/status.py +0 -21
  239. roar_cli-0.2.11/roar/cli/commands/tracer.py +0 -304
  240. roar_cli-0.2.11/roar/execution/runtime/host_execution.py +0 -39
  241. roar_cli-0.2.11/roar/execution/runtime/tracer_backends.py +0 -371
  242. roar_cli-0.2.11/roar/integrations/discovery.py +0 -54
  243. roar_cli-0.2.11/roar/integrations/glaas/registration/session.py +0 -142
  244. roar_cli-0.2.11/roar/presenters/run_report.py +0 -180
  245. roar_cli-0.2.11/roar/presenters/show_renderer.py +0 -379
  246. roar_cli-0.2.11/roar/presenters/spinner.py +0 -60
  247. {roar_cli-0.2.11 → roar_cli-0.3.0}/LICENSE +0 -0
  248. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/__init__.py +0 -0
  249. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/analyzers/__init__.py +0 -0
  250. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/analyzers/base.py +0 -0
  251. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/analyzers/experiment_trackers.py +0 -0
  252. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/__init__.py +0 -0
  253. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/get/__init__.py +0 -0
  254. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/get/requests.py +0 -0
  255. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/get/results.py +0 -0
  256. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/get/service.py +0 -0
  257. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/get/transfer.py +0 -0
  258. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/label_rendering.py +0 -0
  259. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/__init__.py +0 -0
  260. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/blake3_upgrade.py +0 -0
  261. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/composite_builder.py +0 -0
  262. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/composites.py +0 -0
  263. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/datasets.py +0 -0
  264. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/job_links.py +0 -0
  265. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/job_preparation.py +0 -0
  266. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/lineage.py +0 -0
  267. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/lineage_composites.py +0 -0
  268. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/metadata.py +0 -0
  269. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/register_preview_jobs.py +0 -0
  270. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/secrets.py +0 -0
  271. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/source_resolution.py +0 -0
  272. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/publish/targets.py +0 -0
  273. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/query/inputs.py +0 -0
  274. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/query/lineage.py +0 -0
  275. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/query/log.py +0 -0
  276. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/reproduce/__init__.py +0 -0
  277. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/run/__init__.py +0 -0
  278. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/application/run/dag_references.py +0 -0
  279. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/__init__.py +0 -0
  280. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/local/__init__.py +0 -0
  281. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/local/plugin.py +0 -0
  282. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/osmo/__init__.py +0 -0
  283. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/osmo/config.py +0 -0
  284. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/osmo/export.py +0 -0
  285. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/osmo/lineage.py +0 -0
  286. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/osmo/plugin.py +0 -0
  287. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/osmo/runtime_bundle.py +0 -0
  288. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/osmo/submit.py +0 -0
  289. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/__init__.py +0 -0
  290. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/_agent_names.py +0 -0
  291. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/collector.py +0 -0
  292. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/config.py +0 -0
  293. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/constants.py +0 -0
  294. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/fragment.py +0 -0
  295. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/node_agent.py +0 -0
  296. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/plugin.py +0 -0
  297. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/proxy_fragments.py +0 -0
  298. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/roar_worker.py +0 -0
  299. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/s3_key_paths.py +0 -0
  300. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/backends/ray/submit.py +0 -0
  301. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/auth.py +0 -0
  302. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/build.py +0 -0
  303. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/env.py +0 -0
  304. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/get.py +0 -0
  305. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/inputs.py +0 -0
  306. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/lineage.py +0 -0
  307. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/log.py +0 -0
  308. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/osmo.py +0 -0
  309. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/pop.py +0 -0
  310. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/commands/proxy.py +0 -0
  311. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/context.py +0 -0
  312. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/cli/decorators.py +0 -0
  313. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/digests.py +0 -0
  314. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/dto/__init__.py +0 -0
  315. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/dto/registration.py +0 -0
  316. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/interfaces/__init__.py +0 -0
  317. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/interfaces/config.py +0 -0
  318. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/interfaces/lineage.py +0 -0
  319. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/interfaces/logger.py +0 -0
  320. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/interfaces/presenter.py +0 -0
  321. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/interfaces/run.py +0 -0
  322. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/interfaces/services.py +0 -0
  323. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/interfaces/telemetry.py +0 -0
  324. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/interfaces/vcs.py +0 -0
  325. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/logging.py +0 -0
  326. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/models/__init__.py +0 -0
  327. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/models/artifact.py +0 -0
  328. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/models/base.py +0 -0
  329. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/models/dag.py +0 -0
  330. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/models/dataset_identifier.py +0 -0
  331. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/models/glaas.py +0 -0
  332. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/models/job.py +0 -0
  333. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/models/lineage.py +0 -0
  334. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/models/session.py +0 -0
  335. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/models/telemetry.py +0 -0
  336. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/models/vcs.py +0 -0
  337. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/operation_metadata.py +0 -0
  338. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/step_name.py +0 -0
  339. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/tracer_modes.py +0 -0
  340. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/core/validation.py +0 -0
  341. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/__init__.py +0 -0
  342. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/context.py +0 -0
  343. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/engine.py +0 -0
  344. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/hashing/__init__.py +0 -0
  345. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/hashing/backend.py +0 -0
  346. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/hashing/blake3.py +0 -0
  347. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/repositories/__init__.py +0 -0
  348. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/repositories/artifact.py +0 -0
  349. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/repositories/collection.py +0 -0
  350. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/repositories/composite.py +0 -0
  351. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/repositories/hash_cache.py +0 -0
  352. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/repositories/job.py +0 -0
  353. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/services/__init__.py +0 -0
  354. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/services/hashing.py +0 -0
  355. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/services/lineage.py +0 -0
  356. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/services/session.py +0 -0
  357. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/db/step_priority.py +0 -0
  358. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/__init__.py +0 -0
  359. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/cluster/__init__.py +0 -0
  360. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/cluster/bridge.py +0 -0
  361. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/cluster/proxy.py +0 -0
  362. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/cluster/proxy_config.py +0 -0
  363. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/fragments/__init__.py +0 -0
  364. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/fragments/models.py +0 -0
  365. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/fragments/reconstitution.py +0 -0
  366. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/fragments/sessions.py +0 -0
  367. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/fragments/transport.py +0 -0
  368. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/framework/__init__.py +0 -0
  369. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/framework/contract.py +0 -0
  370. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/framework/planning.py +0 -0
  371. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/framework/registry.py +0 -0
  372. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/framework/runtime_imports.py +0 -0
  373. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/provenance/__init__.py +0 -0
  374. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/provenance/build_pip_collector.py +0 -0
  375. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/provenance/build_tool_collector.py +0 -0
  376. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/provenance/data_loader.py +0 -0
  377. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/provenance/package_collector.py +0 -0
  378. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/provenance/process_summarizer.py +0 -0
  379. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/provenance/runtime_collector.py +0 -0
  380. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/recording/__init__.py +0 -0
  381. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/recording/dataset_identifier.py +0 -0
  382. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/recording/dataset_profile.py +0 -0
  383. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/reproduction/__init__.py +0 -0
  384. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/reproduction/environment_setup.py +0 -0
  385. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/reproduction/installers.py +0 -0
  386. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/reproduction/pipeline_executor.py +0 -0
  387. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/reproduction/pipeline_metadata.py +0 -0
  388. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/runtime/backup.py +0 -0
  389. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/runtime/driver_entrypoint.py +0 -0
  390. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/runtime/inject/__init__.py +0 -0
  391. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/runtime/inject/support.py +0 -0
  392. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/runtime/signal_handler.py +0 -0
  393. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/execution/runtime/worker_bootstrap.py +0 -0
  394. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/filters/__init__.py +0 -0
  395. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/filters/files.py +0 -0
  396. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/filters/omit.py +0 -0
  397. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/download/__init__.py +0 -0
  398. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/download/base.py +0 -0
  399. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/download/gcs.py +0 -0
  400. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/download/get.py +0 -0
  401. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/download/http.py +0 -0
  402. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/download/noop.py +0 -0
  403. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/download/s3.py +0 -0
  404. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/git/__init__.py +0 -0
  405. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/git/base.py +0 -0
  406. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/git/context.py +0 -0
  407. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/glaas/__init__.py +0 -0
  408. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/glaas/auth.py +0 -0
  409. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/glaas/fragment_streamer.py +0 -0
  410. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/glaas/registration/__init__.py +0 -0
  411. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/glaas/registration/_artifact_ref.py +0 -0
  412. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/glaas/registration/artifact.py +0 -0
  413. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/registry.py +0 -0
  414. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/resolution.py +0 -0
  415. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/storage/__init__.py +0 -0
  416. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/storage/base.py +0 -0
  417. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/storage/gcs.py +0 -0
  418. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/storage/memory.py +0 -0
  419. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/storage/noop.py +0 -0
  420. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/storage/publish.py +0 -0
  421. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/storage/s3.py +0 -0
  422. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/telemetry/__init__.py +0 -0
  423. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/telemetry/base.py +0 -0
  424. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/integrations/telemetry/wandb.py +0 -0
  425. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/presenters/__init__.py +0 -0
  426. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/presenters/console.py +0 -0
  427. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/presenters/dag_renderer.py +0 -0
  428. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/presenters/formatting.py +0 -0
  429. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/presenters/null.py +0 -0
  430. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/utils/__init__.py +0 -0
  431. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/utils/cloud.py +0 -0
  432. {roar_cli-0.2.11 → roar_cli-0.3.0}/roar/utils/git_url.py +0 -0
  433. {roar_cli-0.2.11 → roar_cli-0.3.0}/rust/Cargo.toml +0 -0
  434. {roar_cli-0.2.11 → roar_cli-0.3.0}/rust/crates/artifact-hash-core/Cargo.toml +0 -0
  435. {roar_cli-0.2.11 → roar_cli-0.3.0}/rust/crates/artifact-hash-core/src/lib.rs +0 -0
  436. {roar_cli-0.2.11 → roar_cli-0.3.0}/rust/crates/artifact-hash-py/Cargo.toml +0 -0
  437. {roar_cli-0.2.11 → 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.11
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
@@ -23,6 +23,7 @@ Requires-Dist: sqlalchemy>=2.0.0
23
23
  Requires-Dist: pysqlite3-binary>=0.5.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'
24
24
  Requires-Dist: pydantic>=2.0.0
25
25
  Requires-Dist: pydantic-settings>=2.0.0
26
+ Requires-Dist: textual>=0.80
26
27
  Requires-Dist: tomli>=2.0.0 ; python_full_version < '3.11'
27
28
  Requires-Dist: pytest>=7.0.0 ; extra == 'dev'
28
29
  Requires-Dist: pytest-timeout>=2.0.0 ; extra == 'dev'
@@ -66,6 +67,11 @@ uv pip install roar-cli
66
67
 
67
68
  Requires Python 3.10+.
68
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
+
69
75
  ### Platform Support
70
76
 
71
77
  | Platform | Status |
@@ -75,7 +81,12 @@ Requires Python 3.10+.
75
81
  | macOS | 🚧 Experimental ([limitations](#macos-tracing-limitations)) |
76
82
  | Windows | Coming soon |
77
83
 
78
- 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.
79
90
 
80
91
  ### Development Installation
81
92
 
@@ -84,12 +95,20 @@ PyPI wheels are published for Linux and macOS (`x86_64` and `arm64`).
84
95
  git clone https://github.com/treqs/roar.git
85
96
  cd roar
86
97
 
87
- # Install in development mode
88
- uv pip install -e ".[dev]"
89
- # or without uv
90
- pip install -e ".[dev]"
98
+ # One-shot dev install: Python package + Rust tracer binaries
99
+ bash scripts/install-dev.sh
91
100
  ```
92
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
+
93
112
  ## Quick Start
94
113
 
95
114
  ```bash
@@ -103,6 +122,53 @@ roar run python train.py --data features.parquet --output model.pt
103
122
  roar run python evaluate.py --model model.pt --output metrics.json
104
123
  ```
105
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
+
106
172
  ## Tracer Backends
107
173
 
108
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.
@@ -136,10 +202,16 @@ By default, `roar` uses `auto` mode: prefer eBPF, then preload, then ptrace.
136
202
 
137
203
  ```bash
138
204
  # Show what roar can currently find and whether it looks usable
139
- roar tracer status
205
+ roar tracer
140
206
 
141
207
  # Set a default backend (auto|ebpf|preload|ptrace)
142
- 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
143
215
  ```
144
216
 
145
217
  ### macOS Tracing Limitations
@@ -214,9 +286,13 @@ roar reproduce abc123de --run --package-sync
214
286
 
215
287
  # Show all required packages (no truncation)
216
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
217
293
  ```
218
294
 
219
- 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.
220
296
 
221
297
  ### `roar build <command>`
222
298
 
@@ -235,7 +311,7 @@ Use for setup that should run before the main pipeline (compiling, installing).
235
311
 
236
312
  ### `roar auth`
237
313
 
238
- Manage GLaaS authentication.
314
+ Manage SSH-key-based GLaaS registration settings.
239
315
 
240
316
  ```bash
241
317
  roar auth register # Show SSH public key for registration
@@ -243,7 +319,7 @@ roar auth test # Test connection to GLaaS server
243
319
  roar auth status # Show current auth status
244
320
  ```
245
321
 
246
- To register with GLaaS:
322
+ To register SSH auth with GLaaS:
247
323
 
248
324
  1. Run `roar auth register` to display your public key
249
325
  2. Sign up at <https://glaas.ai> where you can paste your public key
@@ -271,6 +347,7 @@ Run `roar config list` to see all available options with descriptions. Common op
271
347
  | `filters.ignore_tmp_files` | true | Ignore /tmp files |
272
348
  | `glaas.url` | <https://api.glaas.ai> | GLaaS server URL |
273
349
  | `glaas.web_url` | <https://glaas.ai> | GLaaS web UI URL |
350
+ | `registration.public_by_default` | false | Default `register`/`put` visibility |
274
351
  | `registration.omit.enabled` | true | Enable secret filtering |
275
352
  | `hash.primary` | blake3 | Primary hash algorithm |
276
353
  | `logging.level` | warning | Log level (debug, info, warning, error) |
@@ -315,6 +392,9 @@ roar label set dag current owner=alice team=ml
315
392
  roar label set job @2 phase=train lr=0.001
316
393
  roar label set artifact ./outputs/model.pt model.name=resnet50 stage=baseline
317
394
 
395
+ # Remove labels
396
+ roar label unset artifact ./outputs/model.pt stage
397
+
318
398
  # Copy labels from one entity to another
319
399
  roar label cp job @2 artifact ./outputs/model.pt
320
400
 
@@ -326,6 +406,11 @@ roar label show artifact ./outputs/model.pt
326
406
  # Show label history (all versions)
327
407
  roar label history dag current
328
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
329
414
  ```
330
415
 
331
416
  **Entity targets:**
@@ -334,7 +419,7 @@ roar label history artifact <artifact-hash>
334
419
  - `job`: step ref (`@N` or `@BN`) or job UID
335
420
  - `artifact`: file path or artifact hash
336
421
 
337
- Labels are stored locally and included in lineage registration/publish flows to GLaaS when supported by the configured server.
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.
338
423
 
339
424
  ### `roar register`
340
425
 
@@ -362,6 +447,14 @@ roar register s3://bucket/run/out # Register a tracked remote S3 artifact
362
447
 
363
448
  For bare 8-character hex targets, `roar register` prefers a matching local job UID before falling back to session-hash-prefix resolution.
364
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
+
365
458
  ### `roar put`
366
459
 
367
460
  Upload artifacts to cloud storage and register lineage with GLaaS.
@@ -377,6 +470,8 @@ roar put @2 s3://bucket/outputs/ -m "Step 2 outputs"
377
470
  - `-m, --message` — Description of the upload (required)
378
471
  - `--dry-run` — Preview without uploading
379
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
380
475
 
381
476
  **Source formats:**
382
477
 
@@ -435,6 +530,21 @@ Show a summary of the active session, including the current DAG hash.
435
530
  roar status
436
531
  ```
437
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
+
438
548
  ### `roar pop`
439
549
 
440
550
  Remove the most recent job from the active session. Useful for undoing a mistaken `roar run` or correcting the pipeline before registration.
@@ -545,10 +655,62 @@ roar auth test
545
655
  ### Setup
546
656
 
547
657
  ```bash
548
- # Install dev dependencies
549
- uv pip install -e ".[dev]"
658
+ bash scripts/install-dev.sh
659
+ ```
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/
550
696
  ```
551
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
+
552
714
  ### Running Quality Checks
553
715
 
554
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) |
@@ -267,6 +343,9 @@ roar label set dag current owner=alice team=ml
267
343
  roar label set job @2 phase=train lr=0.001
268
344
  roar label set artifact ./outputs/model.pt model.name=resnet50 stage=baseline
269
345
 
346
+ # Remove labels
347
+ roar label unset artifact ./outputs/model.pt stage
348
+
270
349
  # Copy labels from one entity to another
271
350
  roar label cp job @2 artifact ./outputs/model.pt
272
351
 
@@ -278,6 +357,11 @@ roar label show artifact ./outputs/model.pt
278
357
  # Show label history (all versions)
279
358
  roar label history dag current
280
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
281
365
  ```
282
366
 
283
367
  **Entity targets:**
@@ -286,7 +370,7 @@ roar label history artifact <artifact-hash>
286
370
  - `job`: step ref (`@N` or `@BN`) or job UID
287
371
  - `artifact`: file path or artifact hash
288
372
 
289
- Labels are stored locally and included in lineage registration/publish flows to GLaaS when supported by the configured server.
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.
290
374
 
291
375
  ### `roar register`
292
376
 
@@ -314,6 +398,14 @@ roar register s3://bucket/run/out # Register a tracked remote S3 artifact
314
398
 
315
399
  For bare 8-character hex targets, `roar register` prefers a matching local job UID before falling back to session-hash-prefix resolution.
316
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
+
317
409
  ### `roar put`
318
410
 
319
411
  Upload artifacts to cloud storage and register lineage with GLaaS.
@@ -329,6 +421,8 @@ roar put @2 s3://bucket/outputs/ -m "Step 2 outputs"
329
421
  - `-m, --message` — Description of the upload (required)
330
422
  - `--dry-run` — Preview without uploading
331
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
332
426
 
333
427
  **Source formats:**
334
428
 
@@ -387,6 +481,21 @@ Show a summary of the active session, including the current DAG hash.
387
481
  roar status
388
482
  ```
389
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
+
390
499
  ### `roar pop`
391
500
 
392
501
  Remove the most recent job from the active session. Useful for undoing a mistaken `roar run` or correcting the pipeline before registration.
@@ -497,10 +606,62 @@ roar auth test
497
606
  ### Setup
498
607
 
499
608
  ```bash
500
- # Install dev dependencies
501
- uv pip install -e ".[dev]"
609
+ bash scripts/install-dev.sh
610
+ ```
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/
502
647
  ```
503
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
+
504
665
  ### Running Quality Checks
505
666
 
506
667
  ```bash
@@ -4,7 +4,7 @@ build-backend = "maturin"
4
4
 
5
5
  [project]
6
6
  name = "roar-cli"
7
- version = "0.2.11"
7
+ version = "0.3.0"
8
8
  description = "Reproducibility and provenance tracker for ML training pipelines"
9
9
  authors = [
10
10
  { name="TReqs Team", email="info@treqs.ai" }
@@ -46,6 +46,7 @@ dependencies = [
46
46
  "pysqlite3-binary>=0.5.0; sys_platform == 'linux' and platform_machine == 'x86_64'", # Fallback when stdlib sqlite3 unavailable
47
47
  "pydantic>=2.0.0",
48
48
  "pydantic-settings>=2.0.0",
49
+ "textual>=0.80",
49
50
  "tomli>=2.0.0; python_version < '3.11'",
50
51
  ]
51
52
 
@@ -85,9 +86,24 @@ bindings = "pyo3"
85
86
  include = [
86
87
  { path = "LICENSE", format = "sdist" },
87
88
  { path = "LICENSE", format = "wheel" },
88
- { path = "roar/bin/*", format = "sdist" },
89
+ # Pre-built tracer binaries ship in the wheel only, never the sdist.
90
+ # Bundling arch-specific ELFs in a source dist meant aarch64 hosts that
91
+ # fell through to sdist installs got x86_64 binaries that failed at exec
92
+ # time with a confusing "Exec format error". sdist users build the
93
+ # binaries from the rust/ source tree (paths below).
89
94
  { path = "roar/bin/*", format = "wheel" },
95
+ { path = "roar/cli/templates/**/*", format = "sdist" },
96
+ { path = "roar/cli/templates/**/*", format = "wheel" },
90
97
  { path = "roar_inject.pth", format = "wheel" },
98
+ # Bundle the tracer + proxy crates into the sdist so aarch64 (or any
99
+ # platform without a published wheel) can `cargo build --release` after
100
+ # extracting the sdist. cargo's auto-included package list only covers
101
+ # the artifact-hash-py crate, so the tracer crates need to be listed
102
+ # explicitly here. See README → Platform Support for the install path.
103
+ { path = "rust/tracers/**/*", format = "sdist" },
104
+ { path = "rust/services/**/*", format = "sdist" },
105
+ { path = "rust/crates/tracer-*/**/*", format = "sdist" },
106
+ { path = "scripts/sync_packaged_rust_artifacts.py", format = "sdist" },
91
107
  ]
92
108
 
93
109
  [tool.pytest.ini_options]
@@ -2,7 +2,7 @@
2
2
  Entry point for the `roar` command-line interface.
3
3
 
4
4
  roar (Run Observation & Artifact Registration) is a local front-end to
5
- TReqs' Lineage-as-a-Service (GLaaS). It registers data artifacts and
5
+ GLaaS (Global Lineage as a Service). It registers data artifacts and
6
6
  execution steps (jobs) in ML pipelines.
7
7
 
8
8
  This module provides the main() entry point that delegates to the Click CLI.