rosotacom-dev 2.5.dev24__tar.gz → 2.5.dev27__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.dev27/.github/actions/setup-just/action.yml +34 -0
  2. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/workflows/benchmark-calibrate.yml +11 -10
  3. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/workflows/benchmark-gate.yml +11 -10
  4. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/workflows/dev-release.yml +1 -3
  5. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/workflows/image-scan.yml +1 -3
  6. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/workflows/nightly-e2e.yml +18 -8
  7. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/workflows/pr-lightweight.yml +1 -3
  8. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/workflows/pr-merge-gate.yml +58 -49
  9. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/workflows/release.yml +11 -10
  10. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/CONCURRENCY.md +20 -0
  11. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/PKG-INFO +10 -1
  12. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/README.md +9 -0
  13. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/ci.md +44 -10
  14. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/cli.py +73 -8
  15. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom_dev.egg-info/PKG-INFO +10 -1
  16. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom_dev.egg-info/SOURCES.txt +1 -0
  17. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom_dev.egg-info/scm_file_list.json +1 -0
  18. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom_dev.egg-info/scm_version.json +2 -2
  19. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/contract/test_security_maintenance_config.py +3 -3
  20. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/contract/test_workflow_contracts.py +54 -0
  21. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/e2e/conftest.py +21 -16
  22. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_cli.py +59 -0
  23. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_concurrency.py +128 -2
  24. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.devcontainer/devcontainer.json.template +0 -0
  25. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.devcontainer/re_generate_devcontainer_json.py +0 -0
  26. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/CODEOWNERS +0 -0
  27. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/ISSUE_TEMPLATE/documentation-audit.md +0 -0
  28. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/ISSUE_TEMPLATE/implementation-cleanup.md +0 -0
  29. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/ISSUE_TEMPLATE/quality-workflow.md +0 -0
  30. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/ISSUE_TEMPLATE/redesign.md +0 -0
  31. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/ISSUE_TEMPLATE/release-process.md +0 -0
  32. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/ISSUE_TEMPLATE/repository-diagnosis.md +0 -0
  33. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/ISSUE_TEMPLATE/test-ci-audit.md +0 -0
  34. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/ISSUE_TEMPLATE/work-item.md +0 -0
  35. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  36. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.github/dependabot.yml +0 -0
  37. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/.pre-commit-config.yaml +0 -0
  38. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/AGENTS.md +0 -0
  39. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/CONTRIBUTING.md +0 -0
  40. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/DEVELOPMENT_PRINCIPLES.md +0 -0
  41. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/LICENSE.txt +0 -0
  42. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/MANIFEST.in +0 -0
  43. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/budgets.jsonl +0 -0
  44. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/calibration/README.md +0 -0
  45. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/calibration/capacity-size-tight-cyclone.json +0 -0
  46. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/calibration/probe-loss-gop-tight-cyclone.json +0 -0
  47. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/calibration/probe-loss-nominal-cyclone.json +0 -0
  48. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/calibration/probe-loss-tight-cyclone.json +0 -0
  49. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/calibration/probe-loss-tight-fastdds.json +0 -0
  50. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/calibration/probe-loss-tight-zenoh.json +0 -0
  51. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/codecov.yml +0 -0
  52. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/deployment-configuration.md +0 -0
  53. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/benchmark-ab.md +0 -0
  54. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/benchmark-bag-as-load.md +0 -0
  55. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/ffmpeg-keyframes.md +0 -0
  56. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/findings/README.md +0 -0
  57. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/findings/cyclone-spdp-discovery-bursts.md +0 -0
  58. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/findings/delay-alone-no-loss.md +0 -0
  59. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/findings/head-of-line-irregularity.md +0 -0
  60. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/findings/jitter-loss-bandwidth-latency.md +0 -0
  61. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/findings/lighter-message-loss.md +0 -0
  62. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/findings/zero-loss-boundaries-18kb-20hz.md +0 -0
  63. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/forensics-report.md +0 -0
  64. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/geo-link-map.md +0 -0
  65. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/github-repository-settings.md +0 -0
  66. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/link-trace.md +0 -0
  67. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/owner-runbook.md +0 -0
  68. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/performance-bands.md +0 -0
  69. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/playbooks/README.md +0 -0
  70. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/quality-model.md +0 -0
  71. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/release-notes/TEMPLATE.md +0 -0
  72. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/release-notes/v2.1.md +0 -0
  73. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/release-notes/v2.2.md +0 -0
  74. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/release-notes/v2.3.md +0 -0
  75. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/release-notes/v2.4.md +0 -0
  76. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/release.md +0 -0
  77. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/rfcs/0001-expectation-driven-test-suite.md +0 -0
  78. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/rfcs/0002-expectation-concepts.md +0 -0
  79. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/rfcs/0003-metric-backbone.md +0 -0
  80. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/rfcs/0004-network-profiles.md +0 -0
  81. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/rfcs/0005-benchmark-genres-and-ci.md +0 -0
  82. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/rfcs/0006-dynamic-qos.md +0 -0
  83. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/rfcs/0007-regression-gate.md +0 -0
  84. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/rfcs/README.md +0 -0
  85. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/testing.md +0 -0
  86. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/docs/work-items.md +0 -0
  87. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/install.sh +0 -0
  88. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/justfile +0 -0
  89. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/media/control_center.png +0 -0
  90. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/media/echo_test.png +0 -0
  91. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/media/forensics-report-example.png +0 -0
  92. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/media/host.png +0 -0
  93. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/media/vehicle.png +0 -0
  94. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/pyproject.toml +0 -0
  95. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/requirements.txt +0 -0
  96. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/rosotacom.yaml +0 -0
  97. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/run_session_in_container.py +0 -0
  98. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/session-configuration.md +0 -0
  99. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/setup.cfg +0 -0
  100. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/__init__.py +0 -0
  101. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/__main__.py +0 -0
  102. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/anonymize.py +0 -0
  103. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/bag_ground_truth.py +0 -0
  104. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/benched_set.py +0 -0
  105. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/benchmark.py +0 -0
  106. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/benchmark_delta.py +0 -0
  107. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/bundle_check.py +0 -0
  108. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/cli_benchmark.py +0 -0
  109. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/deployment.py +0 -0
  110. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/ffmpeg_packet.py +0 -0
  111. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/forensics.py +0 -0
  112. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/geomap.py +0 -0
  113. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/image_cache.py +0 -0
  114. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/network_profiles.py +0 -0
  115. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/network_shaper.py +0 -0
  116. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/plots.py +0 -0
  117. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/py.typed +0 -0
  118. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/benched-set.yaml +0 -0
  119. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/.gitignore +0 -0
  120. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/README.md +0 -0
  121. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/__init__.py +0 -0
  122. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/bags/8_drop_reference/metadata.yaml +0 -0
  123. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/deployment.example.yaml +0 -0
  124. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/profiles.yaml +0 -0
  125. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/ros2docker.json +0 -0
  126. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/rosotacom.yaml +0 -0
  127. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scenarios/2_native_chatter/scenario-definition.yaml +0 -0
  128. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/1_heartbeat/run_machine_a.sh +0 -0
  129. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/1_heartbeat/run_machine_b.sh +0 -0
  130. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/external.ros2docker.json +0 -0
  131. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/run_communication.sh +0 -0
  132. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/run_external.py +0 -0
  133. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/wait_for_echo_topic.sh +0 -0
  134. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/external.ros2docker.json +0 -0
  135. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/run_communication.sh +0 -0
  136. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/run_external.py +0 -0
  137. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/external.ros2docker.json +0 -0
  138. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/external_session.yaml +0 -0
  139. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/foxglove.json +0 -0
  140. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/run_communication.sh +0 -0
  141. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/run_external.py +0 -0
  142. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/costmap_1second/costmap_1second_0.mcap +0 -0
  143. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/costmap_1second/metadata.yaml +0 -0
  144. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/external.ros2docker.json +0 -0
  145. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/run_communication.sh +0 -0
  146. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/run_external.py +0 -0
  147. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/external.ros2docker.json +0 -0
  148. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/external_session.yaml +0 -0
  149. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/foxglove.json +0 -0
  150. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/run_communication.sh +0 -0
  151. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/run_external.py +0 -0
  152. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/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.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/costmap_1second/metadata.yaml +0 -0
  154. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/external.ros2docker.json +0 -0
  155. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/run_communication.sh +0 -0
  156. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/run_external.py +0 -0
  157. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/external.ros2docker.json +0 -0
  158. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/external_session.yaml +0 -0
  159. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/run_communication.sh +0 -0
  160. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/run_external.py +0 -0
  161. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/external.ros2docker.json +0 -0
  162. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/external_session.yaml +0 -0
  163. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/run_communication.sh +0 -0
  164. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/run_external.py +0 -0
  165. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/external.ros2docker.json +0 -0
  166. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/external_session.yaml +0 -0
  167. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/run_communication.sh +0 -0
  168. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/run_external.py +0 -0
  169. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/external.ros2docker.json +0 -0
  170. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/external_session.yaml +0 -0
  171. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/run_communication.sh +0 -0
  172. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/run_external.py +0 -0
  173. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/10_restamp/session-definition.yaml +0 -0
  174. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/11_trickle/session-definition.yaml +0 -0
  175. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/12_content_integrity/session-definition.yaml +0 -0
  176. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/13_link_latency/session-definition.yaml +0 -0
  177. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/14_remote_assist_anonymized/session-definition.yaml +0 -0
  178. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/15_remote_assist_anonymized_costmap/session-definition.yaml +0 -0
  179. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/16_remote_assist_anonymized_camera/session-definition.yaml +0 -0
  180. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/17_synthetic_camera_quality/session-definition.yaml +0 -0
  181. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/1_heartbeat/session-definition.yaml +0 -0
  182. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/1_heartbeat_status/session-definition.yaml +0 -0
  183. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/2_native_chatter/session-definition.yaml +0 -0
  184. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/3_comp_occ_grid/session-definition.yaml +0 -0
  185. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/4_comp_occ_grid_zen/session-definition.yaml +0 -0
  186. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/5_sized_payload/session-definition.yaml +0 -0
  187. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/6_sized_payload_zen/session-definition.yaml +0 -0
  188. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/7_latched_static/session-definition.yaml +0 -0
  189. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/8_drop/session-definition.yaml +0 -0
  190. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/9_throttle/session-definition.yaml +0 -0
  191. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/bench_1_1_capacity/session-definition.yaml +0 -0
  192. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/bench_1_2_load_sweep/session-definition.yaml +0 -0
  193. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/bench_1_3_ramp/session-definition.yaml +0 -0
  194. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/bench_1_4_recovery/session-definition.yaml +0 -0
  195. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/examples/sessions/bench_1_5_camera/session-definition.yaml +0 -0
  196. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ros2docker.json.example +0 -0
  197. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/.vscode/c_cpp_properties.json +0 -0
  198. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/.vscode/settings.json +0 -0
  199. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_easy_mode.xml.template +0 -0
  200. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_initial_peer_list.xml.template +0 -0
  201. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v2.xml.template +0 -0
  202. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v3.xml.template +0 -0
  203. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v4.xml.template +0 -0
  204. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v5.xml.template +0 -0
  205. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ota_configs/create_zenoh_json5.py +0 -0
  206. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ota_configs/cyclonedds_minimal.xml.template +0 -0
  207. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ota_configs/cyclonedds_tuned.xml.template +0 -0
  208. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ota_configs/fastdds_unicast.xml.template +0 -0
  209. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ota_configs/get_ota_xml.py +0 -0
  210. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ota_configs/utils.py +0 -0
  211. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ota_configs/zenoh.json5.template +0 -0
  212. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/.gitkeep +0 -0
  213. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_cpp/CMakeLists.txt +0 -0
  214. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_cpp/COLCON_IGNORE +0 -0
  215. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_cpp/LICENSE.txt +0 -0
  216. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_cpp/package.xml +0 -0
  217. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_cpp/src/hz_monitor.cpp +0 -0
  218. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_cpp/src/universal_compressor.cpp +0 -0
  219. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_cpp/src/universal_decompressor.cpp +0 -0
  220. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_msgs/CMakeLists.txt +0 -0
  221. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_msgs/LICENSE.txt +0 -0
  222. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/CompressedData.msg +0 -0
  223. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/EchoHeartbeat.msg +0 -0
  224. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/OtaStamped.msg +0 -0
  225. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/SizedPayload.msg +0 -0
  226. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_msgs/package.xml +0 -0
  227. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/LICENSE.txt +0 -0
  228. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/__init__.py +0 -0
  229. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/base_bridge_relay.py +0 -0
  230. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/bridge_in.py +0 -0
  231. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/bridge_out.py +0 -0
  232. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/heartbeat_echo.py +0 -0
  233. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/hz_monitor.py +0 -0
  234. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/image_bandwidth_reducer.py +0 -0
  235. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/image_pixel_capper.py +0 -0
  236. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/lanelet_saver.py +0 -0
  237. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/latch_relay.py +0 -0
  238. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/costmap_remapper.py +0 -0
  239. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/marker_remapper.py +0 -0
  240. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/speed_test.py +0 -0
  241. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/tf_remapper.py +0 -0
  242. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/traffic_monitor.py +0 -0
  243. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/wifi_network_analysis_1.py +0 -0
  244. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/link_bytes.py +0 -0
  245. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/link_trace.py +0 -0
  246. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/local_global_frame_bridge.py +0 -0
  247. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/localization_map_split_reduce_saver.py +0 -0
  248. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/msg_transform.py +0 -0
  249. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/pair_management.py +0 -0
  250. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/pub_sub_pair.py +0 -0
  251. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/qos.py +0 -0
  252. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/relay_in.py +0 -0
  253. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/relay_out.py +0 -0
  254. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/restamp.py +0 -0
  255. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/sized_publisher.py +0 -0
  256. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/stage_latency.py +0 -0
  257. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/stage_latency_core.py +0 -0
  258. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/status_overview.py +0 -0
  259. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/status_overview_core.py +0 -0
  260. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/tf_map_to_cart_saver.py +0 -0
  261. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/topic_monitor.py +0 -0
  262. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/topic_resolution.py +0 -0
  263. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/trickle.py +0 -0
  264. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_compressor.py +0 -0
  265. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_decompressor.py +0 -0
  266. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_ota_unwrapper.py +0 -0
  267. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_ota_wrapper.py +0 -0
  268. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/package.xml +0 -0
  269. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/resource/com_py +0 -0
  270. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/setup.cfg +0 -0
  271. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/setup.py +0 -0
  272. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/test/test_copyright.py +0 -0
  273. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/test/test_flake8.py +0 -0
  274. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/ros2src/com_py/test/test_pep257.py +0 -0
  275. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/session/content/base/session_plugin_base.yaml +0 -0
  276. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/session/content/network/up_connectivity.py +0 -0
  277. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/session/content/network/wifi_network_analysis_2.py +0 -0
  278. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/session/creation/anonymize_bag.py +0 -0
  279. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/session/creation/catmux_log_setup.sh +0 -0
  280. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/session/creation/create_session_yaml.py +0 -0
  281. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/session/creation/generate_session_files.py +0 -0
  282. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/session/creation/run_session.py +0 -0
  283. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/session/creation/run_session_in_external_terminal.py +0 -0
  284. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/resources/ws/session/creation/strip_ansi.py +0 -0
  285. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/status_eval.py +0 -0
  286. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/stream_stats.py +0 -0
  287. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/trace_profiles.py +0 -0
  288. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/transit.py +0 -0
  289. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom/video_quality.py +0 -0
  290. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom_dev.egg-info/dependency_links.txt +0 -0
  291. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom_dev.egg-info/entry_points.txt +0 -0
  292. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom_dev.egg-info/requires.txt +0 -0
  293. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/src/rosotacom_dev.egg-info/top_level.txt +0 -0
  294. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/stop_session_in_container.py +0 -0
  295. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/terminology.md +0 -0
  296. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/contract/test_benched_set_registry.py +0 -0
  297. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/contract/test_findings.py +0 -0
  298. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/contract/test_markdown_links.py +0 -0
  299. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/contract/test_ota_source_bundle.py +0 -0
  300. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/contract/test_package_metadata.py +0 -0
  301. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/contract/test_packaged_resources.py +0 -0
  302. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/contract/test_profile_covers_generated_commands.py +0 -0
  303. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/contract/test_pytest_policy.py +0 -0
  304. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/contract/test_readme_examples.py +0 -0
  305. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/contract/test_session_configuration_doc.py +0 -0
  306. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/e2e/test_anonymize_e2e.py +0 -0
  307. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/e2e/test_benchmark_ab.py +0 -0
  308. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/e2e/test_benchmark_capacity.py +0 -0
  309. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/e2e/test_benchmark_replay.py +0 -0
  310. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/e2e/test_parallel_smoke.py +0 -0
  311. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/e2e/test_smoke.py +0 -0
  312. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/e2e/test_timeline_stepping.py +0 -0
  313. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/e2e/test_video_quality_e2e.py +0 -0
  314. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/sessions/generate_rmw_matrix.py +0 -0
  315. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-local_zenoh-ros2dds-ota/session-definition.yaml +0 -0
  316. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-ota/session-definition.yaml +0 -0
  317. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-ota-tuned/session-definition.yaml +0 -0
  318. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/sessions/rmw_matrix/1_heartbeat_fastdds/session-definition.yaml +0 -0
  319. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/sessions/rmw_matrix/1_heartbeat_zen-endpoints/session-definition.yaml +0 -0
  320. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_anonymize.py +0 -0
  321. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_bag_ground_truth.py +0 -0
  322. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_benched_set.py +0 -0
  323. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_benchmark.py +0 -0
  324. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_benchmark_delta.py +0 -0
  325. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_bundle_check.py +0 -0
  326. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_cli_benchmark.py +0 -0
  327. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_deployment.py +0 -0
  328. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_ffmpeg_packet.py +0 -0
  329. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_forensics.py +0 -0
  330. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_geomap.py +0 -0
  331. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_image_cache.py +0 -0
  332. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_link_bytes.py +0 -0
  333. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_link_trace.py +0 -0
  334. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_network_profiles.py +0 -0
  335. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_network_shaper.py +0 -0
  336. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_ota_xml.py +0 -0
  337. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_plots.py +0 -0
  338. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_stage_latency.py +0 -0
  339. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_status_eval.py +0 -0
  340. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_status_overview.py +0 -0
  341. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_stream_stats.py +0 -0
  342. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_trace_profiles.py +0 -0
  343. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/tests/unit/test_transit.py +0 -0
  344. {rosotacom_dev-2.5.dev24 → rosotacom_dev-2.5.dev27}/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
@@ -51,10 +51,15 @@ jobs:
51
51
  python-version: "3.12"
52
52
  cache: pip
53
53
 
54
- - name: Install just and tmux
55
- run: |
56
- sudo apt-get update
57
- sudo apt-get install -y just tmux
54
+ - name: Install just
55
+ uses: ./.github/actions/setup-just
56
+
57
+ - name: Ensure tmux
58
+ # Preinstalled on the GitHub-hosted image, so this is a probe
59
+ # rather than an install — but the dependency is named, so a
60
+ # runner image that drops it fails here instead of inside a
61
+ # session.
62
+ run: command -v tmux >/dev/null || { sudo apt-get update && sudo apt-get install -y tmux; }
58
63
 
59
64
  - name: Set up local environment
60
65
  run: just setup
@@ -98,10 +103,15 @@ jobs:
98
103
  python-version: "3.12"
99
104
  cache: pip
100
105
 
101
- - name: Install just and tmux
102
- run: |
103
- sudo apt-get update
104
- sudo apt-get install -y just tmux
106
+ - name: Install just
107
+ uses: ./.github/actions/setup-just
108
+
109
+ - name: Ensure tmux
110
+ # Preinstalled on the GitHub-hosted image, so this is a probe
111
+ # rather than an install — but the dependency is named, so a
112
+ # runner image that drops it fails here instead of inside a
113
+ # session.
114
+ run: command -v tmux >/dev/null || { sudo apt-get update && sudo apt-get install -y tmux; }
105
115
 
106
116
  - name: Set up local environment
107
117
  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,35 +156,46 @@ 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 thirteen slices would burn seventy 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,
@@ -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
@@ -300,8 +304,8 @@ jobs:
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
@@ -322,10 +326,15 @@ jobs:
322
326
  python-version: "3.12"
323
327
  cache: pip
324
328
 
325
- - name: Install just and tmux
326
- run: |
327
- sudo apt-get update
328
- sudo apt-get install -y just tmux
329
+ - name: Install just
330
+ uses: ./.github/actions/setup-just
331
+
332
+ - name: Ensure tmux
333
+ # Preinstalled on the GitHub-hosted image, so this is a probe
334
+ # rather than an install — but the dependency is named, so a
335
+ # runner image that drops it fails here instead of inside a
336
+ # session.
337
+ run: command -v tmux >/dev/null || { sudo apt-get update && sudo apt-get install -y tmux; }
329
338
 
330
339
  - name: Set up local environment
331
340
  run: just setup
@@ -364,7 +373,7 @@ jobs:
364
373
  - build-lint
365
374
  - merge-lightweight
366
375
  - package
367
- - preflight-success
376
+ - quick-gate
368
377
  - image
369
378
  - e2e
370
379
  if: always() && (github.event_name != 'pull_request' || github.event.pull_request.draft == false)
@@ -392,8 +401,8 @@ jobs:
392
401
  echo "package failed or was skipped: ${{ needs.package.result }}"
393
402
  exit 1
394
403
  fi
395
- if [[ "${{ needs.preflight-success.result }}" != "success" ]]; then
396
- echo "preflight-success failed or was skipped: ${{ needs.preflight-success.result }}"
404
+ if [[ "${{ needs.quick-gate.result }}" != "success" ]]; then
405
+ echo "quick-gate failed or was skipped: ${{ needs.quick-gate.result }}"
397
406
  exit 1
398
407
  fi
399
408
  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
@@ -139,10 +135,15 @@ jobs:
139
135
  python-version: "3.12"
140
136
  cache: pip
141
137
 
142
- - name: Install just and tmux
143
- run: |
144
- sudo apt-get update
145
- sudo apt-get install -y just tmux
138
+ - name: Install just
139
+ uses: ./.github/actions/setup-just
140
+
141
+ - name: Ensure tmux
142
+ # Preinstalled on the GitHub-hosted image, so this is a probe
143
+ # rather than an install — but the dependency is named, so a
144
+ # runner image that drops it fails here instead of inside a
145
+ # session.
146
+ run: command -v tmux >/dev/null || { sudo apt-get update && sudo apt-get install -y tmux; }
146
147
 
147
148
  - name: Set up local environment
148
149
  run: just setup
@@ -39,6 +39,26 @@ commands *discover* the matching containers from Docker instead of recomputing
39
39
  fixed names — they clean up every instance for the requested identity/target,
40
40
  including leftovers from crashed runs.
41
41
 
42
+ ## Opting out: fixed, human-readable names
43
+
44
+ A project whose machines are read by people rather than by CI — a demo or
45
+ operations project — can set `com_container_prefix` in its `rosotacom.yaml`:
46
+
47
+ ```yaml
48
+ com_container_prefix: remote-assist
49
+ ```
50
+
51
+ Session communication containers are then named
52
+ `<prefix>_com-to-<remote-peer>` (e.g. `remote-assist_com-to-center`): stable
53
+ across runs and legible in `docker ps`, at the price of parallelism — a second
54
+ start of the same session on the same host is a name conflict. That conflict is
55
+ detected in the same preflight as everything else: `--force` (the session
56
+ default) replaces the running container, `--no-force` aborts with its name.
57
+ Conflict discovery matches **both** naming schemes, so a leftover
58
+ instance-scoped container is still found and replaced after a project switches
59
+ modes. Test and CI projects should leave the key unset and keep the
60
+ collision-free instance-scoped names.
61
+
42
62
  ## How conflicts are detected (fail-safe preflight)
43
63
 
44
64
  Each start command checks Docker before it allocates anything, and aborts with
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rosotacom-dev
3
- Version: 2.5.dev24
3
+ Version: 2.5.dev27
4
4
  Summary: Host CLI for ROS OTA communication sessions.
5
5
  Author: develNor
6
6
  License-Expression: BSD-3-Clause
@@ -227,6 +227,15 @@ scripts/
227
227
  project-local directories first and shared/example directories later when one
228
228
  project should discover both.
229
229
 
230
+ `com_container_prefix` (optional) trades concurrency for readability: when set,
231
+ session communication containers get the stable name
232
+ `<prefix>_com-to-<remote-peer>` (e.g. `remote-assist_com-to-center`) instead of
233
+ the default workspace- and instance-scoped unique name. Set it in projects whose
234
+ machines are read by people (`docker ps` during a demo, next to colleagues'
235
+ containers); leave it unset in test/CI projects, where concurrent instances must
236
+ never collide on a name. [CONCURRENCY.md](CONCURRENCY.md) has the exact
237
+ conflict semantics.
238
+
230
239
  ### Locating packaged resources
231
240
 
232
241
  rosotacom is installed in an isolated environment (pipx, or a project venv), so
@@ -182,6 +182,15 @@ scripts/
182
182
  project-local directories first and shared/example directories later when one
183
183
  project should discover both.
184
184
 
185
+ `com_container_prefix` (optional) trades concurrency for readability: when set,
186
+ session communication containers get the stable name
187
+ `<prefix>_com-to-<remote-peer>` (e.g. `remote-assist_com-to-center`) instead of
188
+ the default workspace- and instance-scoped unique name. Set it in projects whose
189
+ machines are read by people (`docker ps` during a demo, next to colleagues'
190
+ containers); leave it unset in test/CI projects, where concurrent instances must
191
+ never collide on a name. [CONCURRENCY.md](CONCURRENCY.md) has the exact
192
+ conflict semantics.
193
+
185
194
  ### Locating packaged resources
186
195
 
187
196
  rosotacom is installed in an isolated environment (pipx, or a project venv), so
@@ -48,6 +48,31 @@ The merge gate runs workflow lint, dependency/security review, runtime/build ass
48
48
  Python 3.10–3.14 are supported for the host CLI; Python 3.12 is the reference
49
49
  interpreter for packaging and Docker E2E jobs.
50
50
 
51
+ ### What the e2e slices wait for
52
+
53
+ Every job in the gate starts at once — there is no runner contention — so the
54
+ only thing that decides when the thirteen slices start is their `needs`. They
55
+ wait for exactly two jobs:
56
+
57
+ - **`image`**, because a slice adopts the published image rather than building
58
+ it, so it cannot start before that image is known to exist. On a hit this is
59
+ two manifest inspections, and it is what sets the floor.
60
+ - **`quick-gate`**, `just lint && just typecheck` on one interpreter: the
61
+ cheapest signal that the tree is not obviously broken, so thirteen runners do
62
+ not spend seventy minutes discovering a syntax error. Four seconds of work,
63
+ sized to finish inside `image` and therefore free.
64
+
65
+ They used to wait for `preflight-success`, which meant the whole five-version
66
+ `merge-lightweight` matrix, and that cost **2.15 min of every gate run**.
67
+ Measured against the sixty runs before #248, it had stopped an e2e round once,
68
+ on `workflow-lint` — 0.12 min of the 2.15. Nothing about what may merge
69
+ changed: `ci-success` still requires `workflow-lint`, `build-lint`,
70
+ `merge-lightweight`, `package`, `quick-gate`, `image`, and `e2e`, and it is the
71
+ only required check in branch protection.
72
+
73
+ `tests/contract/test_workflow_contracts.py::test_e2e_waits_only_for_the_cheap_gate_and_the_image`
74
+ keeps the barrier from growing back.
75
+
51
76
  ```bash
52
77
  just lint-workflows
53
78
  just lint-build
@@ -159,26 +184,35 @@ with a usage error, and a test owned twice fails
159
184
 
160
185
  The costs are warm pytest `call` durations — medians over seven merge-gate runs
161
186
  of 2026-08-11/12. On top of them each job pays a fixed
162
- `RUNNER_SETUP_SECONDS + IMAGE_BUILD_SECONDS` (2m05s: 55s of runner setup, then
187
+ `RUNNER_SETUP_SECONDS + IMAGE_BUILD_SECONDS` (1m19s: 46s outside the tests, then
163
188
  the project image obtained inside whichever test runs first). Because that
164
189
  constant is per job and not per test, balancing warm costs balances wall clock.
165
190
 
166
191
  `IMAGE_BUILD_SECONDS` models the merge gate, where that image is pulled rather
167
192
  than built (see above); the release and nightly lanes still build and pay the
168
- older 154s. One slice does not currently reproduce its recorded split: `media`
169
- spends about 24s more than its two costs predict, and it is the critical path,
170
- so it is the first thing to remeasure.
193
+ older 154s. It has now been re-measured twice, because both changes that made
194
+ it smaller were changes to what a job moves rather than to what it runs: 154
195
+ 70 when #236 replaced the build with a pull, and 70 → 33 when #245 rebased the
196
+ image on `ros-base` and the published project image went 1640 MB → 957 MB.
197
+ Runs 31681061779 and 31687149587 ran the same partition either side of that, so
198
+ the paired per-slice difference measures it directly: median −37.4s over all
199
+ thirteen.
171
200
 
172
201
  ### How many slices
173
202
 
174
203
  `floor_seconds()` is `fixed + slowest single test` — the fastest any partition
175
204
  of this suite could be, because one job has to run that test and pays the fixed
176
- cost like every other. It is currently **6m32s**, of which 1m10s is the image
177
- (7m56s before #236 published it instead of rebuilding it per job).
178
-
179
- Thirteen slices sit at 7m14s, 1.11x the floor. That is the point of choosing N
180
- from the numbers rather than from taste: six balanced slices were 13m37s,
181
- twelve reach the floor, and past twelve every extra job is pure cost. The
205
+ cost like every other. It is currently **5m47s**, of which 33s is the image
206
+ (7m56s before #236 published it instead of rebuilding it per job, 6m32s before
207
+ #245 shrank it).
208
+
209
+ Thirteen slices sit at 6m26s, **1.12x** the floor. That is the point of choosing
210
+ N from the numbers rather than from taste: six balanced slices were 13m37s,
211
+ twelve reach the floor, and past twelve every extra job is pure cost. Note that
212
+ 1.12x is now a partition problem rather than a count problem — thirteen slices
213
+ *can* reach 1.00x, and the current assignment does not, because `occupancy-grid`
214
+ holds two 150s tests. The fixed cost falling twice is what exposed it: the same
215
+ partition was 1.11x of a floor that was a minute and a half higher. The
182
216
  contract test asserts distance to the floor rather than the spread between
183
217
  slices — spread is compressed toward 1.0 by the fixed cost as N grows, so it
184
218
  keeps reading fine while the gate stops improving.