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.
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/PKG-INFO +1 -1
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/README.md +1 -0
- rosotacom_dev-2.5.dev82/docs/findings/queueing-adds-delay-not-loss.md +122 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/cli.py +33 -1
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom_dev.egg-info/PKG-INFO +1 -1
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom_dev.egg-info/SOURCES.txt +1 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom_dev.egg-info/scm_file_list.json +1 -0
- rosotacom_dev-2.5.dev82/src/rosotacom_dev.egg-info/scm_version.json +8 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_cli.py +26 -0
- rosotacom_dev-2.5.dev80/src/rosotacom_dev.egg-info/scm_version.json +0 -8
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.devcontainer/devcontainer.json.template +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.devcontainer/re_generate_devcontainer_json.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/CODEOWNERS +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/ISSUE_TEMPLATE/documentation-audit.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/ISSUE_TEMPLATE/implementation-cleanup.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/ISSUE_TEMPLATE/quality-workflow.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/ISSUE_TEMPLATE/redesign.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/ISSUE_TEMPLATE/release-process.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/ISSUE_TEMPLATE/repository-diagnosis.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/ISSUE_TEMPLATE/test-ci-audit.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/ISSUE_TEMPLATE/work-item.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/actions/setup-just/action.yml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/dependabot.yml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/workflows/benchmark-calibrate.yml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/workflows/benchmark-gate.yml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/workflows/dev-release.yml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/workflows/image-scan.yml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/workflows/nightly-e2e.yml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/workflows/pr-lightweight.yml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/workflows/pr-merge-gate.yml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/workflows/release.yml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.pre-commit-config.yaml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/AGENTS.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/CONCURRENCY.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/CONTRIBUTING.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/DEVELOPMENT_PRINCIPLES.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/LICENSE.txt +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/MANIFEST.in +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/README.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/budgets.jsonl +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/calibration/README.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/calibration/capacity-size-tight-cyclone.json +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/calibration/probe-loss-gop-tight-cyclone.json +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/calibration/probe-loss-nominal-cyclone.json +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/calibration/probe-loss-tight-cyclone.json +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/calibration/probe-loss-tight-fastdds.json +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/calibration/probe-loss-tight-zenoh.json +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/codecov.yml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/deployment-configuration.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/benchmark-ab.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/benchmark-bag-as-load.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/ci.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/ffmpeg-keyframes.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/a-fitted-delay-table-never-reached-the-shaper.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/a-shorter-group-does-not-lose-fewer-key-frames.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/a-transport-element-doubles-every-fastdds-sample.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/cyclone-fragment-equal-to-max-drops-fragmented-samples.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/cyclone-spdp-discovery-bursts.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/delay-alone-no-loss.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/fastdds-datagram-cap-drops-large-samples.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/graph-derived-types-block-a-non-graph-transport.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/head-of-line-irregularity.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/jitter-loss-bandwidth-latency.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/keyframe-loss-kills-the-next-deltas.md +0 -0
- {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
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/lighter-message-loss.md +0 -0
- {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
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/one-domain-two-cyclone-configs-stop-interoperating.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/oversubscription-queues-not-losses.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/reorder-becomes-reader-loss.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/repro/decode_chain_repro.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/repro/reorder_drop_repro.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/sender-rows-make-a-dead-link-look-loss-free.md +0 -0
- {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
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/zero-loss-boundaries-18kb-20hz.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/forensics-report.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/geo-link-map.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/github-repository-settings.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/link-bandwidth.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/link-trace.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/ota-pcap.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/owner-runbook.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/performance-bands.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/playbooks/README.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/quality-model.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/release-notes/TEMPLATE.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/release-notes/v2.1.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/release-notes/v2.2.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/release-notes/v2.3.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/release-notes/v2.4.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/release.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/rfcs/0001-expectation-driven-test-suite.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/rfcs/0002-expectation-concepts.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/rfcs/0003-metric-backbone.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/rfcs/0004-network-profiles.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/rfcs/0005-benchmark-genres-and-ci.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/rfcs/0006-dynamic-qos.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/rfcs/0007-regression-gate.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/rfcs/README.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/testing.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/work-items.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/install.sh +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/justfile +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/media/control_center.png +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/media/echo_test.png +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/media/forensics-report-example.png +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/media/host.png +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/media/vehicle.png +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/pyproject.toml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/requirements.txt +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/rosotacom.yaml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/session-configuration.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/setup.cfg +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/__init__.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/__main__.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/anonymize.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/bag_ground_truth.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/benched_set.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/benchmark.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/benchmark_delta.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/bundle_check.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/cli_benchmark.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/deployment.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/ffmpeg_packet.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/forensics.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/geomap.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/image_cache.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/netem_dist.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/network_preflight.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/network_profiles.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/network_shaper.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/plots.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/py.typed +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/benched-set.yaml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/.gitignore +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/README.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/__init__.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/bags/8_drop_reference/metadata.yaml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/deployment.example.yaml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/dist/field-20260817.dist +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/profiles.yaml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/ros2docker.lyrical.json +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/rosotacom.yaml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scenarios/2_native_chatter/scenario-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/1_heartbeat/run_machine_a.sh +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/scripts/1_heartbeat/run_machine_b.sh +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/10_restamp/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/11_trickle/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/12_content_integrity/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/13_link_latency/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/14_remote_assist_anonymized/session-definition.yaml +0 -0
- {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
- {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
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/17_synthetic_camera_quality/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/1_heartbeat/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/1_heartbeat_status/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/2_native_chatter/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/3_comp_occ_grid/session-definition.yaml +0 -0
- {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
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/5_sized_payload/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/6_sized_payload_zen/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/7_latched_static/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/8_drop/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/9_throttle/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/bench_1_1_capacity/session-definition.yaml +0 -0
- {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
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/bench_1_3_ramp/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/bench_1_4_recovery/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/sessions/bench_1_5_camera/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ros2docker.json.example +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ros2docker.lyrical.json.example +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/.vscode/c_cpp_properties.json +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/.vscode/settings.json +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_easy_mode.xml.template +0 -0
- {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
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v2.xml.template +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v3.xml.template +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v4.xml.template +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v5.xml.template +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/create_zenoh_json5.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/cyclonedds_local_participants.xml.template +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/cyclonedds_minimal.xml.template +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/cyclonedds_scoped.xml.template +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/cyclonedds_tuned.xml.template +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/fastdds_easy_mode.xml.template +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/fastdds_local.xml.template +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/fastdds_tuned.xml.template +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/fastdds_unicast.xml.template +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/get_ota_xml.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/utils.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ota_configs/zenoh.json5.template +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/.gitkeep +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_cpp/CMakeLists.txt +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_cpp/COLCON_IGNORE +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_cpp/LICENSE.txt +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_cpp/package.xml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_cpp/src/hz_monitor.cpp +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_cpp/src/universal_compressor.cpp +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_cpp/src/universal_decompressor.cpp +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_msgs/CMakeLists.txt +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_msgs/LICENSE.txt +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/CompressedData.msg +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/EchoHeartbeat.msg +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/OtaStamped.msg +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/SizedPayload.msg +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_msgs/package.xml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/LICENSE.txt +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/__init__.py +0 -0
- {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
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/bridge_in.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/bridge_out.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/ffmpeg_flags.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/heartbeat_echo.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/hz_monitor.py +0 -0
- {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
- {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
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/lanelet_saver.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/latch_relay.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/link_bytes.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/link_trace.py +0 -0
- {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
- {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
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/msg_transform.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/ota_pcap.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/pair_management.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/playout_pacer.py +0 -0
- {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
- {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
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/qos.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/relay_in.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/relay_out.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/restamp.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/sized_publisher.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/stage_latency.py +0 -0
- {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
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/status_overview.py +0 -0
- {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
- {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
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/topic_monitor.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/topic_resolution.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/trickle.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_compressor.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_decompressor.py +0 -0
- {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
- {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
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/package.xml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/resource/com_py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/setup.cfg +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/setup.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/test/test_copyright.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/test/test_flake8.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/ros2src/com_py/test/test_pep257.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/session/content/base/session_plugin_base.yaml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/session/content/network/up_connectivity.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/session/content/network/wifi_network_analysis_2.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/session/creation/anonymize_bag.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/session/creation/catmux_log_setup.sh +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/session/creation/create_session_yaml.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/session/creation/generate_session_files.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/session/creation/run_session.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/session/creation/run_session_in_external_terminal.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/ws/session/creation/strip_ansi.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/status_eval.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/stream_stats.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/trace_profiles.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/transit.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/video_quality.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom_dev.egg-info/dependency_links.txt +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom_dev.egg-info/entry_points.txt +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom_dev.egg-info/requires.txt +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom_dev.egg-info/top_level.txt +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/terminology.md +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/contract/test_benched_set_registry.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/contract/test_findings.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/contract/test_generated_topics_have_a_producer.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/contract/test_lyrical_runtime_compat.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/contract/test_markdown_links.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/contract/test_ota_source_bundle.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/contract/test_package_metadata.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/contract/test_packaged_resources.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/contract/test_profile_covers_generated_commands.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/contract/test_pytest_policy.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/contract/test_readme_examples.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/contract/test_security_maintenance_config.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/contract/test_session_configuration_doc.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/contract/test_session_template_substitution.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/contract/test_workflow_contracts.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/e2e/conftest.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/e2e/test_anonymize_e2e.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/e2e/test_benchmark_ab.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/e2e/test_benchmark_capacity.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/e2e/test_benchmark_replay.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/e2e/test_parallel_smoke.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/e2e/test_smoke.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/e2e/test_timeline_stepping.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/e2e/test_video_quality_e2e.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/sessions/generate_rmw_matrix.py +0 -0
- {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
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-ota/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-ota-tuned/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/sessions/rmw_matrix/1_heartbeat_fastdds/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/sessions/rmw_matrix/1_heartbeat_fastdds-default/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/sessions/rmw_matrix/1_heartbeat_zen-endpoints/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_anonymize.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_bag_ground_truth.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_benched_set.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_benchmark.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_benchmark_delta.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_bundle_check.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_catmux_pane_logging.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_cli_benchmark.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_concurrency.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_container_shaping.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_deployment.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_ffmpeg_flags.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_ffmpeg_packet.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_field_profiles.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_forensics.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_geomap.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_image_cache.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_link_bytes.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_link_trace.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_netem_dist.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_network_preflight.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_network_profiles.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_network_shaper.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_ota_benchmark_peer_exec.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_ota_link_configs.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_ota_pcap.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_ota_unwrapper.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_ota_wrapper.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_ota_xml.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_playout_pacer.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_plots.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_pub_sub_pair_types.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_qos_fallback_logging.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_relay_optional_parameters.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_ros_node_entity_ownership.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_session_pipeline.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_stage_latency.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_status_eval.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_status_overview.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_status_overview_observer.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_stream_stats.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_terminology_stage_ownership.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_trace_profiles.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_transit.py +0 -0
- {rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/tests/unit/test_video_quality.py +0 -0
|
@@ -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",
|
|
@@ -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
|
{rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom_dev.egg-info/scm_file_list.json
RENAMED
|
@@ -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",
|
|
@@ -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" —
|
{rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.devcontainer/devcontainer.json.template
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.devcontainer/re_generate_devcontainer_json.py
RENAMED
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/ISSUE_TEMPLATE/documentation-audit.md
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/ISSUE_TEMPLATE/implementation-cleanup.md
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/ISSUE_TEMPLATE/quality-workflow.md
RENAMED
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/ISSUE_TEMPLATE/release-process.md
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/ISSUE_TEMPLATE/repository-diagnosis.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/.github/workflows/benchmark-calibrate.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/calibration/capacity-size-tight-cyclone.json
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/calibration/probe-loss-gop-tight-cyclone.json
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/calibration/probe-loss-nominal-cyclone.json
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/calibration/probe-loss-tight-cyclone.json
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/calibration/probe-loss-tight-fastdds.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/cyclone-spdp-discovery-bursts.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/head-of-line-irregularity.md
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/jitter-loss-bandwidth-latency.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/reorder-becomes-reader-loss.md
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/repro/decode_chain_repro.py
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/repro/reorder_drop_repro.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/findings/zero-loss-boundaries-18kb-20hz.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/rfcs/0001-expectation-driven-test-suite.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/docs/rfcs/0005-benchmark-genres-and-ci.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/benched-set.yaml
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/.gitignore
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev80 → rosotacom_dev-2.5.dev82}/src/rosotacom/resources/examples/README.md
RENAMED
|
File without changes
|