rosotacom-dev 2.5.dev26__tar.gz → 2.5.dev29__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 (344) hide show
  1. rosotacom_dev-2.5.dev29/.github/actions/setup-just/action.yml +34 -0
  2. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/.github/workflows/benchmark-calibrate.yml +11 -10
  3. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/.github/workflows/benchmark-gate.yml +11 -10
  4. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/.github/workflows/dev-release.yml +1 -3
  5. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/.github/workflows/image-scan.yml +1 -3
  6. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/.github/workflows/nightly-e2e.yml +41 -13
  7. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/.github/workflows/pr-lightweight.yml +1 -3
  8. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/.github/workflows/pr-merge-gate.yml +88 -62
  9. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/.github/workflows/release.yml +30 -12
  10. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/PKG-INFO +1 -1
  11. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/ci.md +72 -30
  12. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/testing.md +14 -9
  13. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/justfile +1 -1
  14. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/cli.py +17 -2
  15. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/image_cache.py +5 -5
  16. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom_dev.egg-info/PKG-INFO +1 -1
  17. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom_dev.egg-info/SOURCES.txt +1 -0
  18. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom_dev.egg-info/scm_file_list.json +1 -0
  19. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom_dev.egg-info/scm_version.json +2 -2
  20. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/contract/test_benched_set_registry.py +3 -2
  21. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/contract/test_security_maintenance_config.py +13 -9
  22. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/contract/test_workflow_contracts.py +68 -15
  23. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/e2e/conftest.py +46 -28
  24. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/unit/test_cli.py +42 -0
  25. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/.devcontainer/devcontainer.json.template +0 -0
  26. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/.devcontainer/re_generate_devcontainer_json.py +0 -0
  27. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/.github/CODEOWNERS +0 -0
  28. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/.github/ISSUE_TEMPLATE/documentation-audit.md +0 -0
  29. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/.github/ISSUE_TEMPLATE/implementation-cleanup.md +0 -0
  30. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/.github/ISSUE_TEMPLATE/quality-workflow.md +0 -0
  31. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/.github/ISSUE_TEMPLATE/redesign.md +0 -0
  32. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/.github/ISSUE_TEMPLATE/release-process.md +0 -0
  33. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/.github/ISSUE_TEMPLATE/repository-diagnosis.md +0 -0
  34. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/.github/ISSUE_TEMPLATE/test-ci-audit.md +0 -0
  35. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/.github/ISSUE_TEMPLATE/work-item.md +0 -0
  36. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  37. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/.github/dependabot.yml +0 -0
  38. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/.pre-commit-config.yaml +0 -0
  39. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/AGENTS.md +0 -0
  40. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/CONCURRENCY.md +0 -0
  41. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/CONTRIBUTING.md +0 -0
  42. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/DEVELOPMENT_PRINCIPLES.md +0 -0
  43. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/LICENSE.txt +0 -0
  44. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/MANIFEST.in +0 -0
  45. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/README.md +0 -0
  46. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/budgets.jsonl +0 -0
  47. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/calibration/README.md +0 -0
  48. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/calibration/capacity-size-tight-cyclone.json +0 -0
  49. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/calibration/probe-loss-gop-tight-cyclone.json +0 -0
  50. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/calibration/probe-loss-nominal-cyclone.json +0 -0
  51. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/calibration/probe-loss-tight-cyclone.json +0 -0
  52. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/calibration/probe-loss-tight-fastdds.json +0 -0
  53. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/calibration/probe-loss-tight-zenoh.json +0 -0
  54. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/codecov.yml +0 -0
  55. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/deployment-configuration.md +0 -0
  56. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/benchmark-ab.md +0 -0
  57. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/benchmark-bag-as-load.md +0 -0
  58. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/ffmpeg-keyframes.md +0 -0
  59. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/findings/README.md +0 -0
  60. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/findings/cyclone-spdp-discovery-bursts.md +0 -0
  61. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/findings/delay-alone-no-loss.md +0 -0
  62. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/findings/head-of-line-irregularity.md +0 -0
  63. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/findings/jitter-loss-bandwidth-latency.md +0 -0
  64. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/findings/lighter-message-loss.md +0 -0
  65. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/findings/zero-loss-boundaries-18kb-20hz.md +0 -0
  66. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/forensics-report.md +0 -0
  67. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/geo-link-map.md +0 -0
  68. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/github-repository-settings.md +0 -0
  69. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/link-trace.md +0 -0
  70. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/owner-runbook.md +0 -0
  71. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/performance-bands.md +0 -0
  72. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/playbooks/README.md +0 -0
  73. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/quality-model.md +0 -0
  74. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/release-notes/TEMPLATE.md +0 -0
  75. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/release-notes/v2.1.md +0 -0
  76. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/release-notes/v2.2.md +0 -0
  77. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/release-notes/v2.3.md +0 -0
  78. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/release-notes/v2.4.md +0 -0
  79. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/release.md +0 -0
  80. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/rfcs/0001-expectation-driven-test-suite.md +0 -0
  81. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/rfcs/0002-expectation-concepts.md +0 -0
  82. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/rfcs/0003-metric-backbone.md +0 -0
  83. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/rfcs/0004-network-profiles.md +0 -0
  84. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/rfcs/0005-benchmark-genres-and-ci.md +0 -0
  85. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/rfcs/0006-dynamic-qos.md +0 -0
  86. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/rfcs/0007-regression-gate.md +0 -0
  87. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/rfcs/README.md +0 -0
  88. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/docs/work-items.md +0 -0
  89. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/install.sh +0 -0
  90. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/media/control_center.png +0 -0
  91. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/media/echo_test.png +0 -0
  92. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/media/forensics-report-example.png +0 -0
  93. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/media/host.png +0 -0
  94. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/media/vehicle.png +0 -0
  95. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/pyproject.toml +0 -0
  96. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/requirements.txt +0 -0
  97. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/rosotacom.yaml +0 -0
  98. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/run_session_in_container.py +0 -0
  99. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/session-configuration.md +0 -0
  100. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/setup.cfg +0 -0
  101. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/__init__.py +0 -0
  102. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/__main__.py +0 -0
  103. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/anonymize.py +0 -0
  104. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/bag_ground_truth.py +0 -0
  105. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/benched_set.py +0 -0
  106. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/benchmark.py +0 -0
  107. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/benchmark_delta.py +0 -0
  108. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/bundle_check.py +0 -0
  109. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/cli_benchmark.py +0 -0
  110. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/deployment.py +0 -0
  111. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/ffmpeg_packet.py +0 -0
  112. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/forensics.py +0 -0
  113. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/geomap.py +0 -0
  114. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/network_profiles.py +0 -0
  115. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/network_shaper.py +0 -0
  116. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/plots.py +0 -0
  117. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/py.typed +0 -0
  118. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/benched-set.yaml +0 -0
  119. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/.gitignore +0 -0
  120. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/README.md +0 -0
  121. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/__init__.py +0 -0
  122. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/bags/8_drop_reference/metadata.yaml +0 -0
  123. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/deployment.example.yaml +0 -0
  124. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/profiles.yaml +0 -0
  125. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/ros2docker.json +0 -0
  126. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/rosotacom.yaml +0 -0
  127. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scenarios/2_native_chatter/scenario-definition.yaml +0 -0
  128. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/1_heartbeat/run_machine_a.sh +0 -0
  129. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/1_heartbeat/run_machine_b.sh +0 -0
  130. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/external.ros2docker.json +0 -0
  131. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/run_communication.sh +0 -0
  132. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/run_external.py +0 -0
  133. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/wait_for_echo_topic.sh +0 -0
  134. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/external.ros2docker.json +0 -0
  135. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/run_communication.sh +0 -0
  136. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/run_external.py +0 -0
  137. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/external.ros2docker.json +0 -0
  138. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/external_session.yaml +0 -0
  139. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/foxglove.json +0 -0
  140. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/run_communication.sh +0 -0
  141. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/run_external.py +0 -0
  142. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/costmap_1second/costmap_1second_0.mcap +0 -0
  143. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/costmap_1second/metadata.yaml +0 -0
  144. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/external.ros2docker.json +0 -0
  145. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/run_communication.sh +0 -0
  146. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/run_external.py +0 -0
  147. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/external.ros2docker.json +0 -0
  148. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/external_session.yaml +0 -0
  149. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/foxglove.json +0 -0
  150. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/run_communication.sh +0 -0
  151. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/run_external.py +0 -0
  152. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/costmap_1second/costmap_1second_0.mcap +0 -0
  153. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/costmap_1second/metadata.yaml +0 -0
  154. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/external.ros2docker.json +0 -0
  155. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/run_communication.sh +0 -0
  156. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/run_external.py +0 -0
  157. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/external.ros2docker.json +0 -0
  158. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/external_session.yaml +0 -0
  159. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/run_communication.sh +0 -0
  160. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/run_external.py +0 -0
  161. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/external.ros2docker.json +0 -0
  162. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/external_session.yaml +0 -0
  163. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/run_communication.sh +0 -0
  164. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/run_external.py +0 -0
  165. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/external.ros2docker.json +0 -0
  166. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/external_session.yaml +0 -0
  167. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/run_communication.sh +0 -0
  168. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/run_external.py +0 -0
  169. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/external.ros2docker.json +0 -0
  170. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/external_session.yaml +0 -0
  171. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/run_communication.sh +0 -0
  172. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/run_external.py +0 -0
  173. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/sessions/10_restamp/session-definition.yaml +0 -0
  174. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/sessions/11_trickle/session-definition.yaml +0 -0
  175. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/sessions/12_content_integrity/session-definition.yaml +0 -0
  176. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/sessions/13_link_latency/session-definition.yaml +0 -0
  177. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/sessions/14_remote_assist_anonymized/session-definition.yaml +0 -0
  178. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/sessions/15_remote_assist_anonymized_costmap/session-definition.yaml +0 -0
  179. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/sessions/16_remote_assist_anonymized_camera/session-definition.yaml +0 -0
  180. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/sessions/17_synthetic_camera_quality/session-definition.yaml +0 -0
  181. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/sessions/1_heartbeat/session-definition.yaml +0 -0
  182. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/sessions/1_heartbeat_status/session-definition.yaml +0 -0
  183. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/sessions/2_native_chatter/session-definition.yaml +0 -0
  184. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/sessions/3_comp_occ_grid/session-definition.yaml +0 -0
  185. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/sessions/4_comp_occ_grid_zen/session-definition.yaml +0 -0
  186. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/sessions/5_sized_payload/session-definition.yaml +0 -0
  187. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/sessions/6_sized_payload_zen/session-definition.yaml +0 -0
  188. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/sessions/7_latched_static/session-definition.yaml +0 -0
  189. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/sessions/8_drop/session-definition.yaml +0 -0
  190. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/sessions/9_throttle/session-definition.yaml +0 -0
  191. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/sessions/bench_1_1_capacity/session-definition.yaml +0 -0
  192. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/sessions/bench_1_2_load_sweep/session-definition.yaml +0 -0
  193. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/sessions/bench_1_3_ramp/session-definition.yaml +0 -0
  194. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/sessions/bench_1_4_recovery/session-definition.yaml +0 -0
  195. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/examples/sessions/bench_1_5_camera/session-definition.yaml +0 -0
  196. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ros2docker.json.example +0 -0
  197. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/.vscode/c_cpp_properties.json +0 -0
  198. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/.vscode/settings.json +0 -0
  199. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_easy_mode.xml.template +0 -0
  200. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_initial_peer_list.xml.template +0 -0
  201. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v2.xml.template +0 -0
  202. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v3.xml.template +0 -0
  203. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v4.xml.template +0 -0
  204. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v5.xml.template +0 -0
  205. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ota_configs/create_zenoh_json5.py +0 -0
  206. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ota_configs/cyclonedds_minimal.xml.template +0 -0
  207. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ota_configs/cyclonedds_tuned.xml.template +0 -0
  208. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ota_configs/fastdds_unicast.xml.template +0 -0
  209. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ota_configs/get_ota_xml.py +0 -0
  210. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ota_configs/utils.py +0 -0
  211. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ota_configs/zenoh.json5.template +0 -0
  212. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/.gitkeep +0 -0
  213. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_cpp/CMakeLists.txt +0 -0
  214. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_cpp/COLCON_IGNORE +0 -0
  215. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_cpp/LICENSE.txt +0 -0
  216. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_cpp/package.xml +0 -0
  217. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_cpp/src/hz_monitor.cpp +0 -0
  218. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_cpp/src/universal_compressor.cpp +0 -0
  219. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_cpp/src/universal_decompressor.cpp +0 -0
  220. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_msgs/CMakeLists.txt +0 -0
  221. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_msgs/LICENSE.txt +0 -0
  222. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/CompressedData.msg +0 -0
  223. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/EchoHeartbeat.msg +0 -0
  224. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/OtaStamped.msg +0 -0
  225. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/SizedPayload.msg +0 -0
  226. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_msgs/package.xml +0 -0
  227. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/LICENSE.txt +0 -0
  228. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/__init__.py +0 -0
  229. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/base_bridge_relay.py +0 -0
  230. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/bridge_in.py +0 -0
  231. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/bridge_out.py +0 -0
  232. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/heartbeat_echo.py +0 -0
  233. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/hz_monitor.py +0 -0
  234. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/image_bandwidth_reducer.py +0 -0
  235. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/image_pixel_capper.py +0 -0
  236. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/lanelet_saver.py +0 -0
  237. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/latch_relay.py +0 -0
  238. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/costmap_remapper.py +0 -0
  239. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/marker_remapper.py +0 -0
  240. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/speed_test.py +0 -0
  241. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/tf_remapper.py +0 -0
  242. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/traffic_monitor.py +0 -0
  243. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/wifi_network_analysis_1.py +0 -0
  244. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/link_bytes.py +0 -0
  245. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/link_trace.py +0 -0
  246. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/local_global_frame_bridge.py +0 -0
  247. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/localization_map_split_reduce_saver.py +0 -0
  248. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/msg_transform.py +0 -0
  249. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/pair_management.py +0 -0
  250. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/pub_sub_pair.py +0 -0
  251. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/qos.py +0 -0
  252. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/relay_in.py +0 -0
  253. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/relay_out.py +0 -0
  254. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/restamp.py +0 -0
  255. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/sized_publisher.py +0 -0
  256. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/stage_latency.py +0 -0
  257. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/stage_latency_core.py +0 -0
  258. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/status_overview.py +0 -0
  259. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/status_overview_core.py +0 -0
  260. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/tf_map_to_cart_saver.py +0 -0
  261. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/topic_monitor.py +0 -0
  262. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/topic_resolution.py +0 -0
  263. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/trickle.py +0 -0
  264. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_compressor.py +0 -0
  265. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_decompressor.py +0 -0
  266. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_ota_unwrapper.py +0 -0
  267. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_ota_wrapper.py +0 -0
  268. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/package.xml +0 -0
  269. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/resource/com_py +0 -0
  270. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/setup.cfg +0 -0
  271. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/setup.py +0 -0
  272. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/test/test_copyright.py +0 -0
  273. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/test/test_flake8.py +0 -0
  274. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/ros2src/com_py/test/test_pep257.py +0 -0
  275. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/session/content/base/session_plugin_base.yaml +0 -0
  276. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/session/content/network/up_connectivity.py +0 -0
  277. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/session/content/network/wifi_network_analysis_2.py +0 -0
  278. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/session/creation/anonymize_bag.py +0 -0
  279. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/session/creation/catmux_log_setup.sh +0 -0
  280. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/session/creation/create_session_yaml.py +0 -0
  281. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/session/creation/generate_session_files.py +0 -0
  282. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/session/creation/run_session.py +0 -0
  283. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/session/creation/run_session_in_external_terminal.py +0 -0
  284. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/resources/ws/session/creation/strip_ansi.py +0 -0
  285. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/status_eval.py +0 -0
  286. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/stream_stats.py +0 -0
  287. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/trace_profiles.py +0 -0
  288. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/transit.py +0 -0
  289. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom/video_quality.py +0 -0
  290. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom_dev.egg-info/dependency_links.txt +0 -0
  291. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom_dev.egg-info/entry_points.txt +0 -0
  292. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom_dev.egg-info/requires.txt +0 -0
  293. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/src/rosotacom_dev.egg-info/top_level.txt +0 -0
  294. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/stop_session_in_container.py +0 -0
  295. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/terminology.md +0 -0
  296. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/contract/test_findings.py +0 -0
  297. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/contract/test_markdown_links.py +0 -0
  298. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/contract/test_ota_source_bundle.py +0 -0
  299. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/contract/test_package_metadata.py +0 -0
  300. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/contract/test_packaged_resources.py +0 -0
  301. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/contract/test_profile_covers_generated_commands.py +0 -0
  302. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/contract/test_pytest_policy.py +0 -0
  303. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/contract/test_readme_examples.py +0 -0
  304. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/contract/test_session_configuration_doc.py +0 -0
  305. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/e2e/test_anonymize_e2e.py +0 -0
  306. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/e2e/test_benchmark_ab.py +0 -0
  307. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/e2e/test_benchmark_capacity.py +0 -0
  308. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/e2e/test_benchmark_replay.py +0 -0
  309. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/e2e/test_parallel_smoke.py +0 -0
  310. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/e2e/test_smoke.py +0 -0
  311. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/e2e/test_timeline_stepping.py +0 -0
  312. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/e2e/test_video_quality_e2e.py +0 -0
  313. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/sessions/generate_rmw_matrix.py +0 -0
  314. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-local_zenoh-ros2dds-ota/session-definition.yaml +0 -0
  315. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-ota/session-definition.yaml +0 -0
  316. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-ota-tuned/session-definition.yaml +0 -0
  317. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/sessions/rmw_matrix/1_heartbeat_fastdds/session-definition.yaml +0 -0
  318. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/sessions/rmw_matrix/1_heartbeat_zen-endpoints/session-definition.yaml +0 -0
  319. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/unit/test_anonymize.py +0 -0
  320. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/unit/test_bag_ground_truth.py +0 -0
  321. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/unit/test_benched_set.py +0 -0
  322. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/unit/test_benchmark.py +0 -0
  323. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/unit/test_benchmark_delta.py +0 -0
  324. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/unit/test_bundle_check.py +0 -0
  325. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/unit/test_cli_benchmark.py +0 -0
  326. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/unit/test_concurrency.py +0 -0
  327. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/unit/test_deployment.py +0 -0
  328. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/unit/test_ffmpeg_packet.py +0 -0
  329. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/unit/test_forensics.py +0 -0
  330. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/unit/test_geomap.py +0 -0
  331. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/unit/test_image_cache.py +0 -0
  332. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/unit/test_link_bytes.py +0 -0
  333. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/unit/test_link_trace.py +0 -0
  334. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/unit/test_network_profiles.py +0 -0
  335. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/unit/test_network_shaper.py +0 -0
  336. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/unit/test_ota_xml.py +0 -0
  337. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/unit/test_plots.py +0 -0
  338. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/unit/test_stage_latency.py +0 -0
  339. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/unit/test_status_eval.py +0 -0
  340. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/unit/test_status_overview.py +0 -0
  341. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/unit/test_stream_stats.py +0 -0
  342. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/unit/test_trace_profiles.py +0 -0
  343. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/unit/test_transit.py +0 -0
  344. {rosotacom_dev-2.5.dev26 → rosotacom_dev-2.5.dev29}/tests/unit/test_video_quality.py +0 -0
