rosotacom-dev 2.2__tar.gz → 2.3__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 (334) hide show
  1. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/PKG-INFO +18 -1
  2. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/README.md +17 -0
  3. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/cli.py +70 -33
  4. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom_dev.egg-info/PKG-INFO +18 -1
  5. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom_dev.egg-info/scm_version.json +2 -2
  6. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/contract/test_packaged_resources.py +46 -0
  7. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/unit/test_cli.py +25 -0
  8. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/.devcontainer/devcontainer.json.template +0 -0
  9. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/.devcontainer/re_generate_devcontainer_json.py +0 -0
  10. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/.github/CODEOWNERS +0 -0
  11. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/.github/ISSUE_TEMPLATE/documentation-audit.md +0 -0
  12. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/.github/ISSUE_TEMPLATE/implementation-cleanup.md +0 -0
  13. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/.github/ISSUE_TEMPLATE/quality-workflow.md +0 -0
  14. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/.github/ISSUE_TEMPLATE/redesign.md +0 -0
  15. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/.github/ISSUE_TEMPLATE/release-process.md +0 -0
  16. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/.github/ISSUE_TEMPLATE/repository-diagnosis.md +0 -0
  17. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/.github/ISSUE_TEMPLATE/test-ci-audit.md +0 -0
  18. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/.github/ISSUE_TEMPLATE/work-item.md +0 -0
  19. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  20. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/.github/dependabot.yml +0 -0
  21. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/.github/workflows/benchmark-calibrate.yml +0 -0
  22. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/.github/workflows/benchmark-gate.yml +0 -0
  23. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/.github/workflows/image-scan.yml +0 -0
  24. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/.github/workflows/nightly-e2e.yml +0 -0
  25. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/.github/workflows/pr-lightweight.yml +0 -0
  26. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/.github/workflows/pr-merge-gate.yml +0 -0
  27. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/.github/workflows/release.yml +0 -0
  28. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/.pre-commit-config.yaml +0 -0
  29. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/AGENTS.md +0 -0
  30. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/CONCURRENCY.md +0 -0
  31. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/CONTRIBUTING.md +0 -0
  32. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/DEVELOPMENT_PRINCIPLES.md +0 -0
  33. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/LICENSE.txt +0 -0
  34. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/MANIFEST.in +0 -0
  35. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/budgets.jsonl +0 -0
  36. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/calibration/README.md +0 -0
  37. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/calibration/capacity-size-tight-cyclone.json +0 -0
  38. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/calibration/probe-loss-gop-tight-cyclone.json +0 -0
  39. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/calibration/probe-loss-nominal-cyclone.json +0 -0
  40. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/calibration/probe-loss-tight-cyclone.json +0 -0
  41. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/calibration/probe-loss-tight-fastdds.json +0 -0
  42. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/calibration/probe-loss-tight-zenoh.json +0 -0
  43. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/codecov.yml +0 -0
  44. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/deployment-configuration.md +0 -0
  45. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/benchmark-ab.md +0 -0
  46. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/benchmark-bag-as-load.md +0 -0
  47. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/ci.md +0 -0
  48. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/ffmpeg-keyframes.md +0 -0
  49. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/findings/README.md +0 -0
  50. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/findings/cyclone-spdp-discovery-bursts.md +0 -0
  51. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/findings/delay-alone-no-loss.md +0 -0
  52. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/findings/head-of-line-irregularity.md +0 -0
  53. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/findings/jitter-loss-bandwidth-latency.md +0 -0
  54. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/findings/lighter-message-loss.md +0 -0
  55. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/findings/zero-loss-boundaries-18kb-20hz.md +0 -0
  56. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/forensics-report.md +0 -0
  57. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/geo-link-map.md +0 -0
  58. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/github-repository-settings.md +0 -0
  59. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/link-trace.md +0 -0
  60. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/owner-runbook.md +0 -0
  61. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/performance-bands.md +0 -0
  62. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/playbooks/README.md +0 -0
  63. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/quality-model.md +0 -0
  64. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/release-notes/TEMPLATE.md +0 -0
  65. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/release-notes/v2.1.md +0 -0
  66. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/release-notes/v2.2.md +0 -0
  67. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/release.md +0 -0
  68. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/rfcs/0001-expectation-driven-test-suite.md +0 -0
  69. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/rfcs/0002-expectation-concepts.md +0 -0
  70. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/rfcs/0003-metric-backbone.md +0 -0
  71. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/rfcs/0004-network-profiles.md +0 -0
  72. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/rfcs/0005-benchmark-genres-and-ci.md +0 -0
  73. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/rfcs/0006-dynamic-qos.md +0 -0
  74. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/rfcs/0007-regression-gate.md +0 -0
  75. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/rfcs/README.md +0 -0
  76. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/testing.md +0 -0
  77. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/docs/work-items.md +0 -0
  78. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/install.sh +0 -0
  79. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/justfile +0 -0
  80. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/media/control_center.png +0 -0
  81. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/media/echo_test.png +0 -0
  82. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/media/forensics-report-example.png +0 -0
  83. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/media/host.png +0 -0
  84. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/media/vehicle.png +0 -0
  85. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/pyproject.toml +0 -0
  86. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/requirements.txt +0 -0
  87. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/rosotacom.yaml +0 -0
  88. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/run_session_in_container.py +0 -0
  89. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/session-configuration.md +0 -0
  90. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/setup.cfg +0 -0
  91. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/__init__.py +0 -0
  92. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/__main__.py +0 -0
  93. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/anonymize.py +0 -0
  94. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/bag_ground_truth.py +0 -0
  95. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/benched_set.py +0 -0
  96. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/benchmark.py +0 -0
  97. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/bundle_check.py +0 -0
  98. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/cli_benchmark.py +0 -0
  99. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/deployment.py +0 -0
  100. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/ffmpeg_packet.py +0 -0
  101. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/forensics.py +0 -0
  102. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/geomap.py +0 -0
  103. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/network_profiles.py +0 -0
  104. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/network_shaper.py +0 -0
  105. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/plots.py +0 -0
  106. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/py.typed +0 -0
  107. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/benched-set.yaml +0 -0
  108. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/.gitignore +0 -0
  109. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/README.md +0 -0
  110. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/__init__.py +0 -0
  111. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/bags/8_drop_reference/metadata.yaml +0 -0
  112. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/deployment.example.yaml +0 -0
  113. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/profiles.yaml +0 -0
  114. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/ros2docker.json +0 -0
  115. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/rosotacom.yaml +0 -0
  116. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scenarios/2_native_chatter/scenario-definition.yaml +0 -0
  117. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/1_heartbeat/run_machine_a.sh +0 -0
  118. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/1_heartbeat/run_machine_b.sh +0 -0
  119. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/external.ros2docker.json +0 -0
  120. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/run_communication.sh +0 -0
  121. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/run_external.py +0 -0
  122. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/wait_for_echo_topic.sh +0 -0
  123. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/external.ros2docker.json +0 -0
  124. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/run_communication.sh +0 -0
  125. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/run_external.py +0 -0
  126. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/external.ros2docker.json +0 -0
  127. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/external_session.yaml +0 -0
  128. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/foxglove.json +0 -0
  129. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/run_communication.sh +0 -0
  130. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/run_external.py +0 -0
  131. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/costmap_1second/costmap_1second_0.mcap +0 -0
  132. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/costmap_1second/metadata.yaml +0 -0
  133. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/external.ros2docker.json +0 -0
  134. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/run_communication.sh +0 -0
  135. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/run_external.py +0 -0
  136. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/external.ros2docker.json +0 -0
  137. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/external_session.yaml +0 -0
  138. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/foxglove.json +0 -0
  139. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/run_communication.sh +0 -0
  140. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/run_external.py +0 -0
  141. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/costmap_1second/costmap_1second_0.mcap +0 -0
  142. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/costmap_1second/metadata.yaml +0 -0
  143. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/external.ros2docker.json +0 -0
  144. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/run_communication.sh +0 -0
  145. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/run_external.py +0 -0
  146. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/external.ros2docker.json +0 -0
  147. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/external_session.yaml +0 -0
  148. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/run_communication.sh +0 -0
  149. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/run_external.py +0 -0
  150. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/external.ros2docker.json +0 -0
  151. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/external_session.yaml +0 -0
  152. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/run_communication.sh +0 -0
  153. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/run_external.py +0 -0
  154. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/external.ros2docker.json +0 -0
  155. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/external_session.yaml +0 -0
  156. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/run_communication.sh +0 -0
  157. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/run_external.py +0 -0
  158. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/external.ros2docker.json +0 -0
  159. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/external_session.yaml +0 -0
  160. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/run_communication.sh +0 -0
  161. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/run_external.py +0 -0
  162. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/sessions/10_restamp/session-definition.yaml +0 -0
  163. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/sessions/11_trickle/session-definition.yaml +0 -0
  164. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/sessions/12_content_integrity/session-definition.yaml +0 -0
  165. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/sessions/13_link_latency/session-definition.yaml +0 -0
  166. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/sessions/14_remote_assist_anonymized/session-definition.yaml +0 -0
  167. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/sessions/15_remote_assist_anonymized_costmap/session-definition.yaml +0 -0
  168. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/sessions/16_remote_assist_anonymized_camera/session-definition.yaml +0 -0
  169. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/sessions/17_synthetic_camera_quality/session-definition.yaml +0 -0
  170. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/sessions/1_heartbeat/session-definition.yaml +0 -0
  171. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/sessions/1_heartbeat_status/session-definition.yaml +0 -0
  172. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/sessions/2_native_chatter/session-definition.yaml +0 -0
  173. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/sessions/3_comp_occ_grid/session-definition.yaml +0 -0
  174. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/sessions/4_comp_occ_grid_zen/session-definition.yaml +0 -0
  175. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/sessions/5_sized_payload/session-definition.yaml +0 -0
  176. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/sessions/6_sized_payload_zen/session-definition.yaml +0 -0
  177. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/sessions/7_latched_static/session-definition.yaml +0 -0
  178. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/sessions/8_drop/session-definition.yaml +0 -0
  179. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/sessions/9_throttle/session-definition.yaml +0 -0
  180. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/sessions/bench_1_1_capacity/session-definition.yaml +0 -0
  181. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/sessions/bench_1_2_load_sweep/session-definition.yaml +0 -0
  182. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/sessions/bench_1_3_ramp/session-definition.yaml +0 -0
  183. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/sessions/bench_1_4_recovery/session-definition.yaml +0 -0
  184. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/examples/sessions/bench_1_5_camera/session-definition.yaml +0 -0
  185. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ros2docker.json.example +0 -0
  186. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/.vscode/c_cpp_properties.json +0 -0
  187. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/.vscode/settings.json +0 -0
  188. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_easy_mode.xml.template +0 -0
  189. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_initial_peer_list.xml.template +0 -0
  190. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v2.xml.template +0 -0
  191. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v3.xml.template +0 -0
  192. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v4.xml.template +0 -0
  193. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v5.xml.template +0 -0
  194. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ota_configs/create_zenoh_json5.py +0 -0
  195. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ota_configs/cyclonedds_minimal.xml.template +0 -0
  196. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ota_configs/cyclonedds_tuned.xml.template +0 -0
  197. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ota_configs/fastdds_unicast.xml.template +0 -0
  198. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ota_configs/get_ota_xml.py +0 -0
  199. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ota_configs/utils.py +0 -0
  200. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ota_configs/zenoh.json5.template +0 -0
  201. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/.gitkeep +0 -0
  202. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_cpp/CMakeLists.txt +0 -0
  203. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_cpp/COLCON_IGNORE +0 -0
  204. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_cpp/LICENSE.txt +0 -0
  205. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_cpp/package.xml +0 -0
  206. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_cpp/src/hz_monitor.cpp +0 -0
  207. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_cpp/src/universal_compressor.cpp +0 -0
  208. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_cpp/src/universal_decompressor.cpp +0 -0
  209. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_msgs/CMakeLists.txt +0 -0
  210. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_msgs/LICENSE.txt +0 -0
  211. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/CompressedData.msg +0 -0
  212. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/EchoHeartbeat.msg +0 -0
  213. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/OtaStamped.msg +0 -0
  214. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/SizedPayload.msg +0 -0
  215. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_msgs/package.xml +0 -0
  216. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/LICENSE.txt +0 -0
  217. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/__init__.py +0 -0
  218. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/base_bridge_relay.py +0 -0
  219. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/bridge_in.py +0 -0
  220. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/bridge_out.py +0 -0
  221. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/heartbeat_echo.py +0 -0
  222. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/hz_monitor.py +0 -0
  223. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/image_bandwidth_reducer.py +0 -0
  224. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/image_pixel_capper.py +0 -0
  225. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/lanelet_saver.py +0 -0
  226. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/latch_relay.py +0 -0
  227. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/costmap_remapper.py +0 -0
  228. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/marker_remapper.py +0 -0
  229. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/speed_test.py +0 -0
  230. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/tf_remapper.py +0 -0
  231. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/traffic_monitor.py +0 -0
  232. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/wifi_network_analysis_1.py +0 -0
  233. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/link_bytes.py +0 -0
  234. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/link_trace.py +0 -0
  235. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/local_global_frame_bridge.py +0 -0
  236. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/localization_map_split_reduce_saver.py +0 -0
  237. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/msg_transform.py +0 -0
  238. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/pair_management.py +0 -0
  239. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/pub_sub_pair.py +0 -0
  240. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/qos.py +0 -0
  241. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/relay_in.py +0 -0
  242. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/relay_out.py +0 -0
  243. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/restamp.py +0 -0
  244. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/sized_publisher.py +0 -0
  245. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/stage_latency.py +0 -0
  246. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/stage_latency_core.py +0 -0
  247. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/status_overview.py +0 -0
  248. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/status_overview_core.py +0 -0
  249. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/tf_map_to_cart_saver.py +0 -0
  250. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/topic_monitor.py +0 -0
  251. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/topic_resolution.py +0 -0
  252. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/trickle.py +0 -0
  253. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_compressor.py +0 -0
  254. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_decompressor.py +0 -0
  255. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_ota_unwrapper.py +0 -0
  256. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_ota_wrapper.py +0 -0
  257. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/package.xml +0 -0
  258. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/resource/com_py +0 -0
  259. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/setup.cfg +0 -0
  260. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/setup.py +0 -0
  261. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/test/test_copyright.py +0 -0
  262. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/test/test_flake8.py +0 -0
  263. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/ros2src/com_py/test/test_pep257.py +0 -0
  264. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/session/content/base/session_plugin_base.yaml +0 -0
  265. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/session/content/network/up_connectivity.py +0 -0
  266. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/session/content/network/wifi_network_analysis_2.py +0 -0
  267. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/session/creation/anonymize_bag.py +0 -0
  268. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/session/creation/catmux_log_setup.sh +0 -0
  269. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/session/creation/create_session_yaml.py +0 -0
  270. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/session/creation/generate_session_files.py +0 -0
  271. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/session/creation/run_session.py +0 -0
  272. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/session/creation/run_session_in_external_terminal.py +0 -0
  273. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/resources/ws/session/creation/strip_ansi.py +0 -0
  274. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/status_eval.py +0 -0
  275. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/stream_stats.py +0 -0
  276. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/trace_profiles.py +0 -0
  277. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/transit.py +0 -0
  278. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom/video_quality.py +0 -0
  279. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom_dev.egg-info/SOURCES.txt +0 -0
  280. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom_dev.egg-info/dependency_links.txt +0 -0
  281. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom_dev.egg-info/entry_points.txt +0 -0
  282. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom_dev.egg-info/requires.txt +0 -0
  283. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom_dev.egg-info/scm_file_list.json +0 -0
  284. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/src/rosotacom_dev.egg-info/top_level.txt +0 -0
  285. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/stop_session_in_container.py +0 -0
  286. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/terminology.md +0 -0
  287. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/contract/test_benched_set_registry.py +0 -0
  288. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/contract/test_findings.py +0 -0
  289. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/contract/test_markdown_links.py +0 -0
  290. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/contract/test_package_metadata.py +0 -0
  291. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/contract/test_profile_covers_generated_commands.py +0 -0
  292. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/contract/test_pytest_policy.py +0 -0
  293. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/contract/test_readme_examples.py +0 -0
  294. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/contract/test_security_maintenance_config.py +0 -0
  295. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/contract/test_workflow_contracts.py +0 -0
  296. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/e2e/conftest.py +0 -0
  297. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/e2e/test_anonymize_e2e.py +0 -0
  298. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/e2e/test_benchmark_ab.py +0 -0
  299. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/e2e/test_benchmark_capacity.py +0 -0
  300. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/e2e/test_benchmark_replay.py +0 -0
  301. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/e2e/test_parallel_smoke.py +0 -0
  302. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/e2e/test_smoke.py +0 -0
  303. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/e2e/test_timeline_stepping.py +0 -0
  304. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/e2e/test_video_quality_e2e.py +0 -0
  305. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/sessions/generate_rmw_matrix.py +0 -0
  306. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-local_zenoh-ros2dds-ota/session-definition.yaml +0 -0
  307. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-ota/session-definition.yaml +0 -0
  308. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-ota-tuned/session-definition.yaml +0 -0
  309. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/sessions/rmw_matrix/1_heartbeat_fastdds/session-definition.yaml +0 -0
  310. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/sessions/rmw_matrix/1_heartbeat_zen-endpoints/session-definition.yaml +0 -0
  311. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/unit/test_anonymize.py +0 -0
  312. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/unit/test_bag_ground_truth.py +0 -0
  313. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/unit/test_benched_set.py +0 -0
  314. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/unit/test_benchmark.py +0 -0
  315. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/unit/test_bundle_check.py +0 -0
  316. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/unit/test_cli_benchmark.py +0 -0
  317. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/unit/test_concurrency.py +0 -0
  318. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/unit/test_deployment.py +0 -0
  319. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/unit/test_ffmpeg_packet.py +0 -0
  320. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/unit/test_forensics.py +0 -0
  321. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/unit/test_geomap.py +0 -0
  322. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/unit/test_link_bytes.py +0 -0
  323. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/unit/test_link_trace.py +0 -0
  324. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/unit/test_network_profiles.py +0 -0
  325. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/unit/test_network_shaper.py +0 -0
  326. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/unit/test_ota_xml.py +0 -0
  327. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/unit/test_plots.py +0 -0
  328. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/unit/test_stage_latency.py +0 -0
  329. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/unit/test_status_eval.py +0 -0
  330. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/unit/test_status_overview.py +0 -0
  331. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/unit/test_stream_stats.py +0 -0
  332. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/unit/test_trace_profiles.py +0 -0
  333. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/unit/test_transit.py +0 -0
  334. {rosotacom_dev-2.2 → rosotacom_dev-2.3}/tests/unit/test_video_quality.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rosotacom-dev
