rosotacom-dev 2.5.dev80__tar.gz → 2.5.dev82__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 (401) hide show
  1. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/PKG-INFO +1 -1
  2. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/README.md +1 -0
  3. rosotacom_dev-2.5.dev82/docs/findings/queueing-adds-delay-not-loss.md +122 -0
  4. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/cli.py +33 -1
  5. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom_dev.egg-info/PKG-INFO +1 -1
  6. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom_dev.egg-info/SOURCES.txt +1 -0
  7. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom_dev.egg-info/scm_file_list.json +1 -0
  8. rosotacom_dev-2.5.dev82/src/rosotacom_dev.egg-info/scm_version.json +8 -0
  9. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_cli.py +26 -0
  10. rosotacom_dev-2.5.dev80/src/rosotacom_dev.egg-info/scm_version.json +0 -8
  11. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.devcontainer/devcontainer.json.template +0 -0
  12. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.devcontainer/re_generate_devcontainer_json.py +0 -0
  13. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/CODEOWNERS +0 -0
  14. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/ISSUE_TEMPLATE/documentation-audit.md +0 -0
  15. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/ISSUE_TEMPLATE/implementation-cleanup.md +0 -0
  16. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/ISSUE_TEMPLATE/quality-workflow.md +0 -0
  17. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/ISSUE_TEMPLATE/redesign.md +0 -0
  18. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/ISSUE_TEMPLATE/release-process.md +0 -0
  19. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/ISSUE_TEMPLATE/repository-diagnosis.md +0 -0
  20. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/ISSUE_TEMPLATE/test-ci-audit.md +0 -0
  21. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/ISSUE_TEMPLATE/work-item.md +0 -0
  22. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  23. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/actions/setup-just/action.yml +0 -0
  24. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/dependabot.yml +0 -0
  25. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/workflows/benchmark-calibrate.yml +0 -0
  26. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/workflows/benchmark-gate.yml +0 -0
  27. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/workflows/dev-release.yml +0 -0
  28. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/workflows/image-scan.yml +0 -0
  29. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/workflows/nightly-e2e.yml +0 -0
  30. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/workflows/pr-lightweight.yml +0 -0
  31. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/workflows/pr-merge-gate.yml +0 -0
  32. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/workflows/release.yml +0 -0
  33. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.pre-commit-config.yaml +0 -0
  34. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/AGENTS.md +0 -0
  35. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/CONCURRENCY.md +0 -0
  36. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/CONTRIBUTING.md +0 -0
  37. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/DEVELOPMENT_PRINCIPLES.md +0 -0
  38. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/LICENSE.txt +0 -0
  39. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/MANIFEST.in +0 -0
  40. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/README.md +0 -0
  41. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/budgets.jsonl +0 -0
  42. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/calibration/README.md +0 -0
  43. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/calibration/capacity-size-tight-cyclone.json +0 -0
  44. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/calibration/probe-loss-gop-tight-cyclone.json +0 -0
  45. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/calibration/probe-loss-nominal-cyclone.json +0 -0
  46. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/calibration/probe-loss-tight-cyclone.json +0 -0
  47. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/calibration/probe-loss-tight-fastdds.json +0 -0
  48. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/calibration/probe-loss-tight-zenoh.json +0 -0
  49. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/codecov.yml +0 -0
  50. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/deployment-configuration.md +0 -0
  51. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/benchmark-ab.md +0 -0
  52. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/benchmark-bag-as-load.md +0 -0
  53. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/ci.md +0 -0
  54. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/ffmpeg-keyframes.md +0 -0
  55. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/a-fitted-delay-table-never-reached-the-shaper.md +0 -0
  56. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/a-shorter-group-does-not-lose-fewer-key-frames.md +0 -0
  57. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/a-transport-element-doubles-every-fastdds-sample.md +0 -0
  58. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/cyclone-fragment-equal-to-max-drops-fragmented-samples.md +0 -0
  59. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/cyclone-spdp-discovery-bursts.md +0 -0
  60. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/delay-alone-no-loss.md +0 -0
  61. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/fastdds-datagram-cap-drops-large-samples.md +0 -0
  62. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/graph-derived-types-block-a-non-graph-transport.md +0 -0
  63. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/head-of-line-irregularity.md +0 -0
  64. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/jitter-loss-bandwidth-latency.md +0 -0
  65. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/keyframe-loss-kills-the-next-deltas.md +0 -0
  66. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/lifespan-is-enforced-by-one-reader-and-not-the-other.md +0 -0
  67. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/lighter-message-loss.md +0 -0
  68. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/neither-a-queue-nor-a-burst-tilts-the-size-law.md +0 -0
  69. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/one-domain-two-cyclone-configs-stop-interoperating.md +0 -0
  70. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/oversubscription-queues-not-losses.md +0 -0
  71. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/reorder-becomes-reader-loss.md +0 -0
  72. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/repro/decode_chain_repro.py +0 -0
  73. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/repro/reorder_drop_repro.py +0 -0
  74. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/sender-rows-make-a-dead-link-look-loss-free.md +0 -0
  75. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/the-size-law-belongs-to-the-transport-not-the-link.md +0 -0
  76. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/zero-loss-boundaries-18kb-20hz.md +0 -0
  77. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/forensics-report.md +0 -0
  78. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/geo-link-map.md +0 -0
  79. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/github-repository-settings.md +0 -0
  80. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/link-bandwidth.md +0 -0
  81. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/link-trace.md +0 -0
  82. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/ota-pcap.md +0 -0
  83. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/owner-runbook.md +0 -0
  84. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/performance-bands.md +0 -0
  85. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/playbooks/README.md +0 -0
  86. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/quality-model.md +0 -0
  87. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/release-notes/TEMPLATE.md +0 -0
  88. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/release-notes/v2.1.md +0 -0
  89. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/release-notes/v2.2.md +0 -0
  90. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/release-notes/v2.3.md +0 -0
  91. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/release-notes/v2.4.md +0 -0
  92. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/release.md +0 -0
  93. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/rfcs/0001-expectation-driven-test-suite.md +0 -0
  94. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/rfcs/0002-expectation-concepts.md +0 -0
  95. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/rfcs/0003-metric-backbone.md +0 -0
  96. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/rfcs/0004-network-profiles.md +0 -0
  97. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/rfcs/0005-benchmark-genres-and-ci.md +0 -0
  98. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/rfcs/0006-dynamic-qos.md +0 -0
  99. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/rfcs/0007-regression-gate.md +0 -0
  100. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/rfcs/README.md +0 -0
  101. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/testing.md +0 -0
  102. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/work-items.md +0 -0
  103. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/install.sh +0 -0
  104. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/justfile +0 -0
  105. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/media/control_center.png +0 -0
  106. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/media/echo_test.png +0 -0
  107. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/media/forensics-report-example.png +0 -0
  108. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/media/host.png +0 -0
  109. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/media/vehicle.png +0 -0
  110. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/pyproject.toml +0 -0
  111. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/requirements.txt +0 -0
  112. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/rosotacom.yaml +0 -0
  113. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/session-configuration.md +0 -0
  114. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/setup.cfg +0 -0
  115. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/__init__.py +0 -0
  116. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/__main__.py +0 -0
  117. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/anonymize.py +0 -0
  118. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/bag_ground_truth.py +0 -0
  119. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/benched_set.py +0 -0
  120. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/benchmark.py +0 -0
  121. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/benchmark_delta.py +0 -0
  122. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/bundle_check.py +0 -0
  123. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/cli_benchmark.py +0 -0
  124. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/deployment.py +0 -0
  125. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/ffmpeg_packet.py +0 -0
  126. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/forensics.py +0 -0
  127. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/geomap.py +0 -0
  128. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/image_cache.py +0 -0
  129. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/netem_dist.py +0 -0
  130. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/network_preflight.py +0 -0
  131. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/network_profiles.py +0 -0
  132. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/network_shaper.py +0 -0
  133. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/plots.py +0 -0
  134. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/py.typed +0 -0
  135. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/benched-set.yaml +0 -0
  136. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/.gitignore +0 -0
  137. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/README.md +0 -0
  138. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/__init__.py +0 -0
  139. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/bags/8_drop_reference/metadata.yaml +0 -0
  140. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/deployment.example.yaml +0 -0
  141. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/dist/field-20260817.dist +0 -0
  142. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/profiles.yaml +0 -0
  143. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/ros2docker.json +0 -0
  144. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/ros2docker.lyrical.json +0 -0
  145. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/rosotacom.yaml +0 -0
  146. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scenarios/2_native_chatter/scenario-definition.yaml +0 -0
  147. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/1_heartbeat/run_machine_a.sh +0 -0
  148. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/1_heartbeat/run_machine_b.sh +0 -0
  149. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/external.lyrical.ros2docker.json +0 -0
  150. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/external.ros2docker.json +0 -0
  151. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/run_communication.sh +0 -0
  152. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/run_external.py +0 -0
  153. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/wait_for_echo_topic.sh +0 -0
  154. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/external.lyrical.ros2docker.json +0 -0
  155. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/external.ros2docker.json +0 -0
  156. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/run_communication.sh +0 -0
  157. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/run_external.py +0 -0
  158. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/external.ros2docker.json +0 -0
  159. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/external_session.yaml +0 -0
  160. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/foxglove.json +0 -0
  161. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/run_communication.sh +0 -0
  162. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/run_external.py +0 -0
  163. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/costmap_1second/costmap_1second_0.mcap +0 -0
  164. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/costmap_1second/metadata.yaml +0 -0
  165. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/external.ros2docker.json +0 -0
  166. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/run_communication.sh +0 -0
  167. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/run_external.py +0 -0
  168. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/external.ros2docker.json +0 -0
  169. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/external_session.yaml +0 -0
  170. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/foxglove.json +0 -0
  171. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/run_communication.sh +0 -0
  172. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/run_external.py +0 -0
  173. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/costmap_1second/costmap_1second_0.mcap +0 -0
  174. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/costmap_1second/metadata.yaml +0 -0
  175. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/external.ros2docker.json +0 -0
  176. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/run_communication.sh +0 -0
  177. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/run_external.py +0 -0
  178. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/external.ros2docker.json +0 -0
  179. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/external_session.yaml +0 -0
  180. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/run_communication.sh +0 -0
  181. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/run_external.py +0 -0
  182. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/external.ros2docker.json +0 -0
  183. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/external_session.yaml +0 -0
  184. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/run_communication.sh +0 -0
  185. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/run_external.py +0 -0
  186. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/external.ros2docker.json +0 -0
  187. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/external_session.yaml +0 -0
  188. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/run_communication.sh +0 -0
  189. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/run_external.py +0 -0
  190. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/external.ros2docker.json +0 -0
  191. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/external_session.yaml +0 -0
  192. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/run_communication.sh +0 -0
  193. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/run_external.py +0 -0
  194. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/10_restamp/session-definition.yaml +0 -0
  195. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/11_trickle/session-definition.yaml +0 -0
  196. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/12_content_integrity/session-definition.yaml +0 -0
  197. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/13_link_latency/session-definition.yaml +0 -0
  198. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/14_remote_assist_anonymized/session-definition.yaml +0 -0
  199. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/15_remote_assist_anonymized_costmap/session-definition.yaml +0 -0
  200. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/16_remote_assist_anonymized_camera/session-definition.yaml +0 -0
  201. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/17_synthetic_camera_quality/session-definition.yaml +0 -0
  202. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/1_heartbeat/session-definition.yaml +0 -0
  203. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/1_heartbeat_status/session-definition.yaml +0 -0
  204. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/2_native_chatter/session-definition.yaml +0 -0
  205. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/3_comp_occ_grid/session-definition.yaml +0 -0
  206. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/4_comp_occ_grid_zen/session-definition.yaml +0 -0
  207. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/5_sized_payload/session-definition.yaml +0 -0
  208. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/6_sized_payload_zen/session-definition.yaml +0 -0
  209. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/7_latched_static/session-definition.yaml +0 -0
  210. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/8_drop/session-definition.yaml +0 -0
  211. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/9_throttle/session-definition.yaml +0 -0
  212. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/bench_1_1_capacity/session-definition.yaml +0 -0
  213. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/bench_1_2_load_sweep/session-definition.yaml +0 -0
  214. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/bench_1_3_ramp/session-definition.yaml +0 -0
  215. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/bench_1_4_recovery/session-definition.yaml +0 -0
  216. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/bench_1_5_camera/session-definition.yaml +0 -0
  217. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ros2docker.json.example +0 -0
  218. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ros2docker.lyrical.json.example +0 -0
  219. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/.vscode/c_cpp_properties.json +0 -0
  220. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/.vscode/settings.json +0 -0
  221. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_easy_mode.xml.template +0 -0
  222. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_initial_peer_list.xml.template +0 -0
  223. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v2.xml.template +0 -0
  224. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v3.xml.template +0 -0
  225. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v4.xml.template +0 -0
  226. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v5.xml.template +0 -0
  227. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/create_zenoh_json5.py +0 -0
  228. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/cyclonedds_local_participants.xml.template +0 -0
  229. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/cyclonedds_minimal.xml.template +0 -0
  230. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/cyclonedds_scoped.xml.template +0 -0
  231. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/cyclonedds_tuned.xml.template +0 -0
  232. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/fastdds_easy_mode.xml.template +0 -0
  233. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/fastdds_local.xml.template +0 -0
  234. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/fastdds_tuned.xml.template +0 -0
  235. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/fastdds_unicast.xml.template +0 -0
  236. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/get_ota_xml.py +0 -0
  237. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/utils.py +0 -0
  238. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/zenoh.json5.template +0 -0
  239. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/.gitkeep +0 -0
  240. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_cpp/CMakeLists.txt +0 -0
  241. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_cpp/COLCON_IGNORE +0 -0
  242. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_cpp/LICENSE.txt +0 -0
  243. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_cpp/package.xml +0 -0
  244. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_cpp/src/hz_monitor.cpp +0 -0
  245. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_cpp/src/universal_compressor.cpp +0 -0
  246. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_cpp/src/universal_decompressor.cpp +0 -0
  247. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_msgs/CMakeLists.txt +0 -0
  248. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_msgs/LICENSE.txt +0 -0
  249. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/CompressedData.msg +0 -0
  250. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/EchoHeartbeat.msg +0 -0
  251. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/OtaStamped.msg +0 -0
  252. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/SizedPayload.msg +0 -0
  253. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_msgs/package.xml +0 -0
  254. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/LICENSE.txt +0 -0
  255. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/__init__.py +0 -0
  256. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/base_bridge_relay.py +0 -0
  257. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/bridge_in.py +0 -0
  258. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/bridge_out.py +0 -0
  259. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/ffmpeg_flags.py +0 -0
  260. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/heartbeat_echo.py +0 -0
  261. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/hz_monitor.py +0 -0
  262. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/image_bandwidth_reducer.py +0 -0
  263. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/image_pixel_capper.py +0 -0
  264. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/lanelet_saver.py +0 -0
  265. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/latch_relay.py +0 -0
  266. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/costmap_remapper.py +0 -0
  267. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/marker_remapper.py +0 -0
  268. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/speed_test.py +0 -0
  269. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/tf_remapper.py +0 -0
  270. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/traffic_monitor.py +0 -0
  271. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/wifi_network_analysis_1.py +0 -0
  272. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/link_bytes.py +0 -0
  273. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/link_trace.py +0 -0
  274. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/local_global_frame_bridge.py +0 -0
  275. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/localization_map_split_reduce_saver.py +0 -0
  276. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/msg_transform.py +0 -0
  277. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/ota_pcap.py +0 -0
  278. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/pair_management.py +0 -0
  279. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/playout_pacer.py +0 -0
  280. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/playout_pacer_core.py +0 -0
  281. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/pub_sub_pair.py +0 -0
  282. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/qos.py +0 -0
  283. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/relay_in.py +0 -0
  284. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/relay_out.py +0 -0
  285. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/restamp.py +0 -0
  286. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/sized_publisher.py +0 -0
  287. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/stage_latency.py +0 -0
  288. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/stage_latency_core.py +0 -0
  289. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/status_overview.py +0 -0
  290. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/status_overview_core.py +0 -0
  291. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/tf_map_to_cart_saver.py +0 -0
  292. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/topic_monitor.py +0 -0
  293. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/topic_resolution.py +0 -0
  294. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/trickle.py +0 -0
  295. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_compressor.py +0 -0
  296. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_decompressor.py +0 -0
  297. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_ota_unwrapper.py +0 -0
  298. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_ota_wrapper.py +0 -0
  299. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/package.xml +0 -0
  300. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/resource/com_py +0 -0
  301. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/setup.cfg +0 -0
  302. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/setup.py +0 -0
  303. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/test/test_copyright.py +0 -0
  304. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/test/test_flake8.py +0 -0
  305. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/test/test_pep257.py +0 -0
  306. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/session/content/base/session_plugin_base.yaml +0 -0
  307. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/session/content/network/up_connectivity.py +0 -0
  308. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/session/content/network/wifi_network_analysis_2.py +0 -0
  309. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/session/creation/anonymize_bag.py +0 -0
  310. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/session/creation/catmux_log_setup.sh +0 -0
  311. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/session/creation/create_session_yaml.py +0 -0
  312. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/session/creation/generate_session_files.py +0 -0
  313. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/session/creation/run_session.py +0 -0
  314. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/session/creation/run_session_in_external_terminal.py +0 -0
  315. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/session/creation/strip_ansi.py +0 -0
  316. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/status_eval.py +0 -0
  317. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/stream_stats.py +0 -0
  318. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/trace_profiles.py +0 -0
  319. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/transit.py +0 -0
  320. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/video_quality.py +0 -0
  321. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom_dev.egg-info/dependency_links.txt +0 -0
  322. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom_dev.egg-info/entry_points.txt +0 -0
  323. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom_dev.egg-info/requires.txt +0 -0
  324. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom_dev.egg-info/top_level.txt +0 -0
  325. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/terminology.md +0 -0
  326. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/contract/test_benched_set_registry.py +0 -0
  327. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/contract/test_findings.py +0 -0
  328. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/contract/test_generated_topics_have_a_producer.py +0 -0
  329. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/contract/test_lyrical_runtime_compat.py +0 -0
  330. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/contract/test_markdown_links.py +0 -0
  331. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/contract/test_ota_source_bundle.py +0 -0
  332. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/contract/test_package_metadata.py +0 -0
  333. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/contract/test_packaged_resources.py +0 -0
  334. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/contract/test_profile_covers_generated_commands.py +0 -0
  335. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/contract/test_pytest_policy.py +0 -0
  336. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/contract/test_readme_examples.py +0 -0
  337. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/contract/test_security_maintenance_config.py +0 -0
  338. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/contract/test_session_configuration_doc.py +0 -0
  339. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/contract/test_session_template_substitution.py +0 -0
  340. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/contract/test_workflow_contracts.py +0 -0
  341. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/e2e/conftest.py +0 -0
  342. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/e2e/test_anonymize_e2e.py +0 -0
  343. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/e2e/test_benchmark_ab.py +0 -0
  344. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/e2e/test_benchmark_capacity.py +0 -0
  345. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/e2e/test_benchmark_replay.py +0 -0
  346. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/e2e/test_parallel_smoke.py +0 -0
  347. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/e2e/test_smoke.py +0 -0
  348. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/e2e/test_timeline_stepping.py +0 -0
  349. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/e2e/test_video_quality_e2e.py +0 -0
  350. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/sessions/generate_rmw_matrix.py +0 -0
  351. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-local_zenoh-ros2dds-ota/session-definition.yaml +0 -0
  352. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-ota/session-definition.yaml +0 -0
  353. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-ota-tuned/session-definition.yaml +0 -0
  354. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/sessions/rmw_matrix/1_heartbeat_fastdds/session-definition.yaml +0 -0
  355. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/sessions/rmw_matrix/1_heartbeat_fastdds-default/session-definition.yaml +0 -0
  356. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/sessions/rmw_matrix/1_heartbeat_zen-endpoints/session-definition.yaml +0 -0
  357. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_anonymize.py +0 -0
  358. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_bag_ground_truth.py +0 -0
  359. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_benched_set.py +0 -0
  360. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_benchmark.py +0 -0
  361. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_benchmark_delta.py +0 -0
  362. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_bundle_check.py +0 -0
  363. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_catmux_pane_logging.py +0 -0
  364. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_cli_benchmark.py +0 -0
  365. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_concurrency.py +0 -0
  366. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_container_shaping.py +0 -0
  367. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_deployment.py +0 -0
  368. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_ffmpeg_flags.py +0 -0
  369. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_ffmpeg_packet.py +0 -0
  370. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_field_profiles.py +0 -0
  371. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_forensics.py +0 -0
  372. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_geomap.py +0 -0
  373. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_image_cache.py +0 -0
  374. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_link_bytes.py +0 -0
  375. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_link_trace.py +0 -0
  376. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_netem_dist.py +0 -0
  377. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_network_preflight.py +0 -0
  378. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_network_profiles.py +0 -0
  379. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_network_shaper.py +0 -0
  380. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_ota_benchmark_peer_exec.py +0 -0
  381. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_ota_link_configs.py +0 -0
  382. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_ota_pcap.py +0 -0
  383. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_ota_unwrapper.py +0 -0
  384. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_ota_wrapper.py +0 -0
  385. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_ota_xml.py +0 -0
  386. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_playout_pacer.py +0 -0
  387. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_plots.py +0 -0
  388. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_pub_sub_pair_types.py +0 -0
  389. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_qos_fallback_logging.py +0 -0
  390. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_relay_optional_parameters.py +0 -0
  391. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_ros_node_entity_ownership.py +0 -0
  392. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_session_pipeline.py +0 -0
  393. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_stage_latency.py +0 -0
  394. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_status_eval.py +0 -0
  395. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_status_overview.py +0 -0
  396. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_status_overview_observer.py +0 -0
  397. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_stream_stats.py +0 -0
  398. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_terminology_stage_ownership.py +0 -0
  399. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_trace_profiles.py +0 -0
  400. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_transit.py +0 -0
  401. {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_video_quality.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rosotacom-dev
3
- Version: 2.5.dev80
3
+ Version: 2.5.dev82
4
4
  Summary: Host CLI for ROS OTA communication sessions.
5
5
  Author: develNor
6
6
  License-Expression: BSD-3-Clause
@@ -40,6 +40,7 @@ living verification hook.
40
40
  - [A lost keyframe silences exactly the next gop_size−2 deltas](keyframe-loss-kills-the-next-deltas.md) - libavcodec emits nothing for them, the last delta decodes with artifacts, the next keyframe restores clean decode; a lost delta never blocks decode — so the display hole is gop_size × frame period, deterministically.
41
41
  - [Any transport element in a Fast DDS profile doubles every sample on the wire](a-transport-element-doubles-every-fastdds-sample.md) - 366 datagrams for 180 samples against 183 without it; `<builtinTransports>DEFAULT` is a no-op selection and doubles too, so the trigger is the element's presence — removing it takes the shipped OTA profile from 2.10x the payload to 1.04x at identical delivery.
42
42
  - [Lifespan is enforced by one DDS reader and not the other](lifespan-is-enforced-by-one-reader-and-not-the-other.md) - under the same 20% oversubscription both stacks queue alike (472 and 433 delivered at ~1.1-1.2 s); with `lifespan: 0.7` CycloneDDS is unchanged and delivers 9.1% inside the bound, while Fast DDS drops to 4 delivered and never exceeds 570 ms — the policy decides shown-vs-suppressed, not how long the wait is.
43
+ - [A filling queue adds delay and no loss of its own](queueing-adds-delay-not-loss.md) - 18 bins of ramp from 0.5 to 5.6 s lose 0 of 558 on a clean link and 15 of 558 on one that drops 0.6 % of packets, which is the unshaped rate; the queue defers, the link loses, and the buffer ends it at 97 % of one bin.
43
44
  - [Oversubscription queues — it does not lose until the queue itself dies](oversubscription-queues-not-losses.md) - 16% over an emulated cap climbed one-way delay 340 → 3250 ms across twelve bins with zero loss in every one; the losses arrived only when the queue died, all at once.
44
45
  - [Best-effort reordering becomes reader-side loss, independent of history depth](reorder-becomes-reader-loss.md) - under pure delay jitter a Cyclone best-effort reader discards every overtaken sample (57% at 100 Hz under 50+-45 ms), delivery stays strictly monotonic, and depth 50 loses the same as depth 1.
45
46
  - [Jitter causes loss while bandwidth shortage builds latency](jitter-loss-bandwidth-latency.md) - 18 KB at 20 Hz separates jitter-induced loss from bandwidth-induced queueing.
@@ -0,0 +1,122 @@
1
+ # A Filling Queue Adds Delay And No Loss Of Its Own
2
+
3
+ ## Claim
4
+
5
+ Under oversubscription a queue converts the excess into delay and contributes
6
+ **nothing** to the loss rate until it overflows. Capping an otherwise clean link
7
+ 15 % below the offer ramps one-way delay from 0.5 s to 5.6 s across eighteen
8
+ consecutive one-second bins with **0 of 558** offered messages lost, and drops
9
+ 97 % of a bin only once the buffer is full. Repeating the same cap on a link
10
+ that also drops 0.6 % of packets independently reproduces the identical ramp and
11
+ loses 15 of 558 during it — 2.7 %, which is the unshaped link's own 2.51 % and
12
+ not a milligram more.
13
+
14
+ So "the queue lost it" is never the explanation. Whatever a filling queue loses,
15
+ the link was losing anyway; what the queue adds is age. The corollary is the
16
+ useful one: **loss and delay have to be read as two measurements, because the
17
+ queue moves only one of them**, and a loss-based health verdict is blind to the
18
+ whole of the second signal.
19
+
20
+ ## Setup
21
+
22
+ - Host pair / topology: `tks-lamborghini`, rosotacom local benchmark mode using
23
+ the packaged example project; two peer containers on a private bridge, uplink
24
+ shaping via `tc` inside the peers' own netns (no host privileges).
25
+ - rosotacom SHA: `c5ce52f` (harness), submodule `c2d2467`.
26
+ - Profile: four conditions in one file, offer held at 1.035 Mbit/s throughout so
27
+ only the shaping differs.
28
+
29
+ | name | uplink |
30
+ |---|---|
31
+ | `q-clean` | `delay: 25ms` |
32
+ | `q-loss` | `delay: 25ms, loss: 0.6%` |
33
+ | `q-squeeze` | 10 s clean, 25 s at `rate: 900kbit`, 10 s clean |
34
+ | `q-squeeze-loss` | the same three steps, `loss: 0.6%` throughout |
35
+
36
+ - Load: `--size-pattern 6x200B+1x28KB --rate-hz 31`, so one stream carries a
37
+ 1-fragment and a 24-fragment class together and the size signature of the loss
38
+ is readable inside a single run.
39
+ - Seed policy: `loss` is netem's own stochastic element; `n=1` per condition,
40
+ reported as the four-cell comparison rather than as a distribution.
41
+
42
+ ## Evidence
43
+
44
+ Evidence grade: packaged-profile benchmark runs plus their per-bin timelines.
45
+
46
+ ```bash
47
+ rosotacom benchmark probe --project src/rosotacom/resources/examples/rosotacom.yaml \
48
+ --profiles-file <profiles.yaml> --profile q-squeeze \
49
+ --size-pattern 6x200B+1x28KB --rate-hz 31 --duration 45 --repeats 1 \
50
+ --bin-s 1 --no-plot
51
+ ```
52
+
53
+ | condition | ramp | delay across it | offered | lost in ramp | whole run |
54
+ |---|---:|---|---:|---:|---:|
55
+ | `q-clean` | none | 29.9 ms flat | — | — | 0 / 1398 = 0.00 % |
56
+ | `q-loss` | none | 29.2 ms flat | — | — | 35 / 1397 = 2.51 % |
57
+ | `q-squeeze` | 18 bins | 532 → 5623 ms | 558 | **0** | 84 / 1317 = 6.38 % |
58
+ | `q-squeeze-loss` | 18 bins | 538 → 5490 ms | 558 | **15 = 2.7 %** | 119 / 1314 = 9.06 % |
59
+
60
+ The ramp is cut by the delay's own slope and never by its loss — a bin belongs
61
+ to it when the median delay gained at least 250 ms over the bin before it. The
62
+ shaped bins gain about 295 ms each; the first bin to lose gains 221 and falls
63
+ outside by that rule rather than by its outcome. Without that discipline the
64
+ measurement defines its own answer.
65
+
66
+ Three readings:
67
+
68
+ 1. **Queueing is not a loss process.** Eighteen bins, 558 messages, zero. At the
69
+ 0.6 % per-packet rate the same load carries in `q-loss`, 558 messages of mean
70
+ 4.2 fragments would carry ~14 losses; the shaped-but-clean arm has none,
71
+ because there is nothing to lose them to.
72
+ 2. **Queueing does not amplify the link's loss either.** `q-squeeze-loss` loses
73
+ 2.7 % during a ramp whose delay reaches 5.5 s, against 2.51 % on the same link
74
+ with no queue at all. The queue defers packets; it does not damage them.
75
+ 3. **What ends it is the buffer, and it ends abruptly.** 97 % of a single bin,
76
+ not a gradual rise. The lossless window is therefore bounded by buffer depth
77
+ over excess rate and can be computed in advance, which is the only part of
78
+ this a deployment can design against.
79
+
80
+ Verification: manual, needs Docker and about three minutes per condition. Run
81
+ the command above for each profile and read `time-bins.jsonl` beside
82
+ `result.json`: the `q-squeeze` bins under the cap must show monotonically
83
+ climbing `latency_p50_ms` with `lost = 0`, and `q-squeeze-loss` must show the
84
+ same climb with `lost` at the unshaped arm's rate.
85
+
86
+ ## Status
87
+
88
+ confirmed, 2026-09-01.
89
+
90
+ ## Publication notes
91
+
92
+ This is the control the field could not supply. On a real cellular uplink the
93
+ two signals never separate — in the KAMO August campaign, thirty-six
94
+ pre-registered filling episodes over 168 s (delay rising for three or more
95
+ consecutive seconds, gaining at least 150 ms) lose 2.34 % against the 2.27 %
96
+ their own seconds' rate predicts, P(at most this many) = 0.71 — because whatever reduces
97
+ the grant also raises the error rate. Reading that field result alone, one would
98
+ conclude a filling queue loses. This finding shows it does not: the loss belongs
99
+ to the link and arrives whether or not the queue is filling.
100
+
101
+ A two-host repeat over the FZI LAN (lamborghini orchestrating, seat as peer b
102
+ through `remote-ota`) reached the peer, docker, and the containerized shaping
103
+ capability on both sides and then stopped: `--peer-exec` requires
104
+ `--install-mode checkout`, and checkout mode needs the project config inside the
105
+ peer's own checkout, while the only OTA project registered on seat is
106
+ `remote-assist`, whose session set has no synthetic benchmark session. So the
107
+ LAN arm needs either a bench session in `remote-assist` or the harness on a
108
+ second machine, and the four conditions above are single-host. That is the
109
+ weaker setting for network realism and the stronger one for this question: on
110
+ one host the shaper is the only thing between the peers, so a lossless ramp
111
+ cannot be a property of some intervening link.
112
+
113
+ It supersedes the reading in
114
+ [oversubscription-queues-not-losses.md](oversubscription-queues-not-losses.md),
115
+ which reported the same lossless ramp but attributed the boundary losses to the
116
+ timeline step destroying the queue. Here the buffer overflows *inside* an
117
+ unchanged shaping step, so the overflow is the queue's own limit rather than an
118
+ artefact of `tc qdisc replace`.
119
+
120
+ For papers: the pair `q-squeeze` / `q-squeeze-loss` is the figure. One ramp, one
121
+ loss axis, two arms — it shows in a single panel that the delay is the queue's
122
+ and the loss is the link's.
@@ -3562,6 +3562,35 @@ def _ota_remote_package_dir(peer: OtaSmokePeer, plan: OtaSmokePlan, *, dry_run:
3562
3562
  return located
3563
3563
 
3564
3564
 
3565
+ def _ota_missing_project_message(plan: OtaSmokePlan, peer: OtaSmokePeer) -> str:
3566
+ """Why one peer has no project file, in the terms that make it fixable.
3567
+
3568
+ `test -f` failing is the single most common way a checkout-mode run stops,
3569
+ and the bare "exit code 1" it used to raise says nothing about the contract
3570
+ it broke. The path is not resolved per peer: `--project` is split once, on
3571
+ the orchestrator, into (checkout root, path inside it), and that *relative*
3572
+ path is then asserted inside every peer's own `--peer-checkout`. So the
3573
+ peers do not merely need a rosotacom project each — they need the same
3574
+ repository, with the project at the same place in it.
3575
+
3576
+ The failure therefore has two ordinary causes and they want opposite fixes:
3577
+ the peer is behind (sync it), or the project lives in a repository this peer
3578
+ does not have (move the project, or point the peer at the repository that
3579
+ holds it). Naming both is the difference between a minute and an afternoon.
3580
+ """
3581
+ workdir = _ota_peer_workdir(plan, peer)
3582
+ return (
3583
+ f"{peer.name}: {workdir}/{plan.project} does not exist.\n"
3584
+ f" --install-mode checkout resolves the project once, on this machine, into a checkout root and "
3585
+ f"the path {plan.project!r} inside it, and then asserts that same relative path inside every peer's "
3586
+ f"--peer-checkout. Every peer therefore needs the same repository, with the project at the same "
3587
+ f"place in it -- not a project of its own.\n"
3588
+ f" If {peer.name} has that repository, it is behind: sync it and run again.\n"
3589
+ f" If it does not, the project is in the wrong repository for this run. Move it into the one the "
3590
+ f"peers actually have, or give this peer --peer-checkout for a checkout that holds it."
3591
+ )
3592
+
3593
+
3565
3594
  def _ota_verify_checkouts(plan: OtaSmokePlan, *, dry_run: bool) -> None:
3566
3595
  """Checkout mode's replacement for staging: assert, do not install.
3567
3596
 
@@ -3583,13 +3612,16 @@ def _ota_verify_checkouts(plan: OtaSmokePlan, *, dry_run: bool) -> None:
3583
3612
  dry_run=dry_run,
3584
3613
  batch=True,
3585
3614
  )
3586
- _ota_run(
3615
+ found = _ota_run(
3587
3616
  peer,
3588
3617
  f"test -f {checkout}/{project}",
3589
3618
  label=f"{peer.name}: project config {plan.project} inside the checkout",
3590
3619
  dry_run=dry_run,
3620
+ check=False,
3591
3621
  batch=True,
3592
3622
  )
3623
+ if found.returncode != 0:
3624
+ raise RuntimeError(_ota_missing_project_message(plan, peer))
3593
3625
  _ota_run(
3594
3626
  peer,
3595
3627
  f"{OTA_CHECKOUT_PATH_PREFIX}command -v rosotacom >/dev/null 2>&1",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rosotacom-dev
3
- Version: 2.5.dev80
3
+ Version: 2.5.dev82
4
4
  Summary: Host CLI for ROS OTA communication sessions.
5
5
  Author: develNor
6
6
  License-Expression: BSD-3-Clause
@@ -78,6 +78,7 @@ docs/findings/lighter-message-loss.md
78
78
  docs/findings/neither-a-queue-nor-a-burst-tilts-the-size-law.md
79
79
  docs/findings/one-domain-two-cyclone-configs-stop-interoperating.md
80
80
  docs/findings/oversubscription-queues-not-losses.md
81
+ docs/findings/queueing-adds-delay-not-loss.md
81
82
  docs/findings/reorder-becomes-reader-loss.md
82
83
  docs/findings/sender-rows-make-a-dead-link-look-loss-free.md
83
84
  docs/findings/the-size-law-belongs-to-the-transport-not-the-link.md
@@ -62,6 +62,7 @@
62
62
  "docs/findings/neither-a-queue-nor-a-burst-tilts-the-size-law.md",
63
63
  "docs/findings/one-domain-two-cyclone-configs-stop-interoperating.md",
64
64
  "docs/findings/oversubscription-queues-not-losses.md",
65
+ "docs/findings/queueing-adds-delay-not-loss.md",
65
66
  "docs/findings/reorder-becomes-reader-loss.md",
66
67
  "docs/findings/repro/decode_chain_repro.py",
67
68
  "docs/findings/repro/reorder_drop_repro.py",
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "2.4",
3
+ "distance": 82,
4
+ "node": "g0bd86d806f93ae00ec7f7009dd35fe5a018852e8",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-09-01"
8
+ }
@@ -3506,6 +3506,32 @@ def test_ota_checkout_mode_runs_each_peer_from_its_own_checkout(tmp_path: Path)
3506
3506
  assert "--rosotacom-config session/rosotacom.yaml" in command
3507
3507
 
3508
3508
 
3509
+ def test_ota_checkout_mode_names_the_shared_repository_when_a_peer_lacks_the_project(
3510
+ tmp_path: Path, monkeypatch: pytest.MonkeyPatch
3511
+ ) -> None:
3512
+ # The path is split once here and asserted on every peer, so a peer whose
3513
+ # checkout is a *different* repository fails this probe -- and used to fail
3514
+ # it as a bare "exit code 1", which reads as a broken machine rather than as
3515
+ # the contract it is. Two runs were spent on that in one afternoon: a bench
3516
+ # driven from the harness checkout, with a peer that only has the fleet
3517
+ # repository, cannot resolve one relative path on both sides.
3518
+ plan = _ota_checkout_plan(_write_checkout_project(tmp_path))
3519
+
3520
+ def fake_run(peer, script, *, label, **kwargs):
3521
+ code = 1 if script.startswith("test -f") and peer.name == "b" else 0
3522
+ return subprocess.CompletedProcess([], code, "", "")
3523
+
3524
+ monkeypatch.setattr(rosotacom, "_ota_run", fake_run)
3525
+
3526
+ with pytest.raises(RuntimeError) as error:
3527
+ rosotacom._ota_verify_checkouts(plan, dry_run=False)
3528
+
3529
+ message = str(error.value)
3530
+ assert "/home/other/fleet_mgmt/session/rosotacom.yaml does not exist" in message
3531
+ assert "the same repository" in message
3532
+ assert "it is behind: sync it" in message
3533
+
3534
+
3509
3535
  def test_ota_checkout_mode_puts_pipx_on_path_because_ssh_is_not_a_login_shell(tmp_path: Path) -> None:
3510
3536
  # `ssh host 'cmd'` skips the login profile, so a pipx install in
3511
3537
  # ~/.local/bin is invisible and the peer answers "command not found" —
@@ -1,8 +0,0 @@
1
- {
2
- "tag": "2.4",
3
- "distance": 80,
4
- "node": "g20983ff6a2471626fc5c940a3cfbf8e87a92b1cd",
5
- "dirty": false,
6
- "branch": "HEAD",
7
- "node_date": "2026-08-31"
8
- }