@@ -0,0 +1,34 @@
1
+ name: Set up just
2
+ description: >
3
+ Install a pinned just release, verified by checksum.
4
+
5
+ Nineteen jobs used to reach it with `apt-get update && apt-get install -y
6
+ just`, and almost all of that step's 9-15s was the index refresh — in every
7
+ job, including all thirteen e2e slices, where it sat on the merge gate's
8
+ critical path. A release tarball is ~2s.
9
+
10
+ It also stops the CI toolchain drifting: apt gave whatever noble currently
11
+ ships (1.21.0 at the time of writing), which changes without anything here
12
+ saying so.
13
+
14
+ runs:
15
+ using: composite
16
+ steps:
17
+ - name: Install just
18
+ shell: bash
19
+ run: |
20
+ set -euo pipefail
21
+ JUST_VERSION="1.58.0"
22
+ CHECKSUM="4a5cc2f53e6f0f8c59092a6cc38291eb729d46a7dd95d3ae582008881b84931d"
23
+ URL="https://github.com/casey/just/releases/download/${JUST_VERSION}/just-${JUST_VERSION}-x86_64-unknown-linux-musl.tar.gz"
24
+ # Unpacked outside the checkout: a stray tarball in the working tree is
25
+ # a thing every later step has to not trip over.
26
+ workdir="$(mktemp -d)"
27
+ # --fail, or a transient HTTP error body is saved as the tarball and
28
+ # reported as a checksum mismatch, which reads like a tampered release.
29
+ curl -sSLf --retry 3 --retry-all-errors -o "$workdir/just.tar.gz" "$URL"
30
+ echo "${CHECKSUM} $workdir/just.tar.gz" | sha256sum --check
31
+ tar -xzf "$workdir/just.tar.gz" -C "$workdir" just
32
+ sudo mv "$workdir/just" /usr/local/bin/just
33
+ rm -rf "$workdir"
34
+ just --version
@@ -44,9 +44,7 @@ jobs:
44
44
  cache: pip
