rosotacom-dev 2.5.dev4__tar.gz → 2.5.dev6__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 (339) hide show
  1. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/PKG-INFO +1 -1
  2. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/testing.md +10 -0
  3. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/cli.py +49 -2
  4. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/status_eval.py +21 -0
  5. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom_dev.egg-info/PKG-INFO +1 -1
  6. rosotacom_dev-2.5.dev6/src/rosotacom_dev.egg-info/scm_version.json +8 -0
  7. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/unit/test_cli.py +25 -2
  8. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/unit/test_concurrency.py +1 -1
  9. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/unit/test_status_eval.py +27 -0
  10. rosotacom_dev-2.5.dev4/src/rosotacom_dev.egg-info/scm_version.json +0 -8
  11. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/.devcontainer/devcontainer.json.template +0 -0
  12. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/.devcontainer/re_generate_devcontainer_json.py +0 -0
  13. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/.github/CODEOWNERS +0 -0
  14. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/.github/ISSUE_TEMPLATE/documentation-audit.md +0 -0
  15. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/.github/ISSUE_TEMPLATE/implementation-cleanup.md +0 -0
  16. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/.github/ISSUE_TEMPLATE/quality-workflow.md +0 -0
  17. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/.github/ISSUE_TEMPLATE/redesign.md +0 -0
  18. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/.github/ISSUE_TEMPLATE/release-process.md +0 -0
  19. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/.github/ISSUE_TEMPLATE/repository-diagnosis.md +0 -0
  20. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/.github/ISSUE_TEMPLATE/test-ci-audit.md +0 -0
  21. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/.github/ISSUE_TEMPLATE/work-item.md +0 -0
  22. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  23. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/.github/dependabot.yml +0 -0
  24. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/.github/workflows/benchmark-calibrate.yml +0 -0
  25. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/.github/workflows/benchmark-gate.yml +0 -0
  26. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/.github/workflows/dev-release.yml +0 -0
  27. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/.github/workflows/image-scan.yml +0 -0
  28. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/.github/workflows/nightly-e2e.yml +0 -0
  29. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/.github/workflows/pr-lightweight.yml +0 -0
  30. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/.github/workflows/pr-merge-gate.yml +0 -0
  31. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/.github/workflows/release.yml +0 -0
  32. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/.pre-commit-config.yaml +0 -0
  33. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/AGENTS.md +0 -0
  34. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/CONCURRENCY.md +0 -0
  35. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/CONTRIBUTING.md +0 -0
  36. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/DEVELOPMENT_PRINCIPLES.md +0 -0
  37. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/LICENSE.txt +0 -0
  38. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/MANIFEST.in +0 -0
  39. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/README.md +0 -0
  40. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/budgets.jsonl +0 -0
  41. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/calibration/README.md +0 -0
  42. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/calibration/capacity-size-tight-cyclone.json +0 -0
  43. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/calibration/probe-loss-gop-tight-cyclone.json +0 -0
  44. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/calibration/probe-loss-nominal-cyclone.json +0 -0
  45. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/calibration/probe-loss-tight-cyclone.json +0 -0
  46. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/calibration/probe-loss-tight-fastdds.json +0 -0
  47. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/calibration/probe-loss-tight-zenoh.json +0 -0
  48. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/codecov.yml +0 -0
  49. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/deployment-configuration.md +0 -0
  50. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/benchmark-ab.md +0 -0
  51. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/benchmark-bag-as-load.md +0 -0
  52. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/ci.md +0 -0
  53. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/ffmpeg-keyframes.md +0 -0
  54. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/findings/README.md +0 -0
  55. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/findings/cyclone-spdp-discovery-bursts.md +0 -0
  56. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/findings/delay-alone-no-loss.md +0 -0
  57. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/findings/head-of-line-irregularity.md +0 -0
  58. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/findings/jitter-loss-bandwidth-latency.md +0 -0
  59. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/findings/lighter-message-loss.md +0 -0
  60. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/findings/zero-loss-boundaries-18kb-20hz.md +0 -0
  61. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/forensics-report.md +0 -0
  62. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/geo-link-map.md +0 -0
  63. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/github-repository-settings.md +0 -0
  64. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/link-trace.md +0 -0
  65. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/owner-runbook.md +0 -0
  66. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/performance-bands.md +0 -0
  67. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/playbooks/README.md +0 -0
  68. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/quality-model.md +0 -0
  69. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/release-notes/TEMPLATE.md +0 -0
  70. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/release-notes/v2.1.md +0 -0
  71. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/release-notes/v2.2.md +0 -0
  72. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/release-notes/v2.3.md +0 -0
  73. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/release-notes/v2.4.md +0 -0
  74. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/release.md +0 -0
  75. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/rfcs/0001-expectation-driven-test-suite.md +0 -0
  76. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/rfcs/0002-expectation-concepts.md +0 -0
  77. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/rfcs/0003-metric-backbone.md +0 -0
  78. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/rfcs/0004-network-profiles.md +0 -0
  79. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/rfcs/0005-benchmark-genres-and-ci.md +0 -0
  80. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/rfcs/0006-dynamic-qos.md +0 -0
  81. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/rfcs/0007-regression-gate.md +0 -0
  82. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/rfcs/README.md +0 -0
  83. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/docs/work-items.md +0 -0
  84. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/install.sh +0 -0
  85. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/justfile +0 -0
  86. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/media/control_center.png +0 -0
  87. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/media/echo_test.png +0 -0
  88. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/media/forensics-report-example.png +0 -0
  89. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/media/host.png +0 -0
  90. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/media/vehicle.png +0 -0
  91. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/pyproject.toml +0 -0
  92. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/requirements.txt +0 -0
  93. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/rosotacom.yaml +0 -0
  94. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/run_session_in_container.py +0 -0
  95. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/session-configuration.md +0 -0
  96. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/setup.cfg +0 -0
  97. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/__init__.py +0 -0
  98. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/__main__.py +0 -0
  99. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/anonymize.py +0 -0
  100. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/bag_ground_truth.py +0 -0
  101. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/benched_set.py +0 -0
  102. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/benchmark.py +0 -0
  103. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/bundle_check.py +0 -0
  104. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/cli_benchmark.py +0 -0
  105. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/deployment.py +0 -0
  106. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/ffmpeg_packet.py +0 -0
  107. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/forensics.py +0 -0
  108. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/geomap.py +0 -0
  109. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/network_profiles.py +0 -0
  110. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/network_shaper.py +0 -0
  111. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/plots.py +0 -0
  112. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/py.typed +0 -0
  113. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/benched-set.yaml +0 -0
  114. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/.gitignore +0 -0
  115. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/README.md +0 -0
  116. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/__init__.py +0 -0
  117. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/bags/8_drop_reference/metadata.yaml +0 -0
  118. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/deployment.example.yaml +0 -0
  119. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/profiles.yaml +0 -0
  120. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/ros2docker.json +0 -0
  121. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/rosotacom.yaml +0 -0
  122. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scenarios/2_native_chatter/scenario-definition.yaml +0 -0
  123. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/1_heartbeat/run_machine_a.sh +0 -0
  124. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/1_heartbeat/run_machine_b.sh +0 -0
  125. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/external.ros2docker.json +0 -0
  126. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/run_communication.sh +0 -0
  127. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/run_external.py +0 -0
  128. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/wait_for_echo_topic.sh +0 -0
  129. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/external.ros2docker.json +0 -0
  130. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/run_communication.sh +0 -0
  131. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/run_external.py +0 -0
  132. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/external.ros2docker.json +0 -0
  133. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/external_session.yaml +0 -0
  134. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/foxglove.json +0 -0
  135. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/run_communication.sh +0 -0
  136. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/run_external.py +0 -0
  137. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/costmap_1second/costmap_1second_0.mcap +0 -0
  138. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/costmap_1second/metadata.yaml +0 -0
  139. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/external.ros2docker.json +0 -0
  140. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/run_communication.sh +0 -0
  141. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/run_external.py +0 -0
  142. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/external.ros2docker.json +0 -0
  143. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/external_session.yaml +0 -0
  144. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/foxglove.json +0 -0
  145. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/run_communication.sh +0 -0
  146. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/run_external.py +0 -0
  147. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/costmap_1second/costmap_1second_0.mcap +0 -0
  148. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/costmap_1second/metadata.yaml +0 -0
  149. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/external.ros2docker.json +0 -0
  150. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/run_communication.sh +0 -0
  151. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/run_external.py +0 -0
  152. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/external.ros2docker.json +0 -0
  153. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/external_session.yaml +0 -0
  154. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/run_communication.sh +0 -0
  155. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/run_external.py +0 -0
  156. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/external.ros2docker.json +0 -0
  157. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/external_session.yaml +0 -0
  158. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/run_communication.sh +0 -0
  159. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/run_external.py +0 -0
  160. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/external.ros2docker.json +0 -0
  161. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/external_session.yaml +0 -0
  162. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/run_communication.sh +0 -0
  163. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/run_external.py +0 -0
  164. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/external.ros2docker.json +0 -0
  165. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/external_session.yaml +0 -0
  166. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/run_communication.sh +0 -0
  167. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/run_external.py +0 -0
  168. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/sessions/10_restamp/session-definition.yaml +0 -0
  169. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/sessions/11_trickle/session-definition.yaml +0 -0
  170. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/sessions/12_content_integrity/session-definition.yaml +0 -0
  171. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/sessions/13_link_latency/session-definition.yaml +0 -0
  172. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/sessions/14_remote_assist_anonymized/session-definition.yaml +0 -0
  173. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/sessions/15_remote_assist_anonymized_costmap/session-definition.yaml +0 -0
  174. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/sessions/16_remote_assist_anonymized_camera/session-definition.yaml +0 -0
  175. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/sessions/17_synthetic_camera_quality/session-definition.yaml +0 -0
  176. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/sessions/1_heartbeat/session-definition.yaml +0 -0
  177. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/sessions/1_heartbeat_status/session-definition.yaml +0 -0
  178. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/sessions/2_native_chatter/session-definition.yaml +0 -0
  179. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/sessions/3_comp_occ_grid/session-definition.yaml +0 -0
  180. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/sessions/4_comp_occ_grid_zen/session-definition.yaml +0 -0
  181. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/sessions/5_sized_payload/session-definition.yaml +0 -0
  182. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/sessions/6_sized_payload_zen/session-definition.yaml +0 -0
  183. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/sessions/7_latched_static/session-definition.yaml +0 -0
  184. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/sessions/8_drop/session-definition.yaml +0 -0
  185. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/sessions/9_throttle/session-definition.yaml +0 -0
  186. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/sessions/bench_1_1_capacity/session-definition.yaml +0 -0
  187. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/sessions/bench_1_2_load_sweep/session-definition.yaml +0 -0
  188. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/sessions/bench_1_3_ramp/session-definition.yaml +0 -0
  189. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/sessions/bench_1_4_recovery/session-definition.yaml +0 -0
  190. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/examples/sessions/bench_1_5_camera/session-definition.yaml +0 -0
  191. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ros2docker.json.example +0 -0
  192. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/.vscode/c_cpp_properties.json +0 -0
  193. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/.vscode/settings.json +0 -0
  194. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_easy_mode.xml.template +0 -0
  195. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_initial_peer_list.xml.template +0 -0
  196. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v2.xml.template +0 -0
  197. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v3.xml.template +0 -0
  198. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v4.xml.template +0 -0
  199. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v5.xml.template +0 -0
  200. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ota_configs/create_zenoh_json5.py +0 -0
  201. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ota_configs/cyclonedds_minimal.xml.template +0 -0
  202. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ota_configs/cyclonedds_tuned.xml.template +0 -0
  203. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ota_configs/fastdds_unicast.xml.template +0 -0
  204. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ota_configs/get_ota_xml.py +0 -0
  205. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ota_configs/utils.py +0 -0
  206. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ota_configs/zenoh.json5.template +0 -0
  207. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/.gitkeep +0 -0
  208. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_cpp/CMakeLists.txt +0 -0
  209. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_cpp/COLCON_IGNORE +0 -0
  210. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_cpp/LICENSE.txt +0 -0
  211. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_cpp/package.xml +0 -0
  212. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_cpp/src/hz_monitor.cpp +0 -0
  213. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_cpp/src/universal_compressor.cpp +0 -0
  214. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_cpp/src/universal_decompressor.cpp +0 -0
  215. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_msgs/CMakeLists.txt +0 -0
  216. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_msgs/LICENSE.txt +0 -0
  217. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/CompressedData.msg +0 -0
  218. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/EchoHeartbeat.msg +0 -0
  219. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/OtaStamped.msg +0 -0
  220. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/SizedPayload.msg +0 -0
  221. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_msgs/package.xml +0 -0
  222. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/LICENSE.txt +0 -0
  223. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/__init__.py +0 -0
  224. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/base_bridge_relay.py +0 -0
  225. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/bridge_in.py +0 -0
  226. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/bridge_out.py +0 -0
  227. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/heartbeat_echo.py +0 -0
  228. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/hz_monitor.py +0 -0
  229. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/image_bandwidth_reducer.py +0 -0
  230. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/image_pixel_capper.py +0 -0
  231. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/lanelet_saver.py +0 -0
  232. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/latch_relay.py +0 -0
  233. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/costmap_remapper.py +0 -0
  234. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/marker_remapper.py +0 -0
  235. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/speed_test.py +0 -0
  236. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/tf_remapper.py +0 -0
  237. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/traffic_monitor.py +0 -0
  238. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/wifi_network_analysis_1.py +0 -0
  239. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/link_bytes.py +0 -0
  240. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/link_trace.py +0 -0
  241. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/local_global_frame_bridge.py +0 -0
  242. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/localization_map_split_reduce_saver.py +0 -0
  243. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/msg_transform.py +0 -0
  244. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/pair_management.py +0 -0
  245. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/pub_sub_pair.py +0 -0
  246. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/qos.py +0 -0
  247. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/relay_in.py +0 -0
  248. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/relay_out.py +0 -0
  249. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/restamp.py +0 -0
  250. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/sized_publisher.py +0 -0
  251. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/stage_latency.py +0 -0
  252. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/stage_latency_core.py +0 -0
  253. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/status_overview.py +0 -0
  254. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/status_overview_core.py +0 -0
  255. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/tf_map_to_cart_saver.py +0 -0
  256. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/topic_monitor.py +0 -0
  257. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/topic_resolution.py +0 -0
  258. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/trickle.py +0 -0
  259. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_compressor.py +0 -0
  260. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_decompressor.py +0 -0
  261. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_ota_unwrapper.py +0 -0
  262. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_ota_wrapper.py +0 -0
  263. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/package.xml +0 -0
  264. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/resource/com_py +0 -0
  265. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/setup.cfg +0 -0
  266. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/setup.py +0 -0
  267. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/test/test_copyright.py +0 -0
  268. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/test/test_flake8.py +0 -0
  269. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/ros2src/com_py/test/test_pep257.py +0 -0
  270. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/session/content/base/session_plugin_base.yaml +0 -0
  271. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/session/content/network/up_connectivity.py +0 -0
  272. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/session/content/network/wifi_network_analysis_2.py +0 -0
  273. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/session/creation/anonymize_bag.py +0 -0
  274. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/session/creation/catmux_log_setup.sh +0 -0
  275. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/session/creation/create_session_yaml.py +0 -0
  276. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/session/creation/generate_session_files.py +0 -0
  277. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/session/creation/run_session.py +0 -0
  278. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/session/creation/run_session_in_external_terminal.py +0 -0
  279. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/resources/ws/session/creation/strip_ansi.py +0 -0
  280. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/stream_stats.py +0 -0
  281. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/trace_profiles.py +0 -0
  282. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/transit.py +0 -0
  283. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom/video_quality.py +0 -0
  284. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom_dev.egg-info/SOURCES.txt +0 -0
  285. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom_dev.egg-info/dependency_links.txt +0 -0
  286. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom_dev.egg-info/entry_points.txt +0 -0
  287. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom_dev.egg-info/requires.txt +0 -0
  288. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom_dev.egg-info/scm_file_list.json +0 -0
  289. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/src/rosotacom_dev.egg-info/top_level.txt +0 -0
  290. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/stop_session_in_container.py +0 -0
  291. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/terminology.md +0 -0
  292. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/contract/test_benched_set_registry.py +0 -0
  293. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/contract/test_findings.py +0 -0
  294. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/contract/test_markdown_links.py +0 -0
  295. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/contract/test_ota_source_bundle.py +0 -0
  296. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/contract/test_package_metadata.py +0 -0
  297. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/contract/test_packaged_resources.py +0 -0
  298. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/contract/test_profile_covers_generated_commands.py +0 -0
  299. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/contract/test_pytest_policy.py +0 -0
  300. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/contract/test_readme_examples.py +0 -0
  301. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/contract/test_security_maintenance_config.py +0 -0
  302. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/contract/test_workflow_contracts.py +0 -0
  303. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/e2e/conftest.py +0 -0
  304. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/e2e/test_anonymize_e2e.py +0 -0
  305. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/e2e/test_benchmark_ab.py +0 -0
  306. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/e2e/test_benchmark_capacity.py +0 -0
  307. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/e2e/test_benchmark_replay.py +0 -0
  308. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/e2e/test_parallel_smoke.py +0 -0
  309. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/e2e/test_smoke.py +0 -0
  310. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/e2e/test_timeline_stepping.py +0 -0
  311. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/e2e/test_video_quality_e2e.py +0 -0
  312. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/sessions/generate_rmw_matrix.py +0 -0
  313. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-local_zenoh-ros2dds-ota/session-definition.yaml +0 -0
  314. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-ota/session-definition.yaml +0 -0
  315. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-ota-tuned/session-definition.yaml +0 -0
  316. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/sessions/rmw_matrix/1_heartbeat_fastdds/session-definition.yaml +0 -0
  317. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/sessions/rmw_matrix/1_heartbeat_zen-endpoints/session-definition.yaml +0 -0
  318. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/unit/test_anonymize.py +0 -0
  319. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/unit/test_bag_ground_truth.py +0 -0
  320. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/unit/test_benched_set.py +0 -0
  321. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/unit/test_benchmark.py +0 -0
  322. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/unit/test_bundle_check.py +0 -0
  323. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/unit/test_cli_benchmark.py +0 -0
  324. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/unit/test_deployment.py +0 -0
  325. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/unit/test_ffmpeg_packet.py +0 -0
  326. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/unit/test_forensics.py +0 -0
  327. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/unit/test_geomap.py +0 -0
  328. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/unit/test_link_bytes.py +0 -0
  329. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/unit/test_link_trace.py +0 -0
  330. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/unit/test_network_profiles.py +0 -0
  331. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/unit/test_network_shaper.py +0 -0
  332. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/unit/test_ota_xml.py +0 -0
  333. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/unit/test_plots.py +0 -0
  334. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/unit/test_stage_latency.py +0 -0
  335. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/unit/test_status_overview.py +0 -0
  336. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/unit/test_stream_stats.py +0 -0
  337. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/unit/test_trace_profiles.py +0 -0
  338. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/tests/unit/test_transit.py +0 -0
  339. {rosotacom_dev-2.5.dev4 → rosotacom_dev-2.5.dev6}/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.5.dev4