3
- Version: 2.2
3
+ Version: 2.3
4
4
  Summary: Host CLI for ROS OTA communication sessions.
5
5
  Author: develNor
6
6
  License-Expression: BSD-3-Clause
@@ -218,6 +218,23 @@ scripts/
218
218
  project-local directories first and shared/example directories later when one
219
219
  project should discover both.
220
220
 
221
+ ### Locating packaged resources
222
+
223
+ rosotacom is installed in an isolated environment (pipx, or a project venv), so
224
+ another tool cannot `import rosotacom` from a system Python to find the files
225
+ that ship with it. Ask the CLI instead — it prints one absolute path, so it
226
+ composes directly in a shell:
227
+
228
+ ```bash
229
+ rosotacom resources path com_msgs # the ROS 2 message package
230
+ rosotacom resources path ws # the packaged runtime workspace
231
+ ```
232
+
233
+ Use this wherever another project needs rosotacom's files on the host, for
234
+ example to bake `com_msgs` into its own container image. Ask for the resource by
235
+ name rather than reconstructing a path: the names are part of the CLI contract,
236
+ the layout behind them is not.
237
+
221
238
  See the [example project README](src/rosotacom/resources/examples/README.md)
222
239
  for the copyable example layout, the
223
240
  [session configuration reference](session-configuration.md) for the session