45
45
 
46
46
  - name: Install just
47
- run: |
48
- sudo apt-get update
49
- sudo apt-get install -y just
47
+ uses: ./.github/actions/setup-just
50
48
 
51
49
  - name: Set up local environment
52
50
  run: just setup
@@ -87,10 +85,15 @@ jobs:
87
85
  python-version: "3.12"
88
86
  cache: pip
89
87
 
90
- - name: Install just and tmux
91
- run: |
92
- sudo apt-get update
93
- sudo apt-get install -y just tmux
88
+ - name: Install just
89
+ uses: ./.github/actions/setup-just
90
+
91
+ - name: Ensure tmux
92
+ # Preinstalled on the GitHub-hosted image, so this is a probe
93
+ # rather than an install — but the dependency is named, so a
94
+ # runner image that drops it fails here instead of inside a
95
+ # session.
96
+ run: command -v tmux >/dev/null || { sudo apt-get update && sudo apt-get install -y tmux; }
94
97
 
95
98
  - name: Set up local environment
96
99
  run: just setup
@@ -132,9 +135,7 @@ jobs:
132
135
  cache: pip
133
136
 
134
137
  - name: Install just
135
- run: |
136
- sudo apt-get update
137
- sudo apt-get install -y just
138
+ uses: ./.github/actions/setup-just
138
139
 
