roar-cli 0.2.9__tar.gz → 0.2.11__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 (362) hide show
  1. {roar_cli-0.2.9 → roar_cli-0.2.11}/PKG-INFO +80 -24
  2. {roar_cli-0.2.9 → roar_cli-0.2.11}/README.md +77 -23
  3. {roar_cli-0.2.9 → roar_cli-0.2.11}/pyproject.toml +13 -3
  4. roar_cli-0.2.11/roar/application/__init__.py +1 -0
  5. roar_cli-0.2.11/roar/application/get/__init__.py +7 -0
  6. roar_cli-0.2.11/roar/application/get/requests.py +22 -0
  7. roar_cli-0.2.11/roar/application/get/results.py +35 -0
  8. roar_cli-0.2.11/roar/application/get/service.py +169 -0
  9. roar_cli-0.2.11/roar/application/get/transfer.py +327 -0
  10. roar_cli-0.2.11/roar/application/git.py +194 -0
  11. roar_cli-0.2.11/roar/application/label_rendering.py +37 -0
  12. roar_cli-0.2.11/roar/application/labels.py +368 -0
  13. roar_cli-0.2.11/roar/application/publish/__init__.py +1 -0
  14. roar_cli-0.2.11/roar/application/publish/blake3_upgrade.py +258 -0
  15. roar_cli-0.2.11/roar/application/publish/collection.py +334 -0
  16. {roar_cli-0.2.9/roar/services/put → roar_cli-0.2.11/roar/application/publish}/composite_builder.py +2 -2
  17. roar_cli-0.2.11/roar/application/publish/composites.py +43 -0
  18. roar_cli-0.2.11/roar/application/publish/datasets.py +92 -0
  19. roar_cli-0.2.11/roar/application/publish/job_links.py +136 -0
  20. roar_cli-0.2.11/roar/application/publish/job_preparation.py +209 -0
  21. roar_cli-0.2.9/roar/services/upload/lineage_collector.py → roar_cli-0.2.11/roar/application/publish/lineage.py +218 -18
  22. roar_cli-0.2.11/roar/application/publish/lineage_composites.py +165 -0
  23. roar_cli-0.2.11/roar/application/publish/metadata.py +151 -0
  24. roar_cli-0.2.11/roar/application/publish/put_composites.py +258 -0
  25. roar_cli-0.2.11/roar/application/publish/put_execution.py +627 -0
  26. roar_cli-0.2.11/roar/application/publish/put_preparation.py +110 -0
  27. roar_cli-0.2.11/roar/application/publish/register_execution.py +359 -0
  28. roar_cli-0.2.11/roar/application/publish/register_preparation.py +78 -0
  29. roar_cli-0.2.11/roar/application/publish/register_preview_jobs.py +112 -0
  30. roar_cli-0.2.11/roar/application/publish/registration.py +513 -0
  31. roar_cli-0.2.11/roar/application/publish/requests.py +34 -0
  32. roar_cli-0.2.11/roar/application/publish/results.py +66 -0
  33. roar_cli-0.2.11/roar/application/publish/runtime.py +33 -0
  34. roar_cli-0.2.11/roar/application/publish/secrets.py +71 -0
  35. roar_cli-0.2.11/roar/application/publish/service.py +550 -0
  36. roar_cli-0.2.11/roar/application/publish/session.py +84 -0
  37. roar_cli-0.2.9/roar/services/put/resolver.py → roar_cli-0.2.11/roar/application/publish/source_resolution.py +1 -6
  38. roar_cli-0.2.11/roar/application/publish/targets.py +143 -0
  39. roar_cli-0.2.11/roar/application/query/__init__.py +54 -0
  40. roar_cli-0.2.11/roar/application/query/dag.py +82 -0
  41. roar_cli-0.2.11/roar/application/query/inputs.py +317 -0
  42. roar_cli-0.2.11/roar/application/query/label.py +115 -0
  43. roar_cli-0.2.11/roar/application/query/lineage.py +121 -0
  44. roar_cli-0.2.11/roar/application/query/log.py +93 -0
  45. roar_cli-0.2.11/roar/application/query/requests.py +97 -0
  46. roar_cli-0.2.11/roar/application/query/results.py +319 -0
  47. roar_cli-0.2.11/roar/application/query/show.py +370 -0
  48. roar_cli-0.2.11/roar/application/query/status.py +106 -0
  49. roar_cli-0.2.11/roar/application/reproduce/__init__.py +14 -0
  50. roar_cli-0.2.11/roar/application/reproduce/environment.py +91 -0
  51. roar_cli-0.2.11/roar/application/reproduce/lookup.py +144 -0
  52. roar_cli-0.2.11/roar/application/reproduce/requests.py +20 -0
  53. roar_cli-0.2.11/roar/application/reproduce/results.py +39 -0
  54. roar_cli-0.2.11/roar/application/reproduce/service.py +357 -0
  55. roar_cli-0.2.11/roar/application/run/__init__.py +13 -0
  56. roar_cli-0.2.9/roar/services/execution/dag_resolver.py → roar_cli-0.2.11/roar/application/run/dag_references.py +1 -1
  57. roar_cli-0.2.11/roar/application/run/execution.py +148 -0
  58. roar_cli-0.2.11/roar/application/run/requests.py +30 -0
  59. roar_cli-0.2.11/roar/application/run/service.py +187 -0
  60. roar_cli-0.2.11/roar/backends/__init__.py +1 -0
  61. roar_cli-0.2.11/roar/backends/local/__init__.py +1 -0
  62. roar_cli-0.2.11/roar/backends/local/plugin.py +47 -0
  63. roar_cli-0.2.11/roar/backends/osmo/__init__.py +29 -0
  64. roar_cli-0.2.11/roar/backends/osmo/config.py +171 -0
  65. roar_cli-0.2.11/roar/backends/osmo/export.py +188 -0
  66. roar_cli-0.2.11/roar/backends/osmo/host_execution.py +1646 -0
  67. roar_cli-0.2.11/roar/backends/osmo/lineage.py +315 -0
  68. roar_cli-0.2.11/roar/backends/osmo/plugin.py +37 -0
  69. roar_cli-0.2.11/roar/backends/osmo/runtime_bundle.py +131 -0
  70. roar_cli-0.2.11/roar/backends/osmo/submit.py +65 -0
  71. roar_cli-0.2.11/roar/backends/osmo/workflow.py +515 -0
  72. roar_cli-0.2.11/roar/backends/ray/__init__.py +3 -0
  73. roar_cli-0.2.11/roar/backends/ray/collector.py +398 -0
  74. roar_cli-0.2.11/roar/backends/ray/config.py +89 -0
  75. roar_cli-0.2.11/roar/backends/ray/constants.py +17 -0
  76. roar_cli-0.2.11/roar/backends/ray/env_contract.py +80 -0
  77. roar_cli-0.2.11/roar/backends/ray/fragment.py +135 -0
  78. {roar_cli-0.2.9/roar → roar_cli-0.2.11/roar/backends}/ray/fragment_reconstituter.py +29 -13
  79. roar_cli-0.2.11/roar/backends/ray/node_agent.py +92 -0
  80. roar_cli-0.2.11/roar/backends/ray/plugin.py +150 -0
  81. {roar_cli-0.2.9/roar → roar_cli-0.2.11/roar/backends}/ray/proxy_fragments.py +12 -26
  82. {roar_cli-0.2.9/roar → roar_cli-0.2.11/roar/backends}/ray/roar_worker.py +24 -49
  83. roar_cli-0.2.9/roar/services/execution/inject/sitecustomize.py → roar_cli-0.2.11/roar/backends/ray/runtime_hooks.py +625 -971
  84. roar_cli-0.2.9/roar/cli/commands/_ray_job_submit.py → roar_cli-0.2.11/roar/backends/ray/submit.py +96 -104
  85. roar_cli-0.2.11/roar/backends/ray/submit_context.py +141 -0
  86. roar_cli-0.2.11/roar/bin/libroar_tracer_preload.so +0 -0
  87. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/bin/roar-proxy +0 -0
  88. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/bin/roar-tracer +0 -0
  89. roar_cli-0.2.11/roar/bin/roar-tracer-ebpf +0 -0
  90. roar_cli-0.2.11/roar/bin/roar-tracer-preload +0 -0
  91. roar_cli-0.2.11/roar/bin/roard +0 -0
  92. roar_cli-0.2.11/roar/cli/__init__.py +228 -0
  93. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/cli/commands/auth.py +53 -26
  94. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/cli/commands/build.py +20 -29
  95. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/cli/commands/config.py +1 -1
  96. roar_cli-0.2.11/roar/cli/commands/dag.py +104 -0
  97. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/cli/commands/env.py +1 -1
  98. roar_cli-0.2.11/roar/cli/commands/get.py +163 -0
  99. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/cli/commands/init.py +28 -12
  100. roar_cli-0.2.11/roar/cli/commands/inputs.py +116 -0
  101. roar_cli-0.2.11/roar/cli/commands/label.py +136 -0
  102. roar_cli-0.2.11/roar/cli/commands/lineage.py +63 -0
  103. roar_cli-0.2.11/roar/cli/commands/log.py +34 -0
  104. roar_cli-0.2.11/roar/cli/commands/osmo.py +360 -0
  105. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/cli/commands/proxy.py +7 -7
  106. roar_cli-0.2.11/roar/cli/commands/put.py +196 -0
  107. roar_cli-0.2.11/roar/cli/commands/register.py +154 -0
  108. roar_cli-0.2.11/roar/cli/commands/reproduce.py +94 -0
  109. roar_cli-0.2.11/roar/cli/commands/run.py +113 -0
  110. roar_cli-0.2.11/roar/cli/commands/show.py +109 -0
  111. roar_cli-0.2.11/roar/cli/commands/status.py +21 -0
  112. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/cli/commands/tracer.py +2 -2
  113. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/cli/context.py +1 -1
  114. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/cli/decorators.py +14 -10
  115. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/__init__.py +1 -25
  116. roar_cli-0.2.11/roar/core/bootstrap.py +91 -0
  117. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/interfaces/__init__.py +5 -14
  118. roar_cli-0.2.11/roar/core/interfaces/lineage.py +43 -0
  119. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/interfaces/provenance.py +12 -10
  120. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/interfaces/repositories.py +45 -0
  121. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/interfaces/reproduction.py +0 -30
  122. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/interfaces/run.py +10 -49
  123. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/interfaces/services.py +2 -0
  124. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/interfaces/telemetry.py +5 -2
  125. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/interfaces/vcs.py +5 -2
  126. {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar/core}/logging.py +45 -45
  127. roar_cli-0.2.11/roar/core/models/__init__.py +81 -0
  128. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/models/dag.py +4 -0
  129. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/models/run.py +2 -0
  130. roar_cli-0.2.11/roar/core/operation_metadata.py +11 -0
  131. roar_cli-0.2.11/roar/core/session_hash.py +26 -0
  132. roar_cli-0.2.11/roar/core/step_name.py +46 -0
  133. roar_cli-0.2.11/roar/db/__init__.py +47 -0
  134. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/context.py +123 -112
  135. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/hashing/__init__.py +2 -0
  136. roar_cli-0.2.11/roar/db/hashing/blake3.py +22 -0
  137. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/models.py +60 -0
  138. roar_cli-0.2.11/roar/db/query_context.py +729 -0
  139. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/repositories/__init__.py +3 -0
  140. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/repositories/artifact.py +99 -0
  141. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/repositories/job.py +61 -3
  142. roar_cli-0.2.11/roar/db/repositories/label.py +124 -0
  143. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/repositories/session.py +32 -53
  144. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/schema.py +10 -0
  145. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/services/job_recording.py +59 -14
  146. roar_cli-0.2.11/roar/db/step_priority.py +91 -0
  147. roar_cli-0.2.11/roar/execution/__init__.py +1 -0
  148. roar_cli-0.2.11/roar/execution/cluster/__init__.py +1 -0
  149. roar_cli-0.2.11/roar/execution/cluster/bridge.py +233 -0
  150. roar_cli-0.2.11/roar/execution/cluster/proxy_config.py +24 -0
  151. roar_cli-0.2.11/roar/execution/fragments/__init__.py +1 -0
  152. roar_cli-0.2.9/roar/ray/collector.py → roar_cli-0.2.11/roar/execution/fragments/lineage.py +249 -337
  153. roar_cli-0.2.11/roar/execution/fragments/models.py +294 -0
  154. roar_cli-0.2.11/roar/execution/fragments/reconstitution.py +71 -0
  155. roar_cli-0.2.9/roar/ray/fragment_key.py → roar_cli-0.2.11/roar/execution/fragments/sessions.py +8 -8
  156. roar_cli-0.2.11/roar/execution/fragments/transport.py +54 -0
  157. roar_cli-0.2.11/roar/execution/framework/__init__.py +41 -0
  158. roar_cli-0.2.11/roar/execution/framework/contract.py +160 -0
  159. roar_cli-0.2.11/roar/execution/framework/planning.py +45 -0
  160. roar_cli-0.2.11/roar/execution/framework/registry.py +354 -0
  161. roar_cli-0.2.11/roar/execution/framework/runtime_imports.py +90 -0
  162. roar_cli-0.2.11/roar/execution/provenance/__init__.py +5 -0
  163. {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar}/execution/provenance/assembler.py +4 -4
  164. {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar}/execution/provenance/build_pip_collector.py +2 -2
  165. {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar}/execution/provenance/build_tool_collector.py +2 -2
  166. {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar}/execution/provenance/data_loader.py +23 -4
  167. {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar}/execution/provenance/file_filter.py +3 -3
  168. {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar}/execution/provenance/package_collector.py +3 -3
  169. {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar}/execution/provenance/runtime_collector.py +3 -3
  170. {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar}/execution/provenance/service.py +11 -10
  171. roar_cli-0.2.11/roar/execution/recording/__init__.py +25 -0
  172. roar_cli-0.2.11/roar/execution/recording/dataset_metadata.py +108 -0
  173. {roar_cli-0.2.9/roar/services/execution → roar_cli-0.2.11/roar/execution/recording}/job_recording.py +203 -13
  174. roar_cli-0.2.11/roar/execution/reproduction/__init__.py +9 -0
  175. {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar/execution}/reproduction/environment_setup.py +1 -1
  176. roar_cli-0.2.11/roar/execution/runtime/__init__.py +47 -0
  177. {roar_cli-0.2.9/roar/services/execution → roar_cli-0.2.11/roar/execution/runtime}/backup.py +2 -2
  178. {roar_cli-0.2.9/roar/services/execution → roar_cli-0.2.11/roar/execution/runtime}/coordinator.py +39 -10
  179. roar_cli-0.2.11/roar/execution/runtime/driver_entrypoint.py +147 -0
  180. roar_cli-0.2.11/roar/execution/runtime/host_execution.py +39 -0
  181. roar_cli-0.2.11/roar/execution/runtime/inject/__init__.py +1 -0
  182. roar_cli-0.2.11/roar/execution/runtime/inject/sitecustomize.py +30 -0
  183. roar_cli-0.2.11/roar/execution/runtime/inject/support.py +51 -0
  184. roar_cli-0.2.11/roar/execution/runtime/inject/tracker.py +194 -0
  185. {roar_cli-0.2.9/roar/services/execution → roar_cli-0.2.11/roar/execution/runtime}/tracer.py +7 -6
  186. roar_cli-0.2.11/roar/execution/runtime/worker_bootstrap.py +135 -0
  187. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/filters/files.py +30 -9
  188. roar_cli-0.2.11/roar/integrations/__init__.py +27 -0
  189. roar_cli-0.2.11/roar/integrations/config/__init__.py +61 -0
  190. roar_cli-0.2.9/roar/config.py → roar_cli-0.2.11/roar/integrations/config/access.py +70 -24
  191. roar_cli-0.2.9/roar/core/settings.py → roar_cli-0.2.11/roar/integrations/config/loader.py +29 -15
  192. roar_cli-0.2.11/roar/integrations/config/raw.py +196 -0
  193. roar_cli-0.2.9/roar/core/models/config.py → roar_cli-0.2.11/roar/integrations/config/schema.py +53 -19
  194. roar_cli-0.2.11/roar/integrations/discovery.py +54 -0
  195. {roar_cli-0.2.9/roar/services/get/backends → roar_cli-0.2.11/roar/integrations/download}/__init__.py +3 -7
  196. roar_cli-0.2.11/roar/integrations/download/get.py +40 -0
  197. roar_cli-0.2.11/roar/integrations/git/__init__.py +10 -0
  198. {roar_cli-0.2.9/roar/plugins/vcs → roar_cli-0.2.11/roar/integrations/git}/base.py +9 -12
  199. roar_cli-0.2.9/roar/services/transfer/common.py → roar_cli-0.2.11/roar/integrations/git/context.py +5 -40
  200. roar_cli-0.2.9/roar/plugins/vcs/git.py → roar_cli-0.2.11/roar/integrations/git/provider.py +14 -12
  201. roar_cli-0.2.11/roar/integrations/glaas/__init__.py +41 -0
  202. {roar_cli-0.2.9/roar → roar_cli-0.2.11/roar/integrations}/glaas/auth.py +1 -1
  203. roar_cli-0.2.9/roar/glaas_client.py → roar_cli-0.2.11/roar/integrations/glaas/client.py +17 -9
  204. roar_cli-0.2.9/roar/ray/glaas_fragment_streamer.py → roar_cli-0.2.11/roar/integrations/glaas/fragment_streamer.py +3 -3
  205. roar_cli-0.2.11/roar/integrations/glaas/registration/__init__.py +30 -0
  206. {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar/integrations/glaas}/registration/artifact.py +6 -6
  207. {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar/integrations/glaas}/registration/coordinator.py +4 -4
  208. {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar/integrations/glaas}/registration/job.py +6 -6
  209. {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar/integrations/glaas}/registration/session.py +14 -23
  210. roar_cli-0.2.11/roar/integrations/glaas/transport.py +253 -0
  211. roar_cli-0.2.11/roar/integrations/registry.py +103 -0
  212. {roar_cli-0.2.9/roar/services/put/backends → roar_cli-0.2.11/roar/integrations/storage}/__init__.py +6 -7
  213. roar_cli-0.2.11/roar/integrations/storage/publish.py +40 -0
  214. {roar_cli-0.2.9/roar/plugins → roar_cli-0.2.11/roar/integrations}/telemetry/__init__.py +1 -5
  215. {roar_cli-0.2.9/roar/plugins → roar_cli-0.2.11/roar/integrations}/telemetry/base.py +2 -1
  216. {roar_cli-0.2.9/roar/plugins → roar_cli-0.2.11/roar/integrations}/telemetry/wandb.py +1 -1
  217. roar_cli-0.2.11/roar/presenters/__init__.py +31 -0
  218. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/presenters/dag_data_builder.py +49 -27
  219. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/presenters/dag_renderer.py +9 -0
  220. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/presenters/run_report.py +10 -2
  221. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/presenters/show_renderer.py +38 -17
  222. roar_cli-0.2.9/roar/bin/libroar_tracer_preload.so +0 -0
  223. roar_cli-0.2.9/roar/bin/roar-tracer-ebpf +0 -0
  224. roar_cli-0.2.9/roar/bin/roar-tracer-preload +0 -0
  225. roar_cli-0.2.9/roar/bin/roard +0 -0
  226. roar_cli-0.2.9/roar/cli/__init__.py +0 -157
  227. roar_cli-0.2.9/roar/cli/commands/_execution.py +0 -241
  228. roar_cli-0.2.9/roar/cli/commands/dag.py +0 -175
  229. roar_cli-0.2.9/roar/cli/commands/get.py +0 -293
  230. roar_cli-0.2.9/roar/cli/commands/lineage.py +0 -179
  231. roar_cli-0.2.9/roar/cli/commands/log.py +0 -117
  232. roar_cli-0.2.9/roar/cli/commands/put.py +0 -325
  233. roar_cli-0.2.9/roar/cli/commands/register.py +0 -139
  234. roar_cli-0.2.9/roar/cli/commands/reproduce.py +0 -281
  235. roar_cli-0.2.9/roar/cli/commands/run.py +0 -272
  236. roar_cli-0.2.9/roar/cli/commands/show.py +0 -334
  237. roar_cli-0.2.9/roar/cli/commands/status.py +0 -88
  238. roar_cli-0.2.9/roar/core/bootstrap.py +0 -100
  239. roar_cli-0.2.9/roar/core/container.py +0 -423
  240. roar_cli-0.2.9/roar/core/di.py +0 -118
  241. roar_cli-0.2.9/roar/core/interfaces/cloud.py +0 -135
  242. roar_cli-0.2.9/roar/core/interfaces/command.py +0 -76
  243. roar_cli-0.2.9/roar/core/interfaces/upload.py +0 -83
  244. roar_cli-0.2.9/roar/core/logging.py +0 -34
  245. roar_cli-0.2.9/roar/core/models/__init__.py +0 -171
  246. roar_cli-0.2.9/roar/core/models/command.py +0 -89
  247. roar_cli-0.2.9/roar/core/registry.py +0 -258
  248. roar_cli-0.2.9/roar/db/__init__.py +0 -63
  249. roar_cli-0.2.9/roar/glaas/__init__.py +0 -24
  250. roar_cli-0.2.9/roar/glaas/transport.py +0 -127
  251. roar_cli-0.2.9/roar/plugins/__init__.py +0 -16
  252. roar_cli-0.2.9/roar/plugins/cloud/__init__.py +0 -13
  253. roar_cli-0.2.9/roar/plugins/cloud/base.py +0 -302
  254. roar_cli-0.2.9/roar/plugins/vcs/__init__.py +0 -14
  255. roar_cli-0.2.9/roar/presenters/__init__.py +0 -14
  256. roar_cli-0.2.9/roar/ray/__init__.py +0 -6
  257. roar_cli-0.2.9/roar/ray/actor.py +0 -38
  258. roar_cli-0.2.9/roar/ray/driver_entrypoint.py +0 -143
  259. roar_cli-0.2.9/roar/ray/fragment.py +0 -51
  260. roar_cli-0.2.9/roar/ray/node_agent.py +0 -179
  261. roar_cli-0.2.9/roar/services/__init__.py +0 -8
  262. roar_cli-0.2.9/roar/services/execution/__init__.py +0 -44
  263. roar_cli-0.2.9/roar/services/execution/args.py +0 -163
  264. roar_cli-0.2.9/roar/services/execution/execution_service.py +0 -203
  265. roar_cli-0.2.9/roar/services/execution/inject/__init__.py +0 -1
  266. roar_cli-0.2.9/roar/services/execution/provenance/__init__.py +0 -10
  267. roar_cli-0.2.9/roar/services/get/__init__.py +0 -10
  268. roar_cli-0.2.9/roar/services/get/service.py +0 -444
  269. roar_cli-0.2.9/roar/services/lookup/__init__.py +0 -19
  270. roar_cli-0.2.9/roar/services/lookup/entity_lookup.py +0 -263
  271. roar_cli-0.2.9/roar/services/lookup/step_parser.py +0 -156
  272. roar_cli-0.2.9/roar/services/put/__init__.py +0 -18
  273. roar_cli-0.2.9/roar/services/put/git.py +0 -132
  274. roar_cli-0.2.9/roar/services/put/service.py +0 -1563
  275. roar_cli-0.2.9/roar/services/registration/__init__.py +0 -22
  276. roar_cli-0.2.9/roar/services/registration/_dataset_label.py +0 -52
  277. roar_cli-0.2.9/roar/services/registration/register_service.py +0 -1058
  278. roar_cli-0.2.9/roar/services/reproduction/__init__.py +0 -21
  279. roar_cli-0.2.9/roar/services/reproduction/service.py +0 -457
  280. roar_cli-0.2.9/roar/services/secrets/__init__.py +0 -5
  281. roar_cli-0.2.9/roar/services/secrets/filter_service.py +0 -133
  282. roar_cli-0.2.9/roar/services/transfer/__init__.py +0 -18
  283. roar_cli-0.2.9/roar/services/upload/__init__.py +0 -18
  284. roar_cli-0.2.9/roar/services/upload/service.py +0 -256
  285. roar_cli-0.2.9/roar/services/vcs/__init__.py +0 -15
  286. roar_cli-0.2.9/roar/services/vcs/git_access.py +0 -206
  287. {roar_cli-0.2.9 → roar_cli-0.2.11}/LICENSE +0 -0
  288. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/__init__.py +0 -0
  289. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/__main__.py +0 -0
  290. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/analyzers/__init__.py +0 -0
  291. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/analyzers/base.py +0 -0
  292. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/analyzers/experiment_trackers.py +0 -0
  293. {roar_cli-0.2.9/roar → roar_cli-0.2.11/roar/backends}/ray/_agent_names.py +0 -0
  294. {roar_cli-0.2.9/roar → roar_cli-0.2.11/roar/backends}/ray/s3_key_paths.py +0 -0
  295. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/cli/commands/__init__.py +0 -0
  296. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/cli/commands/pop.py +0 -0
  297. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/cli/commands/reset.py +0 -0
  298. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/digests.py +0 -0
  299. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/dto/__init__.py +0 -0
  300. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/dto/registration.py +0 -0
  301. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/exceptions.py +0 -0
  302. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/interfaces/config.py +0 -0
  303. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/interfaces/logger.py +0 -0
  304. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/interfaces/presenter.py +0 -0
  305. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/interfaces/registration.py +0 -0
  306. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/models/artifact.py +0 -0
  307. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/models/base.py +0 -0
  308. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/models/dataset_identifier.py +0 -0
  309. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/models/glaas.py +0 -0
  310. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/models/job.py +0 -0
  311. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/models/lineage.py +0 -0
  312. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/models/provenance.py +0 -0
  313. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/models/session.py +0 -0
  314. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/models/telemetry.py +0 -0
  315. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/models/vcs.py +0 -0
  316. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/tracer_modes.py +0 -0
  317. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/core/validation.py +0 -0
  318. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/engine.py +0 -0
  319. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/hashing/backend.py +0 -0
  320. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/repositories/collection.py +0 -0
  321. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/repositories/composite.py +0 -0
  322. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/repositories/hash_cache.py +0 -0
  323. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/services/__init__.py +0 -0
  324. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/services/hashing.py +0 -0
  325. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/services/lineage.py +0 -0
  326. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/db/services/session.py +0 -0
  327. {roar_cli-0.2.9/roar/services/execution → roar_cli-0.2.11/roar/execution/cluster}/proxy.py +0 -0
  328. {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar}/execution/provenance/process_summarizer.py +0 -0
  329. {roar_cli-0.2.9/roar/services/execution → roar_cli-0.2.11/roar/execution/recording}/dataset_identifier.py +0 -0
  330. /roar_cli-0.2.9/roar/services/registration/_dataset_profile.py → /roar_cli-0.2.11/roar/execution/recording/dataset_profile.py +0 -0
  331. {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar/execution}/reproduction/installers.py +0 -0
  332. {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar/execution}/reproduction/pipeline_executor.py +0 -0
  333. {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar/execution}/reproduction/pipeline_metadata.py +0 -0
  334. {roar_cli-0.2.9/roar/services/execution → roar_cli-0.2.11/roar/execution/runtime}/signal_handler.py +0 -0
  335. {roar_cli-0.2.9/roar/services/execution → roar_cli-0.2.11/roar/execution/runtime}/tracer_backends.py +0 -0
  336. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/filters/__init__.py +0 -0
  337. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/filters/omit.py +0 -0
  338. {roar_cli-0.2.9/roar/services/get/backends → roar_cli-0.2.11/roar/integrations/download}/base.py +0 -0
  339. {roar_cli-0.2.9/roar/services/get/backends → roar_cli-0.2.11/roar/integrations/download}/gcs.py +0 -0
  340. {roar_cli-0.2.9/roar/services/get/backends → roar_cli-0.2.11/roar/integrations/download}/http.py +0 -0
  341. {roar_cli-0.2.9/roar/services/get/backends → roar_cli-0.2.11/roar/integrations/download}/noop.py +0 -0
  342. {roar_cli-0.2.9/roar/services/get/backends → roar_cli-0.2.11/roar/integrations/download}/s3.py +0 -0
  343. {roar_cli-0.2.9/roar/services → roar_cli-0.2.11/roar/integrations/glaas}/registration/_artifact_ref.py +0 -0
  344. /roar_cli-0.2.9/roar/services/transfer/backend_resolution.py → /roar_cli-0.2.11/roar/integrations/resolution.py +0 -0
  345. {roar_cli-0.2.9/roar/services/put/backends → roar_cli-0.2.11/roar/integrations/storage}/base.py +0 -0
  346. {roar_cli-0.2.9/roar/services/put/backends → roar_cli-0.2.11/roar/integrations/storage}/gcs.py +0 -0
  347. {roar_cli-0.2.9/roar/services/put/backends → roar_cli-0.2.11/roar/integrations/storage}/memory.py +0 -0
  348. {roar_cli-0.2.9/roar/services/put/backends → roar_cli-0.2.11/roar/integrations/storage}/noop.py +0 -0
  349. {roar_cli-0.2.9/roar/services/put/backends → roar_cli-0.2.11/roar/integrations/storage}/s3.py +0 -0
  350. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/presenters/console.py +0 -0
  351. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/presenters/formatting.py +0 -0
  352. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/presenters/null.py +0 -0
  353. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/presenters/spinner.py +0 -0
  354. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/utils/__init__.py +0 -0
  355. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/utils/cloud.py +0 -0
  356. {roar_cli-0.2.9 → roar_cli-0.2.11}/roar/utils/git_url.py +0 -0
  357. {roar_cli-0.2.9 → roar_cli-0.2.11}/rust/Cargo.lock +0 -0
  358. {roar_cli-0.2.9 → roar_cli-0.2.11}/rust/Cargo.toml +0 -0
  359. {roar_cli-0.2.9 → roar_cli-0.2.11}/rust/crates/artifact-hash-core/Cargo.toml +0 -0
  360. {roar_cli-0.2.9 → roar_cli-0.2.11}/rust/crates/artifact-hash-core/src/lib.rs +0 -0
  361. {roar_cli-0.2.9 → roar_cli-0.2.11}/rust/crates/artifact-hash-py/Cargo.toml +0 -0
  362. {roar_cli-0.2.9 → roar_cli-0.2.11}/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.9