@@ -173,6 +173,23 @@ scripts/
173
173
  project-local directories first and shared/example directories later when one
174
174
  project should discover both.
175
175
 
176
+ ### Locating packaged resources
177
+
178
+ rosotacom is installed in an isolated environment (pipx, or a project venv), so
179
+ another tool cannot `import rosotacom` from a system Python to find the files
180
+ that ship with it. Ask the CLI instead — it prints one absolute path, so it
181
+ composes directly in a shell:
182
+
183
+ ```bash
184
+ rosotacom resources path com_msgs # the ROS 2 message package
185
+ rosotacom resources path ws # the packaged runtime workspace
186
+ ```
187
+
188
+ Use this wherever another project needs rosotacom's files on the host, for
189
+ example to bake `com_msgs` into its own container image. Ask for the resource by
190
+ name rather than reconstructing a path: the names are part of the CLI contract,
191
+ the layout behind them is not.
192
+
176
193
  See the [example project README](src/rosotacom/resources/examples/README.md)
177
194
  for the copyable example layout, the
178
195
  [session configuration reference](session-configuration.md) for the session
@@ -82,6 +82,16 @@ PROJECT_DIR = RESOURCE_DIR
82
82
  WS_DIR = RESOURCE_DIR / "ws"
83
83
  DEFAULT_ROS2DOCKER_CONFIG = RESOURCE_DIR / "ros2docker.json.example"