3
+ Version: 2.5.dev6
4
4
  Summary: Host CLI for ROS OTA communication sessions.
5
5
  Author: develNor
6
6
  License-Expression: BSD-3-Clause
@@ -75,6 +75,16 @@ planned decimation is not counted as OTA loss. The default `--min-ratio 0.9`
75
75
  leaves a safety margin for a healthy link; tune it per gate instead of
76
76
  committing a brittle 100% threshold.
77
77
 
78
+ **`vs_bag_ratio` is replay-only, and the run refuses to pretend otherwise.** It
79
+ compares the delivered rate to the source's native rate, which only the bag
80
+ knows, so `rosotacom test` needs `--bag <dir>` to evaluate it. Until #214 a run
81
+ without one skipped those assertions silently and still printed `TEST OK` — a
82
+ session could declare completeness on every topic and have none of it checked.
83
+ `test` now exits non-zero naming the topics instead. If a session genuinely is
84
+ not replay-driven, drop the assertion rather than running without the bag: a
85
+ skipped check reads as coverage, which is the failure mode these contracts
86
+ exist to catch.
87
+
78
88
  Transient-local or explicitly latched topics become `mode: latched`, because the
79
89
  contract is that the held value arrives, not that the topic keeps ticking.
80
90
  Sparse volatile topics become `mode: existence`; the current expect model has no