3
+ Version: 0.2.11
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: Intended Audience :: Science/Research
@@ -15,8 +15,10 @@ Classifier: Topic :: Software Development :: Version Control
15
15
  Classifier: Typing :: Typed
16
16
  Requires-Dist: blake3>=0.3.0
17
17
  Requires-Dist: click>=8.1.0
18
+ Requires-Dist: cryptography>=42.0.0
18
19
  Requires-Dist: dependency-injector>=4.40.0
19
20
  Requires-Dist: msgpack>=1.0.0
21
+ Requires-Dist: pyyaml>=6.0
20
22
  Requires-Dist: sqlalchemy>=2.0.0
21
23
  Requires-Dist: pysqlite3-binary>=0.5.0 ; platform_machine == 'x86_64' and sys_platform == 'linux'
22
24
  Requires-Dist: pydantic>=2.0.0
@@ -66,12 +68,12 @@ Requires Python 3.10+.
66
68
 
67
69
  ### Platform Support
68
70
 
69
- | Platform | Status |
70
- | ------------- | -------------- |
71
- | Linux x86_64 | ✅ Full support |
72
- | Linux aarch64 | ✅ Full support |
71
+ | Platform | Status |
72
+ | ------------- | ----------------------------------------------------------- |
73
+ | Linux x86_64 | ✅ Full support |
74
+ | Linux aarch64 | ✅ Full support |
73
75
  | macOS | 🚧 Experimental ([limitations](#macos-tracing-limitations)) |
74
- | Windows | Coming soon |
76
+ | Windows | Coming soon |
75
77
 
76
78
  PyPI wheels are published for Linux and macOS (`x86_64` and `arm64`).
77
79
 
@@ -107,11 +109,11 @@ roar run python evaluate.py --model model.pt --output metrics.json
107
109
 
108
110
  ### Backends
109
111
 
110
- | Backend | Binary | Platforms | Notes |
111
- | --- | --- | --- | --- |
112
- | eBPF | `roar-tracer-ebpf` | Linux | Fastest, but requires permissions and kernel support. |
112
+ | Backend | Binary | Platforms | Notes |
113
+ | ------- | ------------------------------------------------ | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
114
+ | eBPF | `roar-tracer-ebpf` | Linux | Fastest, but requires permissions and kernel support. |
113
115
  | preload | `roar-tracer-preload` + `libroar_tracer_preload` | macOS, Linux | Uses `DYLD_INSERT_LIBRARIES` (macOS) or `LD_PRELOAD` (Linux). Not compatible with processes that ignore preload env vars (e.g., SIP/hardened runtime on macOS), or fully-static binaries (common with Go). |
114
- | ptrace | `roar-tracer` | Linux | Slowest, broadest compatibility on Linux. |
116
+ | ptrace | `roar-tracer` | Linux | Slowest, broadest compatibility on Linux. |
115
117
 
116
118
  ### Building
117
119
 
@@ -259,19 +261,19 @@ roar config set <key> <value>
259
261
 
260
262
  Run `roar config list` to see all available options with descriptions. Common options:
261
263
 
262
- | Key | Default | Description |
263
- | ------------------------------ | -------------------- | --------------------------------------- |
264
- | `output.track_repo_files` | false | Include repo files in provenance |
265
- | `output.quiet` | false | Suppress written files report |
266
- | `filters.ignore_system_reads` | true | Ignore /sys, /etc, /sbin reads |
267
- | `filters.ignore_package_reads` | true | Ignore installed package reads |
268
- | `filters.ignore_torch_cache` | true | Ignore torch/triton cache |
269
- | `filters.ignore_tmp_files` | true | Ignore /tmp files |
264
+ | Key | Default | Description |
265
+ | ------------------------------ | ---------------------- | --------------------------------------- |
266
+ | `output.track_repo_files` | false | Include repo files in provenance |
267
+ | `output.quiet` | false | Suppress written files report |
268
+ | `filters.ignore_system_reads` | true | Ignore /sys, /etc, /sbin reads |
269
+ | `filters.ignore_package_reads` | true | Ignore installed package reads |
270
+ | `filters.ignore_torch_cache` | true | Ignore torch/triton cache |
271
+ | `filters.ignore_tmp_files` | true | Ignore /tmp files |
270
272
  | `glaas.url` | <https://api.glaas.ai> | GLaaS server URL |
271
273
  | `glaas.web_url` | <https://glaas.ai> | GLaaS web UI URL |
272
- | `registration.omit.enabled` | true | Enable secret filtering |
273
- | `hash.primary` | blake3 | Primary hash algorithm |
274
- | `logging.level` | warning | Log level (debug, info, warning, error) |
274
+ | `registration.omit.enabled` | true | Enable secret filtering |
275
+ | `hash.primary` | blake3 | Primary hash algorithm |
276
+ | `logging.level` | warning | Log level (debug, info, warning, error) |
275
277
 
276
278
  ### `roar dag`
277
279
 
@@ -303,16 +305,63 @@ Display recent job execution history.
303
305
  roar log # Show recent job history
304
306
  ```
305
307
 
308
+ ### `roar label`
309
+
310
+ Manage local labels for DAGs (sessions), jobs, and artifacts.
311
+
312
+ ```bash
313
+ # Set labels (patches the current label document)
314
+ roar label set dag current owner=alice team=ml
315
+ roar label set job @2 phase=train lr=0.001
316
+ roar label set artifact ./outputs/model.pt model.name=resnet50 stage=baseline
317
+
318
+ # Copy labels from one entity to another
319
+ roar label cp job @2 artifact ./outputs/model.pt
320
+
321
+ # Show current labels
322
+ roar label show dag current
323
+ roar label show job @2
324
+ roar label show artifact ./outputs/model.pt
325
+
326
+ # Show label history (all versions)
327
+ roar label history dag current
328
+ roar label history artifact <artifact-hash>
329
+ ```
330
+
331
+ **Entity targets:**
332
+
333
+ - `dag`: `current` or a session hash prefix
334
+ - `job`: step ref (`@N` or `@BN`) or job UID
335
+ - `artifact`: file path or artifact hash
336
+
337
+ Labels are stored locally and included in lineage registration/publish flows to GLaaS when supported by the configured server.
338
+
306
339
  ### `roar register`
307
340
 
308
- Register artifact lineage with GLaaS.
341
+ Register session, job, step, or artifact lineage with GLaaS.
309
342
 
310
343
  ```bash
311
344
  roar register model.pt # Register model lineage
312
345
  roar register --dry-run model.pt # Preview without registering
313
346
  roar register -y model.pt # Skip confirmation prompt
347
+ roar register @4 # Register lineage for DAG step 4
348
+ roar register deadbeef # Register lineage for a local job UID
349
+ roar register 7f1e...c9a4 # Register lineage for a tracked artifact hash
350
+ roar register 8d7a1f2c... # Register a whole local session
351
+ roar register s3://bucket/run/out # Register a tracked remote S3 artifact
314
352
  ```
315
353
 
354
+ **Supported targets:**
355
+
356
+ - Local artifact path: `model.pt`, `./outputs/metrics.json`
357
+ - Tracked artifact hash: primitive or composite
358
+ - Local job UID: full UID or unique prefix
359
+ - Step reference: `@N` or `@BN`
360
+ - Local session hash: full hash or unique prefix
361
+ - Tracked remote path: `s3://...`
362
+
363
+ For bare 8-character hex targets, `roar register` prefers a matching local job UID before falling back to session-hash-prefix resolution.
364
+
316
365
  ### `roar put`
317
366
 
318
367
  Upload artifacts to cloud storage and register lineage with GLaaS.
@@ -324,11 +373,13 @@ roar put @2 s3://bucket/outputs/ -m "Step 2 outputs"
324
373
  ```
325
374
 
326
375
  **Options:**
376
+
327
377
  - `-m, --message` — Description of the upload (required)
328
378
  - `--dry-run` — Preview without uploading
329
379
  - `--no-tag` — Skip git tagging
330
380
 
331
381
  **Source formats:**
382
+
332
383
  - File path: `model.pt`, `./data/output.csv`
333
384
  - Directory: `./checkpoints/` (uploads all files recursively)
334
385
  - Job reference: `@2` (uploads outputs from step 2)
@@ -346,6 +397,7 @@ roar get s3://bucket/checkpoints/ ./local/ # Download all files under prefix
346
397
  ```
347
398
 
348
399
  **Options:**
400
+
349
401
  - `-m, --message` — Annotation for this download
350
402
  - `--hash` — Expected BLAKE3 hash (for verification)
351
403
  - `--tag` — Create a git tag for this download
@@ -377,7 +429,7 @@ roar show ./output/model.pkl # Show artifact by path
377
429
 
378
430
  ### `roar status`
379
431
 
380
- Show a summary of the active session.
432
+ Show a summary of the active session, including the current DAG hash.
381
433
 
382
434
  ```bash
383
435
  roar status
@@ -393,6 +445,7 @@ roar pop -y # Pop without confirmation (skip prompt)
393
445
  ```
394
446
 
395
447
  **What it does:**
448
+
396
449
  - Removes the last job from the session history
397
450
  - Deletes output artifacts created by that job (unless they're packages/system files)
398
451
  - Does not affect the original input files
@@ -443,7 +496,7 @@ Add `.roar/` to your `.gitignore` (roar offers to do this during `roar init`).
443
496
 
444
497
  ## GLaaS Server
445
498
 
446
- Roar can register artifacts and jobs with a GLaaS (Global Lineage-as-a-Service) server using the `roar register` command.
499
+ Roar can register sessions, jobs, steps, and artifacts with a GLaaS (Global Lineage-as-a-Service) server using the `roar register` command.
447
500
 
448
501
  ### Server Setup
449
502
 
@@ -479,6 +532,9 @@ roar auth register
479
532
  roar auth test
480
533
  ```
481
534
 
535
+ > [!TIP]
536
+ > Roar activity can be registered without authentication. Unauthenticated registrations are attributed to a public "anonymous" user, but are not guaranteed persistence. For persistent attribution, we recommend setting up `roar auth`.
537
+
482
538
  ## Development
483
539
 
484
540
  ### Prerequisites
@@ -20,12 +20,12 @@ Requires Python 3.10+.
20
20
 
21
21
  ### Platform Support
22
22
 
23
- | Platform | Status |
24
- | ------------- | -------------- |
25
- | Linux x86_64 | ✅ Full support |
26
- | Linux aarch64 | ✅ Full support |
23
+ | Platform | Status |
24
+ | ------------- | ----------------------------------------------------------- |
25
+ | Linux x86_64 | ✅ Full support |
26
+ | Linux aarch64 | ✅ Full support |
27
27
  | macOS | 🚧 Experimental ([limitations](#macos-tracing-limitations)) |
28
- | Windows | Coming soon |
28
+ | Windows | Coming soon |
29
29
 
30
30
  PyPI wheels are published for Linux and macOS (`x86_64` and `arm64`).
31
31
 
@@ -61,11 +61,11 @@ roar run python evaluate.py --model model.pt --output metrics.json
61
61
 
62
62
  ### Backends
63
63
 
64
- | Backend | Binary | Platforms | Notes |
65
- | --- | --- | --- | --- |
66
- | eBPF | `roar-tracer-ebpf` | Linux | Fastest, but requires permissions and kernel support. |
64
+ | Backend | Binary | Platforms | Notes |
65
+ | ------- | ------------------------------------------------ | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
66
+ | eBPF | `roar-tracer-ebpf` | Linux | Fastest, but requires permissions and kernel support. |
67
67
  | preload | `roar-tracer-preload` + `libroar_tracer_preload` | macOS, Linux | Uses `DYLD_INSERT_LIBRARIES` (macOS) or `LD_PRELOAD` (Linux). Not compatible with processes that ignore preload env vars (e.g., SIP/hardened runtime on macOS), or fully-static binaries (common with Go). |
68
- | ptrace | `roar-tracer` | Linux | Slowest, broadest compatibility on Linux. |
68
+ | ptrace | `roar-tracer` | Linux | Slowest, broadest compatibility on Linux. |
69
69
 
70
70
  ### Building
71
71
 
@@ -213,19 +213,19 @@ roar config set <key> <value>
213
213
 
214
214
  Run `roar config list` to see all available options with descriptions. Common options:
215
215
 
216
- | Key | Default | Description |
217
- | ------------------------------ | -------------------- | --------------------------------------- |
218
- | `output.track_repo_files` | false | Include repo files in provenance |
219
- | `output.quiet` | false | Suppress written files report |
220
- | `filters.ignore_system_reads` | true | Ignore /sys, /etc, /sbin reads |
221
- | `filters.ignore_package_reads` | true | Ignore installed package reads |
222
- | `filters.ignore_torch_cache` | true | Ignore torch/triton cache |
223
- | `filters.ignore_tmp_files` | true | Ignore /tmp files |
216
+ | Key | Default | Description |
217
+ | ------------------------------ | ---------------------- | --------------------------------------- |
218
+ | `output.track_repo_files` | false | Include repo files in provenance |
219
+ | `output.quiet` | false | Suppress written files report |
220
+ | `filters.ignore_system_reads` | true | Ignore /sys, /etc, /sbin reads |
221
+ | `filters.ignore_package_reads` | true | Ignore installed package reads |
222
+ | `filters.ignore_torch_cache` | true | Ignore torch/triton cache |
223
+ | `filters.ignore_tmp_files` | true | Ignore /tmp files |
224
224
  | `glaas.url` | <https://api.glaas.ai> | GLaaS server URL |
225
225
  | `glaas.web_url` | <https://glaas.ai> | GLaaS web UI URL |
226
- | `registration.omit.enabled` | true | Enable secret filtering |
227
- | `hash.primary` | blake3 | Primary hash algorithm |
228
- | `logging.level` | warning | Log level (debug, info, warning, error) |
226
+ | `registration.omit.enabled` | true | Enable secret filtering |
227
+ | `hash.primary` | blake3 | Primary hash algorithm |
228
+ | `logging.level` | warning | Log level (debug, info, warning, error) |
229
229
 
230
230
  ### `roar dag`
231
231
 
@@ -257,16 +257,63 @@ Display recent job execution history.
257
257
  roar log # Show recent job history
258
258
  ```
259
259
 
260
+ ### `roar label`
261
+
262
+ Manage local labels for DAGs (sessions), jobs, and artifacts.
263
+
264
+ ```bash
265
+ # Set labels (patches the current label document)
266
+ roar label set dag current owner=alice team=ml
267
+ roar label set job @2 phase=train lr=0.001
268
+ roar label set artifact ./outputs/model.pt model.name=resnet50 stage=baseline
269
+
270
+ # Copy labels from one entity to another
271
+ roar label cp job @2 artifact ./outputs/model.pt
272
+
273
+ # Show current labels
274
+ roar label show dag current
275
+ roar label show job @2
276
+ roar label show artifact ./outputs/model.pt
277
+
278
+ # Show label history (all versions)
279
+ roar label history dag current
280
+ roar label history artifact <artifact-hash>
281
+ ```
282
+
283
+ **Entity targets:**
284
+
285
+ - `dag`: `current` or a session hash prefix
286
+ - `job`: step ref (`@N` or `@BN`) or job UID
287
+ - `artifact`: file path or artifact hash
288
+
289
+ Labels are stored locally and included in lineage registration/publish flows to GLaaS when supported by the configured server.
290
+
260
291
  ### `roar register`
261
292
 
262
- Register artifact lineage with GLaaS.
293
+ Register session, job, step, or artifact lineage with GLaaS.
263
294
 
264
295
  ```bash
265
296
  roar register model.pt # Register model lineage
266
297
  roar register --dry-run model.pt # Preview without registering
267
298
  roar register -y model.pt # Skip confirmation prompt
299
+ roar register @4 # Register lineage for DAG step 4
300
+ roar register deadbeef # Register lineage for a local job UID
301
+ roar register 7f1e...c9a4 # Register lineage for a tracked artifact hash
302
+ roar register 8d7a1f2c... # Register a whole local session
303
+ roar register s3://bucket/run/out # Register a tracked remote S3 artifact
268
304
  ```
269
305
 
306
+ **Supported targets:**
307
+
308
+ - Local artifact path: `model.pt`, `./outputs/metrics.json`
309
+ - Tracked artifact hash: primitive or composite
310
+ - Local job UID: full UID or unique prefix
311
+ - Step reference: `@N` or `@BN`
312
+ - Local session hash: full hash or unique prefix
313
+ - Tracked remote path: `s3://...`
314
+
315
+ For bare 8-character hex targets, `roar register` prefers a matching local job UID before falling back to session-hash-prefix resolution.
316
+
270
317
  ### `roar put`
271
318
 
272
319
  Upload artifacts to cloud storage and register lineage with GLaaS.
@@ -278,11 +325,13 @@ roar put @2 s3://bucket/outputs/ -m "Step 2 outputs"
278
325
  ```
279
326
 
280
327
  **Options:**
328
+
281
329
  - `-m, --message` — Description of the upload (required)
282
330
  - `--dry-run` — Preview without uploading
283
331
  - `--no-tag` — Skip git tagging
284
332
 
285
333
  **Source formats:**
334
+
286
335
  - File path: `model.pt`, `./data/output.csv`
287
336
  - Directory: `./checkpoints/` (uploads all files recursively)
288
337
  - Job reference: `@2` (uploads outputs from step 2)
@@ -300,6 +349,7 @@ roar get s3://bucket/checkpoints/ ./local/ # Download all files under prefix
300
349
  ```
301
350
 
302
351
  **Options:**
352
+
303
353
  - `-m, --message` — Annotation for this download
304
354
  - `--hash` — Expected BLAKE3 hash (for verification)
305
355
  - `--tag` — Create a git tag for this download
@@ -331,7 +381,7 @@ roar show ./output/model.pkl # Show artifact by path
331
381
 
332
382
  ### `roar status`
333
383
 
334
- Show a summary of the active session.
384
+ Show a summary of the active session, including the current DAG hash.
335
385
 
336
386
  ```bash
337
387
  roar status
@@ -347,6 +397,7 @@ roar pop -y # Pop without confirmation (skip prompt)
347
397
  ```
348
398
 
349
399
  **What it does:**
400
+
350
401
  - Removes the last job from the session history
351
402
  - Deletes output artifacts created by that job (unless they're packages/system files)
352
403
  - Does not affect the original input files
@@ -397,7 +448,7 @@ Add `.roar/` to your `.gitignore` (roar offers to do this during `roar init`).
397
448
 
398
449
  ## GLaaS Server
399
450
 
400
- Roar can register artifacts and jobs with a GLaaS (Global Lineage-as-a-Service) server using the `roar register` command.
451
+ Roar can register sessions, jobs, steps, and artifacts with a GLaaS (Global Lineage-as-a-Service) server using the `roar register` command.
401
452
 
402
453
  ### Server Setup
403
454
 
@@ -433,6 +484,9 @@ roar auth register
433
484
  roar auth test
434
485
  ```
435
486
 
487
+ > [!TIP]
488
+ > Roar activity can be registered without authentication. Unauthenticated registrations are attributed to a public "anonymous" user, but are not guaranteed persistence. For persistent attribution, we recommend setting up `roar auth`.
489
+
436
490
  ## Development
437
491
 
438
492
  ### Prerequisites
@@ -4,7 +4,7 @@ build-backend = "maturin"
4
4
 
5
5
  [project]
6
6
  name = "roar-cli"
7
- version = "0.2.9"
7
+ version = "0.2.11"
8
8
  description = "Reproducibility and provenance tracker for ML training pipelines"
9
9
  authors = [
10
10
  { name="TReqs Team", email="info@treqs.ai" }
@@ -38,8 +38,10 @@ classifiers = [
38
38
  dependencies = [
39
39
  "blake3>=0.3.0",
40
40
  "click>=8.1.0",
41
+ "cryptography>=42.0.0",
41
42
  "dependency-injector>=4.40.0",
42
43
  "msgpack>=1.0.0",
44
+ "PyYAML>=6.0",
43
45
  "sqlalchemy>=2.0.0",
44
46
  "pysqlite3-binary>=0.5.0; sys_platform == 'linux' and platform_machine == 'x86_64'", # Fallback when stdlib sqlite3 unavailable
45
47
  "pydantic>=2.0.0",
@@ -69,7 +71,11 @@ dev = [
69
71
  [project.scripts]
70
72
  # This registers `roar` on PATH after pip install
71
73
  roar = "roar.__main__:main"
72
- roar-worker = "roar.ray.roar_worker:main"
74
+ roar-worker = "roar.execution.runtime.worker_bootstrap:main"
75
+
76
+ [project.entry-points."roar.execution_backends"]
77
+ ray = "roar.backends.ray.plugin:register"
78
+ osmo = "roar.backends.osmo.plugin:register"
73
79
 
74
80
  [tool.maturin]
75
81
  manifest-path = "rust/crates/artifact-hash-py/Cargo.toml"
@@ -97,11 +103,14 @@ markers = [
97
103
  "ebpf: Tests requiring eBPF daemon/root privileges",
98
104
  "cloud: Tests for cloud storage operations",
99
105
  "happy_path: Happy path tests for core functionality",
106
+ "diagnostic: Opt-in diagnostics or aspirational performance budgets outside the default gate",
107
+ "large_pipeline: Stress-style pipeline coverage with larger DAG fixtures",
108
+ "osmo_e2e: OSMO end-to-end tests requiring a Docker Compose managed KIND harness",
100
109
  "ray_e2e: Ray end-to-end tests requiring a running Docker cluster",
101
110
  "ray_contract: User-facing Ray contract tests using `roar run ray job submit ...`",
102
111
  "ray_diagnostic: Diagnostic Ray tests that intentionally inspect internal runtime details",
103
112
  ]
104
- addopts = "-v --strict-markers -n auto --dist loadfile --ignore=tests/ebpf --ignore=tests/live_glaas --ignore=tests/benchmarks --ignore=tests/integration --ignore=tests/e2e"
113
+ addopts = "-v --strict-markers -n auto --dist loadfile --ignore=tests/ebpf --ignore=tests/live_glaas --ignore=tests/benchmarks --ignore=tests/e2e --ignore=tests/integration/test_cli_startup.py --ignore=tests/execution/runtime/test_sitecustomize_perf.py --ignore-glob=tests/backends/*/e2e --ignore-glob=tests/backends/*/live"
105
114
  timeout = 60
106
115
  filterwarnings = [
107
116
  "ignore::DeprecationWarning",
@@ -133,6 +142,7 @@ ignore = ["E501", "B008", "SIM108"]
133
142
 
134
143
  [tool.ruff.lint.per-file-ignores]
135
144
  "tests/**/*.py" = ["B011", "B017"]
145
+ "tests/backends/*/e2e/jobs/**/*.py" = ["I001"]
136
146
 
137
147
  [tool.ruff.lint.isort]
138
148
  known-first-party = ["roar"]
@@ -0,0 +1 @@
1
+ """Application workflow entrypoints."""
@@ -0,0 +1,7 @@
1
+ """Application entrypoints for `roar get` workflows."""
2
+
3
+ from .requests import GetRequest
4
+ from .results import GetDownloadedFile, GetDryRunItem, GetResponse
5
+ from .service import get_artifacts
6
+
7
+ __all__ = ["GetDownloadedFile", "GetDryRunItem", "GetRequest", "GetResponse", "get_artifacts"]
@@ -0,0 +1,22 @@
1
+ """Request DTOs for `roar get` application flows."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from dataclasses import dataclass
6
+ from pathlib import Path
7
+
8
+
9
+ @dataclass(frozen=True)
10
+ class GetRequest:
11
+ """Application request for a get workflow."""
12
+
13
+ source: str
14
+ destination: Path
15
+ roar_dir: Path
16
+ cwd: Path
17
+ repo_root: Path | None = None
18
+ message: str | None = None
19
+ expected_hash: str | None = None
20
+ dry_run: bool = False
21
+ force: bool = False
22
+ tag: bool = False
@@ -0,0 +1,35 @@
1
+ """Typed result DTOs for `roar get` application flows."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from dataclasses import dataclass, field
6
+
7
+
8
+ @dataclass(frozen=True)
9
+ class GetDownloadedFile:
10
+ remote_url: str
11
+ local_path: str
12
+ hash: str | None = None
13
+ size: int | None = None
14
+
15
+
16
+ @dataclass(frozen=True)
17
+ class GetDryRunItem:
18
+ remote_url: str
19
+ local_path: str
20
+
21
+
22
+ @dataclass(frozen=True)
23
+ class GetResponse:
24
+ """Application response for a get workflow."""
25
+
26
+ success: bool
27
+ source: str
28
+ job_id: int | None = None
29
+ job_uid: str | None = None
30
+ downloaded_files: list[GetDownloadedFile] = field(default_factory=list)
31
+ dry_run: bool = False
32
+ would_download: list[GetDryRunItem] = field(default_factory=list)
33
+ git_tag: str | None = None
34
+ warnings: list[str] = field(default_factory=list)
35
+ error: str | None = None