84
84
  EXAMPLE_PROJECT_DIR = RESOURCE_DIR / "examples"
85
+
86
+ # Packaged resources external tooling may need to locate on the host. rosotacom
87
+ # is installed in an isolated environment (pipx, or a project venv), so a
88
+ # consumer cannot `import rosotacom` to find these; `rosotacom resources path`
89
+ # is the supported lookup. Names are part of the CLI contract, the layout behind
90
+ # them is not — ask for "com_msgs", not for "ws/ros2src/com_msgs".
91
+ NAMED_RESOURCES = {
92
+ "ws": WS_DIR,
93
+ "com_msgs": WS_DIR / "ros2src" / "com_msgs",
94
+ }
85
95
  SESSION_CONFIG_CONTAINER_DIR = "/session/configs"
86
96
  SESSION_DEFINITION_CONTAINER_DIR = "/session/definitions"
87
97
  SESSION_INSTANCE_CONTAINER_DIR = "/session/instances"
@@ -4618,6 +4628,20 @@ def examples_create_command(args: argparse.Namespace) -> int:
4618
4628
  return 0
4619
4629
 
4620
4630
 
4631
+ def resources_path_command(args: argparse.Namespace) -> int:
4632
+ """Print the host path of a packaged resource, for external tooling."""
4633
+
4634
+ path = NAMED_RESOURCES[args.name].resolve()
4635
+ if not path.exists():
4636
+ raise RuntimeError(
4637
+ f"Packaged resource {args.name!r} is missing from this rosotacom "
4638
+ f"installation (expected at {path}). The install is incomplete: "
4639
+ f"reinstall the package."
4640
+ )
4641
+ print(path)
4642
+ return 0
4643
+
4644
+
4621
4645
  def _require_project_file(raw: str | None) -> Path:
4622
4646
  config = _resolve_path(raw, Path.cwd(), must_exist=True)
4623
4647
  if not config or not config.is_file():
@@ -7801,43 +7825,50 @@ def videoquality_command(args: argparse.Namespace) -> int:
7801
7825
  return 0
7802
7826
 
7803
7827
 
7828
+ # `rosotacom <session>` is shorthand for `rosotacom start <session>`. To know when
7829
+ # NOT to insert the implicit "start", main() needs the set of real command names.
7830
+ # A subparser missing here becomes unreachable — `rosotacom foo` would silently
7831
+ # turn into `rosotacom start foo` — so a contract test keeps the two in sync.
7832
+ TOP_LEVEL_COMMANDS = {
7833
+ "start",
7834
+ "stop",
7835
+ "doctor",
7836
+ "ps",
7837
+ "smoke",
7838
+ "ota-smoke",
7839
+ "status",
7840
+ "metrics",
7841
+ "videoquality",
7842
+ "geomap",
7843
+ "report",
7844
+ "stream-stats",
7845
+ "test",
7846
+ "expect",
7847
+ "calibrate",
7848
+ "verify", # retired; keep guarded so it is not rewritten as `start verify`.
7849
+ "probe-publish",
7850
+ "probe-check",
7851
+ "probe-content",
7852
+ "publish-test-topics",
7853
+ "list-sessions",
7854
+ "scenario",
7855
+ "examples",
7856
+ "resources",
7857
+ "config",
7858
+ "bundle",
7859
+ "profile",
7860
+ "completion",
7861
+ "benchmark",
7862
+ "ota-benchmark",
7863
+ "anonymize",
7864
+ }
7865
+
7866
+
7804
7867
  def main(argv: list[str] | None = None) -> int:
7805
7868
  argv = list(sys.argv[1:] if argv is None else argv)
7806
- commands = {
7807
- "start",
7808
- "stop",
7809
- "doctor",
7810
- "ps",
7811
- "smoke",
7812
- "ota-smoke",
7813
- "status",
7814
- "metrics",
7815
- "videoquality",
7816
- "geomap",
7817
- "report",
7818
- "stream-stats",
7819
- "test",
7820
- "expect",
7821
- "calibrate",
7822
- "verify", # retired; keep guarded so it is not rewritten as `start verify`.
7823
- "probe-publish",
7824
- "probe-check",
7825
- "probe-content",
7826
- "publish-test-topics",
7827
- "list-sessions",
7828
- "scenario",
7829
- "examples",
7830
- "config",
7831
- "bundle",
7832
- "profile",
7833
- "completion",
7834
- "benchmark",
7835
- "ota-benchmark",
7836
- "anonymize",
7837
- }
7838
7869
  if not argv:
7839
7870
  argv = ["start"]
7840
- elif argv[0] not in commands and not argv[0].startswith("-"):
7871
+ elif argv[0] not in TOP_LEVEL_COMMANDS and not argv[0].startswith("-"):
7841
7872
  argv = ["start", *argv]
7842
7873
 
7843
7874
  parser = argparse.ArgumentParser(prog="rosotacom")