@@ -4249,13 +4249,40 @@ def _create_scenario_tmux(
4249
4249
  return session_name
4250
4250
 
4251
4251
 
4252
+ def _local_ipc_run_args(network_isolated: bool) -> list[str]:
4253
+ """Share the host IPC namespace, unless the run is network-isolated.
4254
+
4255
+ A peer has to exchange local-domain data with application containers on the
4256
+ same machine — a replay, the control centre. With `--network host` but
4257
+ `ipc=private` each container has its own `/dev/shm`, FastDDS sees two
4258
+ participants on one host, negotiates shared memory, and writes into a
4259
+ segment the other side cannot map. Discovery goes over UDP and works;
4260
+ delivery goes over SHM and is dropped without a word.
4261
+
4262
+ The result is the worst shape a failure can take: the link comes up, the
4263
+ heartbeat crosses at 10 Hz with 0% loss, every pipeline reads `pub=1 sub=1`
4264
+ — and no payload ever enters it. Measured on 2026-08-09: 399 messages in
4265
+ eight seconds inside the publisher's container, 0 in the peer's.
4266
+
4267
+ The OTA path never showed it, because the generated unicast profile pins
4268
+ explicit locators and therefore forces UDP.
4269
+
4270
+ Not under `--network-name`. Sharing SHM there would let DDS bypass the very
4271
+ boundary the isolation exists to simulate, and a test that passes through a
4272
+ hole in its own isolation is worse than no test at all.
4273
+ """
4274
+ return [] if network_isolated else ["--ipc", "host"]
4275
+
4276
+
4252
4277
  def _base_extra_run_args(
4253
4278
  runtime: RuntimeConfig,
4254
4279
  session: ResolvedSession,
4255
4280
  cfg: dict[str, Any],
4256
4281
  instance: SessionInstance,
4282
+ *,
4283
+ network_isolated: bool = False,
4257
4284
  ) -> list[str]:
4258
- args: list[str] = []
4285
+ args: list[str] = _local_ipc_run_args(network_isolated)
4259
4286
  ros2docker_cfg = load_config(runtime.ros2docker_config)
4260
4287
 
4261
4288
  if not ros2docker_cfg.get("mount_ws"):
@@ -4425,7 +4452,7 @@ def start_session(args: argparse.Namespace) -> str:
4425
4452
  " (or pass --force to replace it, --skip-conflict-check to ignore it).",
4426
4453
  )