139
140
  - name: Set up local environment
140
141
  run: just setup
@@ -50,9 +50,7 @@ jobs:
50
50
  cache: pip
51
51
 
52
52
  - name: Install just
53
- run: |
54
- sudo apt-get update
55
- sudo apt-get install -y just
53
+ uses: ./.github/actions/setup-just
56
54
 
57
55
  - name: Set up local environment
58
56
  run: just setup
@@ -87,10 +85,15 @@ jobs:
87
85
  python-version: "3.12"
88
86
  cache: pip
89
87
 
90
- - name: Install just and tmux
91
- run: |
92
- sudo apt-get update
93
- sudo apt-get install -y just tmux
88
+ - name: Install just
89
+ uses: ./.github/actions/setup-just
90
+
91
+ - name: Ensure tmux
92
+ # Preinstalled on the GitHub-hosted image, so this is a probe
93
+ # rather than an install — but the dependency is named, so a
94
+ # runner image that drops it fails here instead of inside a
95
+ # session.
96
+ run: command -v tmux >/dev/null || { sudo apt-get update && sudo apt-get install -y tmux; }
94
97
 
95
98
  - name: Set up local environment
96
99
  run: just setup
@@ -142,9 +145,7 @@ jobs:
142
145
  cache: pip
143
146
 
144
147
  - name: Install just
145
- run: |
146
- sudo apt-get update
147
- sudo apt-get install -y just
148
+ uses: ./.github/actions/setup-just
148
149
 
149
150
  - name: Set up local environment
150
151
  run: just setup
@@ -71,9 +71,7 @@ jobs:
71
71
  cache: pip
72
72
 
73
73
  - name: Install just
74
- run: |
75
- sudo apt-get update
76
- sudo apt-get install -y just
74
+ uses: ./.github/actions/setup-just
77
75
 
78
76
  - name: Set up local environment
79
77
  run: just setup
@@ -33,9 +33,7 @@ jobs:
33
33
  cache: pip
34
34
 
35
35
  - name: Install just
36
- run: |
37
- sudo apt-get update
38
- sudo apt-get install -y just
36
+ uses: ./.github/actions/setup-just
39
37
 
40
38
  - name: Set up local environment
41
39
  run: just setup
@@ -19,25 +19,43 @@ concurrency:
19
19
 
20
20
  jobs:
21
21
  smoke-e2e:
22
- # The same six slices the merge gate and the release run, instead of one
22
+ # The same diagnostic slices the merge gate and the release run, instead of one
23
23
  # sequential `just test-e2e-smoke` over the whole suite (#198). Keeping the
24
24
  # monolith here was deliberate while the slices were hand-maintained `-k`
25
25
  # expressions that had silently stopped covering three files; #197's
26
26
  # test_e2e_slices_partition_the_whole_suite closed that, so the union is
27
27
  # now guaranteed to be the monolith.
28
28
  #
29
- # The gain is diagnosis: a red monolith says "e2e broke", six slices say
30
- # which area did. It also removes a load-induced flake. On 2026-08-11 the
29
+ # The gain is diagnosis: a red monolith says "e2e broke"; a named slice says
30
+ # which area and, where relevant, which transport or behavior failed. It
31
+ # also removes a load-induced flake. On 2026-08-11 the
31
32
  # nightly failed with nine "Timed out waiting for container readiness"
32
33
  # errors after 1h12m on one runner, while the same tests on the same commit
33
- # passed in the merge gate — where they are spread over six.
34
+ # passed in the merge gate — where they were spread over six at the time.
34
35
  name: smoke-e2e-${{ matrix.slice }}
35
36
  runs-on: ubuntu-latest
36
37
  timeout-minutes: 90
37
38
  strategy:
38
39
  fail-fast: false
39
40
  matrix:
40
- slice: [heartbeat, chatter, occupancy-grid, sized-payload, remote-assist, remote-assist-streams, runtime-tools, media, concurrency, benchmark-ab, benchmark-replay, benchmark-capacity, benchmark-capacity-cases]
41
+ slice:
42
+ - heartbeat
43
+ - chatter
44
+ - occupancy-grid-dds
45
+ - occupancy-grid-zenoh
46
+ - sized-payload-fastdds
47
+ - sized-payload-zenoh
48
+ - remote-assist
49
+ - remote-assist-costmap
50
+ - remote-assist-camera
51
+ - runtime-tools
52
+ - media
53
+ - concurrency-parallel
54
+ - concurrency-conflict
55
+ - benchmark-ab
56
+ - benchmark-replay
57
+ - benchmark-capacity
58
+ - benchmark-capacity-cases
41
59
 
42
60
  steps:
43
61
  - name: Check out repository
@@ -51,10 +69,15 @@ jobs:
51
69
  python-version: "3.12"
52
70
  cache: pip
53
71
 
54
- - name: Install just and tmux
55
- run: |
56
- sudo apt-get update
57
- sudo apt-get install -y just tmux
72
+ - name: Install just
73
+ uses: ./.github/actions/setup-just
74
+
75
+ - name: Ensure tmux
76
+ # Preinstalled on the GitHub-hosted image, so this is a probe
77
+ # rather than an install — but the dependency is named, so a
78
+ # runner image that drops it fails here instead of inside a
79
+ # session.
80
+ run: command -v tmux >/dev/null || { sudo apt-get update && sudo apt-get install -y tmux; }
58
81
 
59
82
  - name: Set up local environment
60
83
  run: just setup
@@ -98,10 +121,15 @@ jobs:
98
121
  python-version: "3.12"
99
122
  cache: pip
100
123
 
101
- - name: Install just and tmux
102
- run: |
103
- sudo apt-get update
104
- sudo apt-get install -y just tmux
124
+ - name: Install just
125
+ uses: ./.github/actions/setup-just
126
+
127
+ - name: Ensure tmux
128
+ # Preinstalled on the GitHub-hosted image, so this is a probe
129
+ # rather than an install — but the dependency is named, so a
130
+ # runner image that drops it fails here instead of inside a
131
+ # session.
132
+ run: command -v tmux >/dev/null || { sudo apt-get update && sudo apt-get install -y tmux; }
105
133
 
106
134
  - name: Set up local environment
107
135
  run: just setup
@@ -29,9 +29,7 @@ jobs:
29
29
  cache: pip
30
30
 
31
31
  - name: Install just
32
- run: |
33
- sudo apt-get update
34
- sudo apt-get install -y just
32
+ uses: ./.github/actions/setup-just
35
33
 
36
34
  - name: Set up local environment
37
35
  run: just setup
@@ -71,9 +71,7 @@ jobs:
71
71
  cache: pip
72
72
 
73
73
  - name: Install just
74
- run: |
75
- sudo apt-get update
76
- sudo apt-get install -y just
74
+ uses: ./.github/actions/setup-just
77
75
 
78
76
  - name: Set up local environment
79
77
  run: just setup
@@ -102,9 +100,7 @@ jobs:
102
100
  cache: pip
103
101
 
104
102
  - name: Install just
105
- run: |
106
- sudo apt-get update
107
- sudo apt-get install -y just
103
+ uses: ./.github/actions/setup-just
108
104
 
109
105
  - name: Set up local environment
110
106
  run: just setup
@@ -152,9 +148,7 @@ jobs:
152
148
  cache: pip
153
149
 
154
150
  - name: Install just
155
- run: |
156
- sudo apt-get update
157
- sudo apt-get install -y just
151
+ uses: ./.github/actions/setup-just
158
152
 
159
153
  - name: Set up local environment
160
154
  run: just setup
@@ -162,44 +156,55 @@ jobs:
162
156
  - name: Validate package
163
157
  run: just package
164
158
 
165
- preflight-success:
166
- name: preflight-success
159
+ quick-gate:
160
+ # Everything `e2e` waits for that is not the image, and deliberately no
161
+ # more. It exists to answer one question — is the tree obviously broken,
162
+ # such that seventeen slices would burn roughly 73 runner-minutes to say so.
163
+ #
164
+ # It replaced a `needs: preflight-success` edge that made e2e wait for the
165
+ # whole five-version matrix. That barrier cost 2.15 min of every gate run
166
+ # and had fired once in sixty runs, on `workflow-lint`, which takes 0.12
167
+ # min; the 2.0 min of `merge-lightweight` that set its height has never
168
+ # stopped an e2e round, and its expensive part is `test-nondocker-cov`
169
+ # (38s of 45s), which is a test suite rather than a tripwire.
170
+ #
171
+ # `lint` and `typecheck` are 4s together. The rest of this job is the fixed
172
+ # cost every job pays, which is also what `image` pays — so sizing the
173
+ # tripwire this way makes it free: e2e could not start before `image`
174
+ # finished anyway. Nothing merges on a weaker check than before, because
175
+ # `ci-success` still requires every preflight job.
176
+ name: quick-gate
167
177
  runs-on: ubuntu-latest
168
- needs: [workflow-lint, dependency-review, build-lint, merge-lightweight, package]
169
- if: always() && (github.event_name != 'pull_request' || github.event.pull_request.draft == false)
178
+ if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
170
179
  steps:
171
- - name: Check preflight jobs
180
+ - name: Check out repository
181
+ uses: actions/checkout@v6
182
+
183
+ - name: Set up Python
184
+ uses: actions/setup-python@v6
185
+ with:
186
+ python-version: "3.12"
187
+ cache: pip
188
+
189
+ - name: Install just
190
+ uses: ./.github/actions/setup-just
191
+
192
+ - name: Set up local environment
193
+ run: just setup
194
+
195
+ - name: Is the tree obviously broken
172
196
  run: |
173
- if [[ "${{ needs.workflow-lint.result }}" != "success" ]]; then
174
- echo "workflow-lint failed: ${{ needs.workflow-lint.result }}"
175
- exit 1
176
- fi
177
- if [[ "${{ github.event_name }}" == "pull_request" && "${{ needs.dependency-review.result }}" != "success" ]]; then
178
- echo "dependency-review failed: ${{ needs.dependency-review.result }}"
179
- exit 1
180
- fi
181
- if [[ "${{ needs.build-lint.result }}" != "success" ]]; then
182
- echo "build-lint failed: ${{ needs.build-lint.result }}"
183
- exit 1
184
- fi
185
- if [[ "${{ needs.merge-lightweight.result }}" != "success" ]]; then
186
- echo "merge-lightweight failed: ${{ needs.merge-lightweight.result }}"
187
- exit 1
188
- fi
189
- if [[ "${{ needs.package.result }}" != "success" ]]; then
190
- echo "package failed: ${{ needs.package.result }}"
191
- exit 1
192
- fi
193
- echo "All preflight checks passed"
197
+ just lint
198
+ just typecheck
194
199
 
195
200
  image:
196
201
  # Publish the images the e2e suite builds, once per set of build inputs,
197
- # instead of rebuilding them in each of thirteen jobs. #236 measured that
198
- # build at 154s per job: 57s pulling the multi-GB ROS base from Docker Hub,
199
- # 40s exporting layers, 47s of apt and pip. A pull from GHCR — co-located
200
- # with the runners, no Hub rate limit, one transfer instead of a transfer
201
- # plus a build — replaces all of it, and takes twelve of the thirteen Hub
202
- # pulls off the merge gate's critical path.
202
+ # instead of rebuilding them in every job. #236 measured that build at
203
+ # 154s per job when the matrix had thirteen jobs: 57s pulling the multi-GB
204
+ # ROS base from Docker Hub, 40s exporting layers, 47s of apt and pip. A pull
205
+ # from GHCR — co-located with the runners, no Hub rate limit, one transfer
206
+ # instead of a transfer plus a build — replaces all of it. The benefit
207
+ # grows with the diagnostic matrix; seventeen jobs still build only once.
203
208
  #
204
209
  # The tag is a hash of everything that decides the image (base digest,
205
210
  # package lists, Dockerfile, entrypoint, ros2docker version, build UID):
@@ -208,8 +213,9 @@ jobs:
208
213
  # is stale" is not a state this can reach — which is the objection #226
209
214
  # raised against caching the image inline.
210
215
  #
211
- # Runs beside preflight rather than after it: on a hit it inspects two
212
- # manifests and stops, so it is never on the critical path.
216
+ # Runs beside the preflight jobs rather than after them: on a hit it
217
+ # inspects two manifests and stops. It is what sets when `e2e` can
218
+ # start, which is why `quick-gate` is sized to finish inside it.
213
219
  name: image
214
220
  runs-on: ubuntu-latest
215
221
  timeout-minutes: 60
@@ -231,9 +237,7 @@ jobs:
231
237
  cache: pip
232
238
 
233
239
  - name: Install just
234
- run: |
235
- sudo apt-get update
236
- sudo apt-get install -y just
240
+ uses: ./.github/actions/setup-just
237
241
 
238
242
  - name: Set up local environment
239
243
  run: just setup
@@ -291,24 +295,41 @@ jobs:
291
295
  # tests/contract/test_workflow_contracts.py keeps the three workflows and
292
296
  # the justfile agreeing.
293
297
  #
294
- # The slices are chosen by measured cost, not grouped by theme (#226):
295
- # themed slices spanned 7m39s to 18m31s, and one test ran in two of them.
296
- # Thirteen rather than six because the model that predicted the balanced
297
- # six within 25s also says twelve reaches the floor and more buys nothing
298
- # (#235). Which tests a slice owns and what each costs is E2E_SLICES in
299
- # tests/e2e/conftest.py — change that, not this line, to move a test.
298
+ # Slice names are diagnostic boundaries, not cost buckets. Costs tell us
299
+ # when a theme needs another runner; they never justify packing unrelated
300
+ # tests together. Seventeen is the smallest theme-preserving partition that
301
+ # reaches the measured floor: #253 split the four overloaded themes along
302
+ # transport, stream, or concurrency semantics. Which tests a slice owns and
303
+ # what each costs is E2E_SLICES in tests/e2e/conftest.py.
300
304
  name: e2e-${{ matrix.slice }}
301
305
  runs-on: ubuntu-latest
302
306
  timeout-minutes: 90
303
- needs: [preflight-success, image]
304
- if: always() && !cancelled() && needs.preflight-success.result == 'success' && needs.image.result == 'success'
307
+ needs: [quick-gate, image]
308
+ if: always() && !cancelled() && needs.quick-gate.result == 'success' && needs.image.result == 'success'
305
309
  permissions:
306
310
  contents: read
307
311
  packages: read
308
312
  strategy:
309
313
  fail-fast: false
310
314
  matrix:
311
- slice: [heartbeat, chatter, occupancy-grid, sized-payload, remote-assist, remote-assist-streams, runtime-tools, media, concurrency, benchmark-ab, benchmark-replay, benchmark-capacity, benchmark-capacity-cases]
315
+ slice:
316
+ - heartbeat
317
+ - chatter
318
+ - occupancy-grid-dds
319
+ - occupancy-grid-zenoh
320
+ - sized-payload-fastdds
321
+ - sized-payload-zenoh
322
+ - remote-assist
323
+ - remote-assist-costmap
324
+ - remote-assist-camera
325
+ - runtime-tools
326
+ - media
327
+ - concurrency-parallel
328
+ - concurrency-conflict
329
+ - benchmark-ab
330
+ - benchmark-replay
331
+ - benchmark-capacity
332
+ - benchmark-capacity-cases
312
333
 
313
334
  steps:
314
335
  - name: Check out repository
@@ -322,10 +343,15 @@ jobs:
322
343
  python-version: "3.12"
323
344
  cache: pip
324
345
 
325
- - name: Install just and tmux
326
- run: |
327
- sudo apt-get update
328
- sudo apt-get install -y just tmux
346
+ - name: Install just
347
+ uses: ./.github/actions/setup-just
348
+
349
+ - name: Ensure tmux
350
+ # Preinstalled on the GitHub-hosted image, so this is a probe
351
+ # rather than an install — but the dependency is named, so a
352
+ # runner image that drops it fails here instead of inside a
353
+ # session.
354
+ run: command -v tmux >/dev/null || { sudo apt-get update && sudo apt-get install -y tmux; }
329
355
 
330
356
  - name: Set up local environment
331
357
  run: just setup
@@ -364,7 +390,7 @@ jobs:
364
390
  - build-lint
365
391
  - merge-lightweight
366
392
  - package
367
- - preflight-success
393
+ - quick-gate
368
394
  - image
369
395
  - e2e
370
396
  if: always() && (github.event_name != 'pull_request' || github.event.pull_request.draft == false)
@@ -392,8 +418,8 @@ jobs:
392
418
  echo "package failed or was skipped: ${{ needs.package.result }}"
393
419
  exit 1
394
420
  fi
395
- if [[ "${{ needs.preflight-success.result }}" != "success" ]]; then
396
- echo "preflight-success failed or was skipped: ${{ needs.preflight-success.result }}"
421
+ if [[ "${{ needs.quick-gate.result }}" != "success" ]]; then
422
+ echo "quick-gate failed or was skipped: ${{ needs.quick-gate.result }}"
397
423
  exit 1
398
424
  fi
399
425
  if [[ "${{ needs.image.result }}" != "success" ]]; then
@@ -35,9 +35,7 @@ jobs:
35
35
  cache: pip
36
36
 
37
37
  - name: Install just
38
- run: |
39
- sudo apt-get update
40
- sudo apt-get install -y just
38
+ uses: ./.github/actions/setup-just
41
39
 
42
40
  - name: Set up local environment
43
41
  run: just setup
@@ -67,9 +65,7 @@ jobs:
67
65
  cache: pip
68
66
 
69
67
  - name: Install just
70
- run: |
71
- sudo apt-get update
72
- sudo apt-get install -y just
68
+ uses: ./.github/actions/setup-just
73
69
 
74
70
  - name: Set up local environment
75
71
  run: just setup
@@ -114,7 +110,7 @@ jobs:
114
110
  retention-days: 30
115
111
 
116
112
  e2e:
117
- # The same five slices the merge gate runs, in parallel, instead of one
113
+ # The same diagnostic slices the merge gate runs, in parallel, instead of one
118
114
  # sequential `just test-e2e-smoke` over the whole suite. That target is
119
115
  # identical to nightly-e2e.yml's smoke-e2e job, so the release used to be
120
116
  # the third sequential run of the same tests against the same tree; it
@@ -125,7 +121,24 @@ jobs:
125
121
  strategy:
126
122
  fail-fast: false
127
123
  matrix:
128
- slice: [heartbeat, chatter, occupancy-grid, sized-payload, remote-assist, remote-assist-streams, runtime-tools, media, concurrency, benchmark-ab, benchmark-replay, benchmark-capacity, benchmark-capacity-cases]
124
+ slice:
125
+ - heartbeat
126
+ - chatter
127
+ - occupancy-grid-dds
128
+ - occupancy-grid-zenoh
129
+ - sized-payload-fastdds
130
+ - sized-payload-zenoh
131
+ - remote-assist
132
+ - remote-assist-costmap
133
+ - remote-assist-camera
134
+ - runtime-tools
135
+ - media
136
+ - concurrency-parallel
137
+ - concurrency-conflict
138
+ - benchmark-ab
139
+ - benchmark-replay
140
+ - benchmark-capacity
141
+ - benchmark-capacity-cases
129
142
 
130
143
  steps:
131
144
  - name: Check out repository
@@ -139,10 +152,15 @@ jobs:
139
152
  python-version: "3.12"
140
153
  cache: pip
141
154
 
142
- - name: Install just and tmux
143
- run: |
144
- sudo apt-get update
145
- sudo apt-get install -y just tmux
155
+ - name: Install just
156
+ uses: ./.github/actions/setup-just
157
+
158
+ - name: Ensure tmux
159
+ # Preinstalled on the GitHub-hosted image, so this is a probe
160
+ # rather than an install — but the dependency is named, so a
161
+ # runner image that drops it fails here instead of inside a
162
+ # session.
163
+ run: command -v tmux >/dev/null || { sudo apt-get update && sudo apt-get install -y tmux; }
146
164
 
147
165
  - name: Set up local environment
148
166
  run: just setup
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rosotacom-dev
3
- Version: 2.5.dev26
3
+ Version: 2.5.dev29
4
4
  Summary: Host CLI for ROS OTA communication sessions.
5
5
  Author: develNor
6
6
  License-Expression: BSD-3-Clause