@@ -8480,6 +8511,12 @@ def main(argv: list[str] | None = None) -> int:
8480
8511
  examples_create_parser.add_argument("--force", action="store_true", help="Replace the target if it exists.")
8481
8512
  examples_create_parser.set_defaults(func=examples_create_command)
8482
8513
 
8514
+ resources_parser = subparsers.add_parser("resources", help="Locate resources packaged with rosotacom.")
8515
+ resources_subparsers = resources_parser.add_subparsers(dest="resources_action", required=True)
8516
+ resources_path_parser = resources_subparsers.add_parser("path", help="Print the host path of a packaged resource.")
8517
+ resources_path_parser.add_argument("name", choices=sorted(NAMED_RESOURCES))
8518
+ resources_path_parser.set_defaults(func=resources_path_command)
8519
+
8483
8520
  config_parser = subparsers.add_parser("config", help="Inspect or set the active rosotacom project.")
8484
8521
  config_subparsers = config_parser.add_subparsers(dest="config_action", required=True)
8485
8522
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rosotacom-dev
3
- Version: 2.2
3
+ Version: 2.3
4
4
  Summary: Host CLI for ROS OTA communication sessions.
5
5
  Author: develNor
6
6
  License-Expression: BSD-3-Clause
@@ -218,6 +218,23 @@ scripts/
218
218
  project-local directories first and shared/example directories later when one
219
219
  project should discover both.
220
220
 
221
+ ### Locating packaged resources
222
+
223
+ rosotacom is installed in an isolated environment (pipx, or a project venv), so
224
+ another tool cannot `import rosotacom` from a system Python to find the files
225
+ that ship with it. Ask the CLI instead — it prints one absolute path, so it
226
+ composes directly in a shell:
227
+
228
+ ```bash
229
+ rosotacom resources path com_msgs # the ROS 2 message package
230
+ rosotacom resources path ws # the packaged runtime workspace
231
+ ```
232
+
233
+ Use this wherever another project needs rosotacom's files on the host, for
234
+ example to bake `com_msgs` into its own container image. Ask for the resource by
235
+ name rather than reconstructing a path: the names are part of the CLI contract,
236
+ the layout behind them is not.
237
+
221
238
  See the [example project README](src/rosotacom/resources/examples/README.md)
222
239
  for the copyable example layout, the
223
240
  [session configuration reference](session-configuration.md) for the session
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "2.2",
2
+ "tag": "2.3",
3
3
  "distance": 0,
4
- "node": "g9238899c274aaa7df7778b0348702130527fa1b3",
4
+ "node": "g60990e425f2700fb3786069ecff1e369d2fac8f8",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-08-07"
@@ -1,10 +1,12 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import argparse
3
4
  import os
4
5
  import subprocess
5
6
  from importlib import resources
6
7
  from pathlib import Path
7
8
 
9
+ import pytest
8
10
  import yaml
9
11
 
10
12
  import rosotacom.cli as cli