4427
4454
  image_name = _scoped_image_name(runtime)
4428
- extra_run_args = _base_extra_run_args(runtime, session, cfg, instance)
4455
+ extra_run_args = _base_extra_run_args(runtime, session, cfg, instance, network_isolated=network_isolated)
4429
4456
  run_override: dict[str, object] = {}
4430
4457
  network_name = getattr(args, "network_name", None)
4431
4458
  if network_name:
@@ -6513,6 +6540,26 @@ def test_command(args: argparse.Namespace) -> int:
6513
6540
  from . import bag_ground_truth
6514
6541
 
6515
6542
  ground_truth = bag_ground_truth.bag_ground_truth(bag)
6543
+ elif not getattr(args, "suggest", False):
6544
+ # A `vs_bag_ratio` needs the bag's native rate, and without one it is
6545
+ # skipped rather than failed -- so the run would print TEST OK having
6546
+ # checked nothing about completeness. Refuse instead: the declaration
6547
+ # is the statement of intent, and honouring it or failing loudly is
6548
+ # this command's job.
6549
+ needs_bag = status_eval.topics_requiring_bag(expect_by_topic, profile)
6550
+ if needs_bag:
6551
+ listed = "\n".join(f" {base}" for base in needs_bag)
6552
+ print(
6553
+ f"rosotacom test: {len(needs_bag)} topic(s) declare "
6554
+ f"`completeness.vs_bag_ratio`, which compares the delivered rate "
6555
+ f"to the source's native rate and can only be evaluated against "
6556
+ f"the replay bag:\n{listed}\n"
6557
+ f"Pass `--bag <dir>`, or drop the assertion from a session that "
6558
+ f"is not replay-driven. Without a bag it would be skipped in "
6559
+ f"silence and this run would report success.",
6560
+ file=sys.stderr,
6561
+ )
6562
+ return 1
6516
6563
  reports: dict[str, Any] = {}
6517
6564
  failures: list[str] = []
6518
6565
 
@@ -105,6 +105,27 @@ def resolve_expect_for_profile(expect: dict[str, Any], profile: str | None) -> d
105
105
  return resolved
106
106
 
107
107
 
108
+ def topics_requiring_bag(expect_by_topic: dict[str, dict[str, Any]], profile: str | None = None) -> list[str]:
109
+ """Topics whose expectations can only be evaluated against a replay bag.
110
+
111
+ `completeness.vs_bag_ratio` compares the delivered rate to the *source's*
112
+ native rate, which only a bag knows. `_check_bag_completeness` returns
113
+ early when no ground truth was supplied, so without `--bag` such an
114
+ expectation is skipped in silence and the run still prints `TEST OK`.
115
+
116
+ A skipped assertion reads as coverage, which is worse than no assertion at
117
+ all: it is the exact shape of the defect these contracts exist to catch.
118
+ The caller uses this to refuse the run instead.
119
+ """
120
+ required = []
121
+ for base, raw in sorted((expect_by_topic or {}).items()):
122
+ expect = resolve_expect_for_profile(raw or {}, profile)
123
+ completeness = expect.get("completeness") or {}
124
+ if isinstance(completeness, dict) and completeness.get("vs_bag_ratio") is not None:
125
+ required.append(base)
126
+ return required
127
+
128
+
108
129
  def expectations_from_cfg(cfg: dict[str, Any]) -> dict[str, dict[str, Any]]:
109
130
  """Map a topic's base name -> its `expect` block, from a session config."""
110
131
  out: dict[str, dict[str, Any]] = {}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rosotacom-dev
3
- Version: 2.5.dev4
3
+ Version: 2.5.dev6
4
4
  Summary: Host CLI for ROS OTA communication sessions.
5
5
  Author: develNor
6
6
  License-Expression: BSD-3-Clause
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "2.4",
3
+ "distance": 6,
4
+ "node": "gc42c5f2cadb6cfbb762982c29d43960fda54fcec",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-08-10"
8
+ }
@@ -1888,6 +1888,29 @@ def test_resolve_session_and_base_extra_run_args(tmp_path: Path, monkeypatch: py
1888
1888
  assert f"{runtime.session_configs_dir[0]}:/session/definitions:ro" in args
1889
1889
  assert f"{runtime.session_instances_dir}:/session/instances" in args
1890
1890
  assert "Configured sessions:" in rosotacom._format_available_sessions(runtime)
1891
+ # A peer shares the host IPC namespace, so it can exchange local-domain
1892
+ # data with application containers on the same machine. See
1893
+ # `_local_ipc_run_args` for what happens without it.
1894
+ assert args[:2] == ["--ipc", "host"]
1895
+
1896
+
1897
+ def test_a_peer_shares_the_host_ipc_namespace_unless_isolated() -> None:
1898
+ """Without it, a peer receives nothing from a local application container.
1899
+
1900
+ `--network host` with `ipc=private` gives every container its own
1901
+ /dev/shm. FastDDS sees two participants on one host, chooses shared memory,
1902
+ and the reader never maps the writer's segment. Discovery succeeds, delivery
1903
+ does not, and nothing in the output says so: the link comes up, the
1904
+ heartbeat crosses at 10 Hz with 0% loss, and no payload ever enters it.
1905
+
1906
+ Isolated on 2026-08-09 with two containers from one image on one host:
1907
+ `ipc=private` received 0 messages, `--ipc host` received 200.
1908
+ """
1909
+ assert rosotacom._local_ipc_run_args(network_isolated=False) == ["--ipc", "host"]
1910
+ # Under network isolation it must not be shared: SHM would carry data
1911
+ # straight past the boundary the isolation exists to simulate, and a test
1912
+ # that passes through a hole in its own isolation is worse than none.
1913
+ assert rosotacom._local_ipc_run_args(network_isolated=True) == []
1891
1914
 
1892
1915
 
1893
1916
  def test_container_helpers_use_docker_and_ros2docker_stop(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None:
@@ -1928,7 +1951,7 @@ def test_start_session_detached_dispatches_ros2docker(monkeypatch: pytest.Monkey
1928
1951
  monkeypatch.setattr(
1929
1952
  rosotacom,
1930
1953
  "_base_extra_run_args",
1931
- lambda runtime, session, cfg, instance: ["--network", "host"],
1954
+ lambda runtime, session, cfg, instance, **kwargs: ["--network", "host"],
1932
1955
  )
1933
1956
  monkeypatch.setattr(rosotacom, "_resolve_mode", lambda mode: "detached")
1934
1957
  monkeypatch.setattr(rosotacom, "_list_docker_containers", lambda all_states=False: [])
@@ -1972,7 +1995,7 @@ def test_start_session_attach_dispatches_command_run(monkeypatch: pytest.MonkeyP
1972
1995
  monkeypatch.setattr(rosotacom, "_effective_session_config", lambda *args, **kwargs: cfg)
1973
1996
  monkeypatch.setattr(rosotacom, "_auto_identity", lambda *args: "a")
1974
1997
  monkeypatch.setattr(rosotacom, "_scoped_image_name", lambda runtime: "image:id")
1975
- monkeypatch.setattr(rosotacom, "_base_extra_run_args", lambda runtime, session, cfg, instance: [])
1998
+ monkeypatch.setattr(rosotacom, "_base_extra_run_args", lambda runtime, session, cfg, instance, **kwargs: [])
1976
1999
  monkeypatch.setattr(rosotacom, "_resolve_mode", lambda mode: "attach")
1977
2000
  monkeypatch.setattr(rosotacom, "_list_docker_containers", lambda all_states=False: [])
1978
2001
  monkeypatch.setattr(rosotacom, "_stop_container_name", lambda *args, **kwargs: True)
@@ -143,7 +143,7 @@ def _patch_start_session_collaborators(
143
143
  monkeypatch.setattr(rosotacom, "_resolve_session", lambda session_dir, runtime: session)
144
144
  monkeypatch.setattr(rosotacom, "_effective_session_config", lambda *args, **kwargs: cfg)
145
145
  monkeypatch.setattr(rosotacom, "_scoped_image_name", lambda runtime: "image:id")
146
- monkeypatch.setattr(rosotacom, "_base_extra_run_args", lambda runtime, session, cfg, instance: [])
146
+ monkeypatch.setattr(rosotacom, "_base_extra_run_args", lambda runtime, session, cfg, instance, **kwargs: [])
147
147
  monkeypatch.setattr(rosotacom, "_resolve_mode", lambda mode: "detached")
148
148
  monkeypatch.setattr(rosotacom, "_container_exists", lambda name: False)
149
149
  monkeypatch.setattr(rosotacom, "_wait_for_container_ready", lambda name: None)
@@ -7,6 +7,7 @@ from rosotacom.status_eval import (
7
7
  evaluate_reports,
8
8
  expectations_from_cfg,
9
9
  resolve_expect_for_profile,
10
+ topics_requiring_bag,
10
11
  )
11
12
 
12
13
 
@@ -350,6 +351,9 @@ def test_bag_completeness_above_ratio_passes() -> None:
350
351
 
351
352
 
352
353
  def test_bag_completeness_skipped_without_ground_truth() -> None:
354
+ # `evaluate_report` itself still skips -- it has no bag to compare against.
355
+ # That silence is exactly why the CLI must refuse the run one level up; see
356
+ # the `topics_requiring_bag` tests below (#214).
353
357
  topic = {"base": "/tf", "direction": "inbound", "overall": "OK", "stages": [_counted2("app_in", 1.0, 100)]}
354
358
  assert (
355
359
  evaluate_report({"peer": "a", "topics": [topic]}, {"/tf": {"completeness": {"vs_bag_ratio": 0.9}}}, None, None)
@@ -357,6 +361,29 @@ def test_bag_completeness_skipped_without_ground_truth() -> None:
357
361
  )
358
362
 
359
363
 
364
+ def test_topics_requiring_bag_lists_only_replay_only_expectations() -> None:
365
+ expect = {
366
+ "/tf": {"completeness": {"vs_bag_ratio": 0.1}},
367
+ "/costmap": {"completeness": {"vs_bag_ratio": 0.85}},
368
+ "/plain": {"hz": {"min": 5}},
369
+ "/within_peer_only": {"completeness": {"min_ratio": 0.7}},
370
+ }
371
+ assert topics_requiring_bag(expect) == ["/costmap", "/tf"]
372
+
373
+
374
+ def test_topics_requiring_bag_is_empty_without_any_declaration() -> None:
375
+ assert topics_requiring_bag({"/plain": {"hz": {"min": 5}}}) == []
376
+ assert topics_requiring_bag({}) == []
377
+
378
+
379
+ def test_topics_requiring_bag_sees_a_per_profile_declaration() -> None:
380
+ # RFC 0004: the conditional block can come from a profile override, so a
381
+ # profiled run must be inspected through the same resolution the evaluator
382
+ # uses -- otherwise the requirement is invisible under `--profile`.
383
+ expect = {"/tf": {"per_profile": {"lossy": {"completeness": {"vs_bag_ratio": 0.5}}}}}
384
+ assert topics_requiring_bag(expect, profile="lossy") == ["/tf"]
385
+
386
+
360
387
  def test_suggest_stream_topic_emits_hz_band() -> None:
361
388
  rep = {"peer": "a", "topics": [_topic("/tf", "inbound", "OK", [_stage("app_in", 10.0, 30.0)])]}
362
389
  s = suggest_expectations({"a": rep})
@@ -1,8 +0,0 @@
1
- {
2
- "tag": "2.4",
3
- "distance": 4,
4
- "node": "g95f1ef2e6930a7e1133540144f721597778fcde9",
5
- "dirty": false,
6
- "branch": "HEAD",
7
- "node_date": "2026-08-09"
8
- }