rosotacom-dev 2.5.dev79__tar.gz → 2.5.dev81__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.dev79 → rosotacom_dev-2.5.dev81}/PKG-INFO +1 -1
  2. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/findings/README.md +1 -0
  3. rosotacom_dev-2.5.dev81/docs/findings/queueing-adds-delay-not-loss.md +122 -0
  4. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/findings/the-size-law-belongs-to-the-transport-not-the-link.md +29 -3
  5. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom_dev.egg-info/PKG-INFO +1 -1
  6. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom_dev.egg-info/SOURCES.txt +1 -0
  7. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom_dev.egg-info/scm_file_list.json +1 -0
  8. rosotacom_dev-2.5.dev81/src/rosotacom_dev.egg-info/scm_version.json +8 -0
  9. rosotacom_dev-2.5.dev79/src/rosotacom_dev.egg-info/scm_version.json +0 -8
  10. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/.devcontainer/devcontainer.json.template +0 -0
  11. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/.devcontainer/re_generate_devcontainer_json.py +0 -0
  12. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/.github/CODEOWNERS +0 -0
  13. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/.github/ISSUE_TEMPLATE/documentation-audit.md +0 -0
  14. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/.github/ISSUE_TEMPLATE/implementation-cleanup.md +0 -0
  15. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/.github/ISSUE_TEMPLATE/quality-workflow.md +0 -0
  16. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/.github/ISSUE_TEMPLATE/redesign.md +0 -0
  17. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/.github/ISSUE_TEMPLATE/release-process.md +0 -0
  18. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/.github/ISSUE_TEMPLATE/repository-diagnosis.md +0 -0
  19. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/.github/ISSUE_TEMPLATE/test-ci-audit.md +0 -0
  20. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/.github/ISSUE_TEMPLATE/work-item.md +0 -0
  21. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  22. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/.github/actions/setup-just/action.yml +0 -0
  23. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/.github/dependabot.yml +0 -0
  24. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/.github/workflows/benchmark-calibrate.yml +0 -0
  25. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/.github/workflows/benchmark-gate.yml +0 -0
  26. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/.github/workflows/dev-release.yml +0 -0
  27. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/.github/workflows/image-scan.yml +0 -0
  28. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/.github/workflows/nightly-e2e.yml +0 -0
  29. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/.github/workflows/pr-lightweight.yml +0 -0
  30. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/.github/workflows/pr-merge-gate.yml +0 -0
  31. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/.github/workflows/release.yml +0 -0
  32. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/.pre-commit-config.yaml +0 -0
  33. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/AGENTS.md +0 -0
  34. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/CONCURRENCY.md +0 -0
  35. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/CONTRIBUTING.md +0 -0
  36. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/DEVELOPMENT_PRINCIPLES.md +0 -0
  37. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/LICENSE.txt +0 -0
  38. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/MANIFEST.in +0 -0
  39. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/README.md +0 -0
  40. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/budgets.jsonl +0 -0
  41. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/calibration/README.md +0 -0
  42. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/calibration/capacity-size-tight-cyclone.json +0 -0
  43. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/calibration/probe-loss-gop-tight-cyclone.json +0 -0
  44. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/calibration/probe-loss-nominal-cyclone.json +0 -0
  45. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/calibration/probe-loss-tight-cyclone.json +0 -0
  46. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/calibration/probe-loss-tight-fastdds.json +0 -0
  47. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/calibration/probe-loss-tight-zenoh.json +0 -0
  48. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/codecov.yml +0 -0
  49. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/deployment-configuration.md +0 -0
  50. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/benchmark-ab.md +0 -0
  51. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/benchmark-bag-as-load.md +0 -0
  52. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/ci.md +0 -0
  53. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/ffmpeg-keyframes.md +0 -0
  54. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/findings/a-fitted-delay-table-never-reached-the-shaper.md +0 -0
  55. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/findings/a-shorter-group-does-not-lose-fewer-key-frames.md +0 -0
  56. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/findings/a-transport-element-doubles-every-fastdds-sample.md +0 -0
  57. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/findings/cyclone-fragment-equal-to-max-drops-fragmented-samples.md +0 -0
  58. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/findings/cyclone-spdp-discovery-bursts.md +0 -0
  59. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/findings/delay-alone-no-loss.md +0 -0
  60. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/findings/fastdds-datagram-cap-drops-large-samples.md +0 -0
  61. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/findings/graph-derived-types-block-a-non-graph-transport.md +0 -0
  62. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/findings/head-of-line-irregularity.md +0 -0
  63. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/findings/jitter-loss-bandwidth-latency.md +0 -0
  64. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/findings/keyframe-loss-kills-the-next-deltas.md +0 -0
  65. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/findings/lifespan-is-enforced-by-one-reader-and-not-the-other.md +0 -0
  66. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/findings/lighter-message-loss.md +0 -0
  67. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/findings/neither-a-queue-nor-a-burst-tilts-the-size-law.md +0 -0
  68. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/findings/one-domain-two-cyclone-configs-stop-interoperating.md +0 -0
  69. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/findings/oversubscription-queues-not-losses.md +0 -0
  70. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/findings/reorder-becomes-reader-loss.md +0 -0
  71. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/findings/repro/decode_chain_repro.py +0 -0
  72. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/findings/repro/reorder_drop_repro.py +0 -0
  73. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/findings/sender-rows-make-a-dead-link-look-loss-free.md +0 -0
  74. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/findings/zero-loss-boundaries-18kb-20hz.md +0 -0
  75. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/forensics-report.md +0 -0
  76. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/geo-link-map.md +0 -0
  77. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/github-repository-settings.md +0 -0
  78. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/link-bandwidth.md +0 -0
  79. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/link-trace.md +0 -0
  80. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/ota-pcap.md +0 -0
  81. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/owner-runbook.md +0 -0
  82. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/performance-bands.md +0 -0
  83. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/playbooks/README.md +0 -0
  84. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/quality-model.md +0 -0
  85. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/release-notes/TEMPLATE.md +0 -0
  86. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/release-notes/v2.1.md +0 -0
  87. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/release-notes/v2.2.md +0 -0
  88. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/release-notes/v2.3.md +0 -0
  89. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/release-notes/v2.4.md +0 -0
  90. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/release.md +0 -0
  91. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/rfcs/0001-expectation-driven-test-suite.md +0 -0
  92. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/rfcs/0002-expectation-concepts.md +0 -0
  93. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/rfcs/0003-metric-backbone.md +0 -0
  94. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/rfcs/0004-network-profiles.md +0 -0
  95. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/rfcs/0005-benchmark-genres-and-ci.md +0 -0
  96. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/rfcs/0006-dynamic-qos.md +0 -0
  97. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/rfcs/0007-regression-gate.md +0 -0
  98. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/rfcs/README.md +0 -0
  99. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/testing.md +0 -0
  100. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/docs/work-items.md +0 -0
  101. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/install.sh +0 -0
  102. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/justfile +0 -0
  103. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/media/control_center.png +0 -0
  104. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/media/echo_test.png +0 -0
  105. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/media/forensics-report-example.png +0 -0
  106. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/media/host.png +0 -0
  107. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/media/vehicle.png +0 -0
  108. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/pyproject.toml +0 -0
  109. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/requirements.txt +0 -0
  110. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/rosotacom.yaml +0 -0
  111. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/session-configuration.md +0 -0
  112. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/setup.cfg +0 -0
  113. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/__init__.py +0 -0
  114. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/__main__.py +0 -0
  115. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/anonymize.py +0 -0
  116. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/bag_ground_truth.py +0 -0
  117. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/benched_set.py +0 -0
  118. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/benchmark.py +0 -0
  119. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/benchmark_delta.py +0 -0
  120. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/bundle_check.py +0 -0
  121. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/cli.py +0 -0
  122. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/cli_benchmark.py +0 -0
  123. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/deployment.py +0 -0
  124. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/ffmpeg_packet.py +0 -0
  125. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/forensics.py +0 -0
  126. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/geomap.py +0 -0
  127. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/image_cache.py +0 -0
  128. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/netem_dist.py +0 -0
  129. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/network_preflight.py +0 -0
  130. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/network_profiles.py +0 -0
  131. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/network_shaper.py +0 -0
  132. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/plots.py +0 -0
  133. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/py.typed +0 -0
  134. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/benched-set.yaml +0 -0
  135. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/.gitignore +0 -0
  136. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/README.md +0 -0
  137. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/__init__.py +0 -0
  138. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/bags/8_drop_reference/metadata.yaml +0 -0
  139. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/deployment.example.yaml +0 -0
  140. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/dist/field-20260817.dist +0 -0
  141. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/profiles.yaml +0 -0
  142. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/ros2docker.json +0 -0
  143. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/ros2docker.lyrical.json +0 -0
  144. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/rosotacom.yaml +0 -0
  145. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scenarios/2_native_chatter/scenario-definition.yaml +0 -0
  146. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/1_heartbeat/run_machine_a.sh +0 -0
  147. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/1_heartbeat/run_machine_b.sh +0 -0
  148. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/external.lyrical.ros2docker.json +0 -0
  149. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/external.ros2docker.json +0 -0
  150. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/run_communication.sh +0 -0
  151. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/run_external.py +0 -0
  152. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/wait_for_echo_topic.sh +0 -0
  153. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/external.lyrical.ros2docker.json +0 -0
  154. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/external.ros2docker.json +0 -0
  155. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/run_communication.sh +0 -0
  156. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/run_external.py +0 -0
  157. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/external.ros2docker.json +0 -0
  158. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/external_session.yaml +0 -0
  159. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/foxglove.json +0 -0
  160. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/run_communication.sh +0 -0
  161. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/run_external.py +0 -0
  162. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/costmap_1second/costmap_1second_0.mcap +0 -0
  163. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/costmap_1second/metadata.yaml +0 -0
  164. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/external.ros2docker.json +0 -0
  165. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/run_communication.sh +0 -0
  166. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/run_external.py +0 -0
  167. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/external.ros2docker.json +0 -0
  168. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/external_session.yaml +0 -0
  169. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/foxglove.json +0 -0
  170. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/run_communication.sh +0 -0
  171. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/run_external.py +0 -0
  172. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/costmap_1second/costmap_1second_0.mcap +0 -0
  173. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/costmap_1second/metadata.yaml +0 -0
  174. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/external.ros2docker.json +0 -0
  175. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/run_communication.sh +0 -0
  176. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/run_external.py +0 -0
  177. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/external.ros2docker.json +0 -0
  178. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/external_session.yaml +0 -0
  179. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/run_communication.sh +0 -0
  180. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/run_external.py +0 -0
  181. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/external.ros2docker.json +0 -0
  182. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/external_session.yaml +0 -0
  183. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/run_communication.sh +0 -0
  184. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/run_external.py +0 -0
  185. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/external.ros2docker.json +0 -0
  186. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/external_session.yaml +0 -0
  187. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/run_communication.sh +0 -0
  188. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/run_external.py +0 -0
  189. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/external.ros2docker.json +0 -0
  190. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/external_session.yaml +0 -0
  191. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/run_communication.sh +0 -0
  192. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/run_external.py +0 -0
  193. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/sessions/10_restamp/session-definition.yaml +0 -0
  194. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/sessions/11_trickle/session-definition.yaml +0 -0
  195. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/sessions/12_content_integrity/session-definition.yaml +0 -0
  196. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/sessions/13_link_latency/session-definition.yaml +0 -0
  197. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/sessions/14_remote_assist_anonymized/session-definition.yaml +0 -0
  198. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/sessions/15_remote_assist_anonymized_costmap/session-definition.yaml +0 -0
  199. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/sessions/16_remote_assist_anonymized_camera/session-definition.yaml +0 -0
  200. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/sessions/17_synthetic_camera_quality/session-definition.yaml +0 -0
  201. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/sessions/1_heartbeat/session-definition.yaml +0 -0
  202. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/sessions/1_heartbeat_status/session-definition.yaml +0 -0
  203. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/sessions/2_native_chatter/session-definition.yaml +0 -0
  204. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/sessions/3_comp_occ_grid/session-definition.yaml +0 -0
  205. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/sessions/4_comp_occ_grid_zen/session-definition.yaml +0 -0
  206. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/sessions/5_sized_payload/session-definition.yaml +0 -0
  207. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/sessions/6_sized_payload_zen/session-definition.yaml +0 -0
  208. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/sessions/7_latched_static/session-definition.yaml +0 -0
  209. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/sessions/8_drop/session-definition.yaml +0 -0
  210. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/sessions/9_throttle/session-definition.yaml +0 -0
  211. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/sessions/bench_1_1_capacity/session-definition.yaml +0 -0
  212. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/sessions/bench_1_2_load_sweep/session-definition.yaml +0 -0
  213. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/sessions/bench_1_3_ramp/session-definition.yaml +0 -0
  214. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/sessions/bench_1_4_recovery/session-definition.yaml +0 -0
  215. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/examples/sessions/bench_1_5_camera/session-definition.yaml +0 -0
  216. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ros2docker.json.example +0 -0
  217. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ros2docker.lyrical.json.example +0 -0
  218. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/.vscode/c_cpp_properties.json +0 -0
  219. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/.vscode/settings.json +0 -0
  220. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_easy_mode.xml.template +0 -0
  221. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_initial_peer_list.xml.template +0 -0
  222. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v2.xml.template +0 -0
  223. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v3.xml.template +0 -0
  224. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v4.xml.template +0 -0
  225. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v5.xml.template +0 -0
  226. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ota_configs/create_zenoh_json5.py +0 -0
  227. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ota_configs/cyclonedds_local_participants.xml.template +0 -0
  228. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ota_configs/cyclonedds_minimal.xml.template +0 -0
  229. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ota_configs/cyclonedds_scoped.xml.template +0 -0
  230. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ota_configs/cyclonedds_tuned.xml.template +0 -0
  231. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ota_configs/fastdds_easy_mode.xml.template +0 -0
  232. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ota_configs/fastdds_local.xml.template +0 -0
  233. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ota_configs/fastdds_tuned.xml.template +0 -0
  234. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ota_configs/fastdds_unicast.xml.template +0 -0
  235. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ota_configs/get_ota_xml.py +0 -0
  236. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ota_configs/utils.py +0 -0
  237. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ota_configs/zenoh.json5.template +0 -0
  238. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/.gitkeep +0 -0
  239. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_cpp/CMakeLists.txt +0 -0
  240. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_cpp/COLCON_IGNORE +0 -0
  241. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_cpp/LICENSE.txt +0 -0
  242. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_cpp/package.xml +0 -0
  243. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_cpp/src/hz_monitor.cpp +0 -0
  244. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_cpp/src/universal_compressor.cpp +0 -0
  245. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_cpp/src/universal_decompressor.cpp +0 -0
  246. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_msgs/CMakeLists.txt +0 -0
  247. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_msgs/LICENSE.txt +0 -0
  248. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/CompressedData.msg +0 -0
  249. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/EchoHeartbeat.msg +0 -0
  250. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/OtaStamped.msg +0 -0
  251. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/SizedPayload.msg +0 -0
  252. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_msgs/package.xml +0 -0
  253. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/LICENSE.txt +0 -0
  254. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/__init__.py +0 -0
  255. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/base_bridge_relay.py +0 -0
  256. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/bridge_in.py +0 -0
  257. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/bridge_out.py +0 -0
  258. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/ffmpeg_flags.py +0 -0
  259. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/heartbeat_echo.py +0 -0
  260. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/hz_monitor.py +0 -0
  261. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/image_bandwidth_reducer.py +0 -0
  262. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/image_pixel_capper.py +0 -0
  263. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/lanelet_saver.py +0 -0
  264. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/latch_relay.py +0 -0
  265. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/costmap_remapper.py +0 -0
  266. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/marker_remapper.py +0 -0
  267. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/speed_test.py +0 -0
  268. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/tf_remapper.py +0 -0
  269. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/traffic_monitor.py +0 -0
  270. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/wifi_network_analysis_1.py +0 -0
  271. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/link_bytes.py +0 -0
  272. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/link_trace.py +0 -0
  273. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/local_global_frame_bridge.py +0 -0
  274. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/localization_map_split_reduce_saver.py +0 -0
  275. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/msg_transform.py +0 -0
  276. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/ota_pcap.py +0 -0
  277. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/pair_management.py +0 -0
  278. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/playout_pacer.py +0 -0
  279. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/playout_pacer_core.py +0 -0
  280. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/pub_sub_pair.py +0 -0
  281. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/qos.py +0 -0
  282. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/relay_in.py +0 -0
  283. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/relay_out.py +0 -0
  284. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/restamp.py +0 -0
  285. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/sized_publisher.py +0 -0
  286. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/stage_latency.py +0 -0
  287. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/stage_latency_core.py +0 -0
  288. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/status_overview.py +0 -0
  289. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/status_overview_core.py +0 -0
  290. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/tf_map_to_cart_saver.py +0 -0
  291. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/topic_monitor.py +0 -0
  292. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/topic_resolution.py +0 -0
  293. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/trickle.py +0 -0
  294. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_compressor.py +0 -0
  295. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_decompressor.py +0 -0
  296. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_ota_unwrapper.py +0 -0
  297. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_ota_wrapper.py +0 -0
  298. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/package.xml +0 -0
  299. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/resource/com_py +0 -0
  300. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/setup.cfg +0 -0
  301. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/setup.py +0 -0
  302. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/test/test_copyright.py +0 -0
  303. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/test/test_flake8.py +0 -0
  304. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/ros2src/com_py/test/test_pep257.py +0 -0
  305. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/session/content/base/session_plugin_base.yaml +0 -0
  306. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/session/content/network/up_connectivity.py +0 -0
  307. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/session/content/network/wifi_network_analysis_2.py +0 -0
  308. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/session/creation/anonymize_bag.py +0 -0
  309. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/session/creation/catmux_log_setup.sh +0 -0
  310. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/session/creation/create_session_yaml.py +0 -0
  311. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/session/creation/generate_session_files.py +0 -0
  312. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/session/creation/run_session.py +0 -0
  313. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/session/creation/run_session_in_external_terminal.py +0 -0
  314. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/resources/ws/session/creation/strip_ansi.py +0 -0
  315. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/status_eval.py +0 -0
  316. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/stream_stats.py +0 -0
  317. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/trace_profiles.py +0 -0
  318. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/transit.py +0 -0
  319. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom/video_quality.py +0 -0
  320. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom_dev.egg-info/dependency_links.txt +0 -0
  321. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom_dev.egg-info/entry_points.txt +0 -0
  322. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom_dev.egg-info/requires.txt +0 -0
  323. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/src/rosotacom_dev.egg-info/top_level.txt +0 -0
  324. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/terminology.md +0 -0
  325. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/contract/test_benched_set_registry.py +0 -0
  326. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/contract/test_findings.py +0 -0
  327. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/contract/test_generated_topics_have_a_producer.py +0 -0
  328. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/contract/test_lyrical_runtime_compat.py +0 -0
  329. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/contract/test_markdown_links.py +0 -0
  330. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/contract/test_ota_source_bundle.py +0 -0
  331. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/contract/test_package_metadata.py +0 -0
  332. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/contract/test_packaged_resources.py +0 -0
  333. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/contract/test_profile_covers_generated_commands.py +0 -0
  334. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/contract/test_pytest_policy.py +0 -0
  335. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/contract/test_readme_examples.py +0 -0
  336. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/contract/test_security_maintenance_config.py +0 -0
  337. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/contract/test_session_configuration_doc.py +0 -0
  338. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/contract/test_session_template_substitution.py +0 -0
  339. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/contract/test_workflow_contracts.py +0 -0
  340. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/e2e/conftest.py +0 -0
  341. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/e2e/test_anonymize_e2e.py +0 -0
  342. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/e2e/test_benchmark_ab.py +0 -0
  343. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/e2e/test_benchmark_capacity.py +0 -0
  344. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/e2e/test_benchmark_replay.py +0 -0
  345. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/e2e/test_parallel_smoke.py +0 -0
  346. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/e2e/test_smoke.py +0 -0
  347. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/e2e/test_timeline_stepping.py +0 -0
  348. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/e2e/test_video_quality_e2e.py +0 -0
  349. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/sessions/generate_rmw_matrix.py +0 -0
  350. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-local_zenoh-ros2dds-ota/session-definition.yaml +0 -0
  351. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-ota/session-definition.yaml +0 -0
  352. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-ota-tuned/session-definition.yaml +0 -0
  353. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/sessions/rmw_matrix/1_heartbeat_fastdds/session-definition.yaml +0 -0
  354. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/sessions/rmw_matrix/1_heartbeat_fastdds-default/session-definition.yaml +0 -0
  355. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/sessions/rmw_matrix/1_heartbeat_zen-endpoints/session-definition.yaml +0 -0
  356. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_anonymize.py +0 -0
  357. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_bag_ground_truth.py +0 -0
  358. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_benched_set.py +0 -0
  359. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_benchmark.py +0 -0
  360. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_benchmark_delta.py +0 -0
  361. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_bundle_check.py +0 -0
  362. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_catmux_pane_logging.py +0 -0
  363. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_cli.py +0 -0
  364. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_cli_benchmark.py +0 -0
  365. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_concurrency.py +0 -0
  366. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_container_shaping.py +0 -0
  367. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_deployment.py +0 -0
  368. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_ffmpeg_flags.py +0 -0
  369. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_ffmpeg_packet.py +0 -0
  370. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_field_profiles.py +0 -0
  371. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_forensics.py +0 -0
  372. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_geomap.py +0 -0
  373. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_image_cache.py +0 -0
  374. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_link_bytes.py +0 -0
  375. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_link_trace.py +0 -0
  376. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_netem_dist.py +0 -0
  377. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_network_preflight.py +0 -0
  378. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_network_profiles.py +0 -0
  379. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_network_shaper.py +0 -0
  380. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_ota_benchmark_peer_exec.py +0 -0
  381. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_ota_link_configs.py +0 -0
  382. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_ota_pcap.py +0 -0
  383. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_ota_unwrapper.py +0 -0
  384. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_ota_wrapper.py +0 -0
  385. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_ota_xml.py +0 -0
  386. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_playout_pacer.py +0 -0
  387. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_plots.py +0 -0
  388. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_pub_sub_pair_types.py +0 -0
  389. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_qos_fallback_logging.py +0 -0
  390. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_relay_optional_parameters.py +0 -0
  391. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_ros_node_entity_ownership.py +0 -0
  392. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_session_pipeline.py +0 -0
  393. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_stage_latency.py +0 -0
  394. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_status_eval.py +0 -0
  395. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_status_overview.py +0 -0
  396. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_status_overview_observer.py +0 -0
  397. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_stream_stats.py +0 -0
  398. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_terminology_stage_ownership.py +0 -0
  399. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_trace_profiles.py +0 -0
  400. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/tests/unit/test_transit.py +0 -0
  401. {rosotacom_dev-2.5.dev79 → rosotacom_dev-2.5.dev81}/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.dev79
3
+ Version: 2.5.dev81
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.
@@ -41,12 +41,15 @@ its largest message class* carries that scope with it.
41
41
 
42
42
  - Host pair / topology: one host, the packaged local benchmark rig — two
43
43
  communication containers on their own Docker network, `tc` inside each
44
- container's own netns (`--sudo-mode container`), no host privileges.
44
+ container's own netns (`--sudo-mode container`), no host privileges. The
45
+ confirmation ladder runs the same session across two machines joined by a
46
+ point-to-point VPN, each shaping its own tunnel device, with the control
47
+ plane on a separate interface so the profile never touches it.
45
48
  - Session: `bench_1_1_capacity` from the packaged example project, one
46
49
  `a->b:/bench_capacity` stream at 10 Hz, OTA QoS best_effort / KEEP_LAST
47
50
  depth 1, `--rmw` the only thing that differs between the three ladders.
48
- - rosotacom SHA: measured at `7bb420c`; re-runs record theirs. The runs need
49
- 2.5.dev74 or later, because before it a profile carrying a fitted delay table
51
+ - rosotacom SHA: measured at `7bb420c` on one host and `b3c573d` across two;
52
+ re-runs record theirs. The one-host runs need 2.5.dev74 or later, because before it a profile carrying a fitted delay table
50
53
  could not be armed at all
51
54
  ([a fitted delay table never reached the shaper](a-fitted-delay-table-never-reached-the-shaper.md)).
52
55
  - Profile: `tilt-iid` in
@@ -90,6 +93,22 @@ zenoh native on the identical profile: 0.571, 0.998, 0.712, 0.996, 0.475,
90
93
  **61.693 %**. No fit is reported because there is nothing of this family to
91
94
  fit — five points are flat and the sixth is a cliff.
92
95
 
96
+ **The CycloneDDS ladder is not an artefact of two containers on one host.**
97
+ Repeated across two machines over a point-to-point VPN — different NICs, a real
98
+ clock offset, the shaping on each host's own tunnel device rather than on a
99
+ docker bridge — it reproduces:
100
+
101
+ | payload | wrapped | one host | two hosts | ratio |
102
+ |---:|---:|---:|---:|---:|
103
+ | 200 B | 300 B | 1.047 % | 0.952 % | 0.91 |
104
+ | 3 kB | 3.1 kB | 3.468 % | 3.465 % | 1.00 |
105
+ | 12 kB | 12.1 kB | 11.227 % | 12.149 % | 1.08 |
106
+ | 38 kB | 38.1 kB | 31.922 % | 31.773 % | 1.00 |
107
+
108
+ The two extremes agree to within half a per cent and the worst point to within
109
+ eight. What the second host adds — serialisation on a real interface, a clock
110
+ that is not shared, a tunnel MTU — does not move the transfer function.
111
+
93
112
  **The effective packet is smaller than the fragment, and by a measurable
94
113
  amount.** CycloneDDS's fitted `F` lands at 872–1008 B against a configured
95
114
  1024 B fragment, i.e. every packet carries roughly 15 % of itself in headers.
@@ -116,6 +135,13 @@ rows) rather than from `result.json`. The CycloneDDS ladder must fit one
116
135
  `(p, F)` to within about ten per cent at every point; the zenoh ladder must be
117
136
  flat below 12 kB.
118
137
 
138
+ Across two machines the same ladder runs through `ota-benchmark probe` with
139
+ `--install-mode checkout` and a `--peer-exec` transport on each peer. It needs
140
+ 2.5.dev78 or later: before it the profile's impaired leg landed on the peer the
141
+ a/b convention calls the sender rather than the one the session's topic map
142
+ does, the benchmark's load never reached the peers' publishers, and the
143
+ collection looked for their artifacts in a directory the project does not use.
144
+
119
145
  ## Status
120
146
 
121
147
  confirmed, 2026-08-31.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rosotacom-dev
3
- Version: 2.5.dev79
3
+ Version: 2.5.dev81
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": 81,
4
+ "node": "g1d38e8a9bd4fb5e3c9a20c0a1603c365996cc296",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-09-01"
8
+ }
@@ -1,8 +0,0 @@
1
- {
2
- "tag": "2.4",
3
- "distance": 79,
4
- "node": "gb3c573d7bb5a6a2c6fffffe10d8be77e86c4d624",
5
- "dirty": false,
6
- "branch": "HEAD",
7
- "node_date": "2026-08-31"
8
- }