@@ -238,3 +240,47 @@ def test_native_chatter_waiter_reads_topic_info_without_broken_pipe(tmp_path: Pa
238
240
 
239
241
  assert result.stdout.strip() == "echo started"
240
242
  assert "BrokenPipeError" not in result.stderr
243
+
244
+
245
+ def test_every_registered_subcommand_is_exempt_from_implicit_start(
246
+ monkeypatch: pytest.MonkeyPatch,
247
+ ) -> None:
248
+ # `rosotacom <session>` is shorthand for `rosotacom start <session>`, so
249
+ # main() only skips the implicit "start" for names in TOP_LEVEL_COMMANDS.
250
+ # A subparser missing from that set is unreachable: the CLI silently turns
251
+ # `rosotacom foo ...` into `rosotacom start foo ...` and fails somewhere
252
+ # unrelated. Capture what is actually registered and compare.
253
+ captured: dict[str, argparse._SubParsersAction] = {}
254
+ original = argparse.ArgumentParser.add_subparsers
255
+
256
+ def spy(self: argparse.ArgumentParser, *args: object, **kwargs: object):
257
+ action = original(self, *args, **kwargs)
258
+ if self.prog == "rosotacom":
259
+ captured["top"] = action
260
+ return action
261
+
262
+ monkeypatch.setattr(argparse.ArgumentParser, "add_subparsers", spy)
263
+ with pytest.raises(SystemExit):
264
+ cli.main(["--help"])
265
+
266
+ registered = set(captured["top"].choices)
267
+ assert registered, "no top-level subparsers were captured"
268
+
269
+ unreachable = registered - cli.TOP_LEVEL_COMMANDS
270
+ assert not unreachable, f"subcommands missing from TOP_LEVEL_COMMANDS: {sorted(unreachable)}"
271
+
272
+ # The reverse direction may legitimately carry retired names (e.g. "verify"),
273
+ # which stay guarded so they are not rewritten as `start verify`.
274
+ assert "resources" in registered
275
+
276
+
277
+ def test_named_resources_point_at_real_packaged_directories() -> None:
278
+ for name, path in cli.NAMED_RESOURCES.items():
279
+ assert path.is_dir(), f"packaged resource {name!r} is not a directory: {path}"
280
+
281
+ # com_msgs is consumed by external builds (fleet_mgmt bakes it into its
282
+ # container images), so it must be a usable ROS 2 package, not just a folder.
283
+ com_msgs = cli.NAMED_RESOURCES["com_msgs"]
284
+ assert (com_msgs / "package.xml").is_file()
285
+ assert (com_msgs / "CMakeLists.txt").is_file()
286
+ assert list(com_msgs.glob("msg/*.msg"))
@@ -2759,3 +2759,28 @@ def test_content_integrity_skips_transformed_topics() -> None:
2759
2759
  )
2760
2760
  )
2761
2761
  assert rosotacom._content_integrity_specs(cfg, "a") == []
2762
+
2763
+
2764
+ def test_resources_path_prints_an_absolute_existing_path(capsys: pytest.CaptureFixture[str]) -> None:
2765
+ # External tooling cannot `import rosotacom` (pipx/venv isolation), so this
2766
+ # command is the only supported way to locate packaged resources. It must
2767
+ # print exactly one absolute path and nothing else, to stay shell-composable.
2768
+ for name in rosotacom.NAMED_RESOURCES:
2769
+ assert rosotacom.resources_path_command(argparse.Namespace(name=name)) == 0
2770
+ out = capsys.readouterr().out
2771
+ assert out.endswith("\n")
2772
+ printed = Path(out.strip())
2773
+ assert printed.is_absolute()
2774
+ assert printed.is_dir()
2775
+ assert len(out.splitlines()) == 1
2776
+
2777
+
2778
+ def test_resources_path_rejects_an_unknown_resource_name() -> None:
2779
+ with pytest.raises(SystemExit):
2780
+ rosotacom.main(["resources", "path", "no_such_resource"])
2781
+
2782
+
2783
+ def test_resources_path_reports_an_incomplete_installation(monkeypatch: pytest.MonkeyPatch, tmp_path: Path) -> None:
2784
+ monkeypatch.setitem(rosotacom.NAMED_RESOURCES, "ws", tmp_path / "gone")
2785
+ with pytest.raises(RuntimeError, match="missing from this rosotacom installation"):
2786
+ rosotacom.resources_path_command(argparse.Namespace(name="ws"))
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes