rosotacom-dev 2.5.dev3__tar.gz → 2.5.dev5__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.dev3 → rosotacom_dev-2.5.dev5}/PKG-INFO +1 -1
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/cli.py +29 -2
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/session/content/base/session_plugin_base.yaml +5 -5
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom_dev.egg-info/PKG-INFO +1 -1
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom_dev.egg-info/scm_version.json +2 -2
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/unit/test_cli.py +48 -2
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/unit/test_concurrency.py +1 -1
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/.devcontainer/devcontainer.json.template +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/.devcontainer/re_generate_devcontainer_json.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/.github/CODEOWNERS +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/.github/ISSUE_TEMPLATE/documentation-audit.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/.github/ISSUE_TEMPLATE/implementation-cleanup.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/.github/ISSUE_TEMPLATE/quality-workflow.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/.github/ISSUE_TEMPLATE/redesign.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/.github/ISSUE_TEMPLATE/release-process.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/.github/ISSUE_TEMPLATE/repository-diagnosis.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/.github/ISSUE_TEMPLATE/test-ci-audit.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/.github/ISSUE_TEMPLATE/work-item.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/.github/dependabot.yml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/.github/workflows/benchmark-calibrate.yml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/.github/workflows/benchmark-gate.yml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/.github/workflows/dev-release.yml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/.github/workflows/image-scan.yml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/.github/workflows/nightly-e2e.yml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/.github/workflows/pr-lightweight.yml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/.github/workflows/pr-merge-gate.yml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/.github/workflows/release.yml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/.pre-commit-config.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/AGENTS.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/CONCURRENCY.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/CONTRIBUTING.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/DEVELOPMENT_PRINCIPLES.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/LICENSE.txt +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/MANIFEST.in +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/README.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/budgets.jsonl +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/calibration/README.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/calibration/capacity-size-tight-cyclone.json +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/calibration/probe-loss-gop-tight-cyclone.json +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/calibration/probe-loss-nominal-cyclone.json +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/calibration/probe-loss-tight-cyclone.json +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/calibration/probe-loss-tight-fastdds.json +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/calibration/probe-loss-tight-zenoh.json +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/codecov.yml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/deployment-configuration.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/benchmark-ab.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/benchmark-bag-as-load.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/ci.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/ffmpeg-keyframes.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/findings/README.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/findings/cyclone-spdp-discovery-bursts.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/findings/delay-alone-no-loss.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/findings/head-of-line-irregularity.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/findings/jitter-loss-bandwidth-latency.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/findings/lighter-message-loss.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/findings/zero-loss-boundaries-18kb-20hz.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/forensics-report.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/geo-link-map.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/github-repository-settings.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/link-trace.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/owner-runbook.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/performance-bands.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/playbooks/README.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/quality-model.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/release-notes/TEMPLATE.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/release-notes/v2.1.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/release-notes/v2.2.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/release-notes/v2.3.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/release-notes/v2.4.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/release.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/rfcs/0001-expectation-driven-test-suite.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/rfcs/0002-expectation-concepts.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/rfcs/0003-metric-backbone.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/rfcs/0004-network-profiles.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/rfcs/0005-benchmark-genres-and-ci.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/rfcs/0006-dynamic-qos.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/rfcs/0007-regression-gate.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/rfcs/README.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/testing.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/work-items.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/install.sh +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/justfile +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/media/control_center.png +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/media/echo_test.png +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/media/forensics-report-example.png +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/media/host.png +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/media/vehicle.png +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/pyproject.toml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/requirements.txt +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/rosotacom.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/run_session_in_container.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/session-configuration.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/setup.cfg +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/__init__.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/__main__.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/anonymize.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/bag_ground_truth.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/benched_set.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/benchmark.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/bundle_check.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/cli_benchmark.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/deployment.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/ffmpeg_packet.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/forensics.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/geomap.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/network_profiles.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/network_shaper.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/plots.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/py.typed +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/benched-set.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/.gitignore +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/README.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/__init__.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/bags/8_drop_reference/metadata.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/deployment.example.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/profiles.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/rosotacom.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scenarios/2_native_chatter/scenario-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/1_heartbeat/run_machine_a.sh +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/1_heartbeat/run_machine_b.sh +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/run_external.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/wait_for_echo_topic.sh +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/run_external.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/external_session.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/foxglove.json +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/run_external.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/costmap_1second/costmap_1second_0.mcap +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/costmap_1second/metadata.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/run_external.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/external_session.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/foxglove.json +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/run_external.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/costmap_1second/costmap_1second_0.mcap +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/costmap_1second/metadata.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/run_external.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/external_session.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/run_external.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/external_session.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/run_external.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/external_session.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/run_external.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/external_session.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/run_external.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/sessions/10_restamp/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/sessions/11_trickle/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/sessions/12_content_integrity/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/sessions/13_link_latency/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/sessions/14_remote_assist_anonymized/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/sessions/15_remote_assist_anonymized_costmap/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/sessions/16_remote_assist_anonymized_camera/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/sessions/17_synthetic_camera_quality/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/sessions/1_heartbeat/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/sessions/1_heartbeat_status/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/sessions/2_native_chatter/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/sessions/3_comp_occ_grid/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/sessions/4_comp_occ_grid_zen/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/sessions/5_sized_payload/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/sessions/6_sized_payload_zen/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/sessions/7_latched_static/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/sessions/8_drop/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/sessions/9_throttle/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/sessions/bench_1_1_capacity/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/sessions/bench_1_2_load_sweep/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/sessions/bench_1_3_ramp/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/sessions/bench_1_4_recovery/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/sessions/bench_1_5_camera/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ros2docker.json.example +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/.vscode/c_cpp_properties.json +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/.vscode/settings.json +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_easy_mode.xml.template +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_initial_peer_list.xml.template +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v2.xml.template +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v3.xml.template +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v4.xml.template +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v5.xml.template +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ota_configs/create_zenoh_json5.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ota_configs/cyclonedds_minimal.xml.template +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ota_configs/cyclonedds_tuned.xml.template +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ota_configs/fastdds_unicast.xml.template +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ota_configs/get_ota_xml.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ota_configs/utils.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ota_configs/zenoh.json5.template +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/.gitkeep +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_cpp/CMakeLists.txt +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_cpp/COLCON_IGNORE +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_cpp/LICENSE.txt +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_cpp/package.xml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_cpp/src/hz_monitor.cpp +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_cpp/src/universal_compressor.cpp +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_cpp/src/universal_decompressor.cpp +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_msgs/CMakeLists.txt +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_msgs/LICENSE.txt +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/CompressedData.msg +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/EchoHeartbeat.msg +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/OtaStamped.msg +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/SizedPayload.msg +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_msgs/package.xml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/LICENSE.txt +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/__init__.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/base_bridge_relay.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/bridge_in.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/bridge_out.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/heartbeat_echo.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/hz_monitor.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/image_bandwidth_reducer.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/image_pixel_capper.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/lanelet_saver.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/latch_relay.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/costmap_remapper.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/marker_remapper.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/speed_test.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/tf_remapper.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/traffic_monitor.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/wifi_network_analysis_1.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/link_bytes.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/link_trace.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/local_global_frame_bridge.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/localization_map_split_reduce_saver.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/msg_transform.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/pair_management.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/pub_sub_pair.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/qos.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/relay_in.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/relay_out.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/restamp.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/sized_publisher.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/stage_latency.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/stage_latency_core.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/status_overview.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/status_overview_core.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/tf_map_to_cart_saver.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/topic_monitor.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/topic_resolution.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/trickle.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_compressor.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_decompressor.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_ota_unwrapper.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_ota_wrapper.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/package.xml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/resource/com_py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/setup.cfg +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/setup.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/test/test_copyright.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/test/test_flake8.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/ros2src/com_py/test/test_pep257.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/session/content/network/up_connectivity.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/session/content/network/wifi_network_analysis_2.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/session/creation/anonymize_bag.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/session/creation/catmux_log_setup.sh +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/session/creation/create_session_yaml.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/session/creation/generate_session_files.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/session/creation/run_session.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/session/creation/run_session_in_external_terminal.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/ws/session/creation/strip_ansi.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/status_eval.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/stream_stats.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/trace_profiles.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/transit.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/video_quality.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom_dev.egg-info/SOURCES.txt +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom_dev.egg-info/dependency_links.txt +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom_dev.egg-info/entry_points.txt +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom_dev.egg-info/requires.txt +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom_dev.egg-info/scm_file_list.json +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom_dev.egg-info/top_level.txt +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/stop_session_in_container.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/terminology.md +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/contract/test_benched_set_registry.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/contract/test_findings.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/contract/test_markdown_links.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/contract/test_ota_source_bundle.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/contract/test_package_metadata.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/contract/test_packaged_resources.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/contract/test_profile_covers_generated_commands.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/contract/test_pytest_policy.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/contract/test_readme_examples.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/contract/test_security_maintenance_config.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/contract/test_workflow_contracts.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/e2e/conftest.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/e2e/test_anonymize_e2e.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/e2e/test_benchmark_ab.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/e2e/test_benchmark_capacity.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/e2e/test_benchmark_replay.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/e2e/test_parallel_smoke.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/e2e/test_smoke.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/e2e/test_timeline_stepping.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/e2e/test_video_quality_e2e.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/sessions/generate_rmw_matrix.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-local_zenoh-ros2dds-ota/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-ota/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-ota-tuned/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/sessions/rmw_matrix/1_heartbeat_fastdds/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/sessions/rmw_matrix/1_heartbeat_zen-endpoints/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/unit/test_anonymize.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/unit/test_bag_ground_truth.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/unit/test_benched_set.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/unit/test_benchmark.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/unit/test_bundle_check.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/unit/test_cli_benchmark.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/unit/test_deployment.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/unit/test_ffmpeg_packet.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/unit/test_forensics.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/unit/test_geomap.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/unit/test_link_bytes.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/unit/test_link_trace.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/unit/test_network_profiles.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/unit/test_network_shaper.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/unit/test_ota_xml.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/unit/test_plots.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/unit/test_stage_latency.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/unit/test_status_eval.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/unit/test_status_overview.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/unit/test_stream_stats.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/unit/test_trace_profiles.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/unit/test_transit.py +0 -0
- {rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/tests/unit/test_video_quality.py +0 -0
|
@@ -4249,13 +4249,40 @@ def _create_scenario_tmux(
|
|
|
4249
4249
|
return session_name
|
|
4250
4250
|
|
|
4251
4251
|
|
|
4252
|
+
def _local_ipc_run_args(network_isolated: bool) -> list[str]:
|
|
4253
|
+
"""Share the host IPC namespace, unless the run is network-isolated.
|
|
4254
|
+
|
|
4255
|
+
A peer has to exchange local-domain data with application containers on the
|
|
4256
|
+
same machine — a replay, the control centre. With `--network host` but
|
|
4257
|
+
`ipc=private` each container has its own `/dev/shm`, FastDDS sees two
|
|
4258
|
+
participants on one host, negotiates shared memory, and writes into a
|
|
4259
|
+
segment the other side cannot map. Discovery goes over UDP and works;
|
|
4260
|
+
delivery goes over SHM and is dropped without a word.
|
|
4261
|
+
|
|
4262
|
+
The result is the worst shape a failure can take: the link comes up, the
|
|
4263
|
+
heartbeat crosses at 10 Hz with 0% loss, every pipeline reads `pub=1 sub=1`
|
|
4264
|
+
— and no payload ever enters it. Measured on 2026-08-09: 399 messages in
|
|
4265
|
+
eight seconds inside the publisher's container, 0 in the peer's.
|
|
4266
|
+
|
|
4267
|
+
The OTA path never showed it, because the generated unicast profile pins
|
|
4268
|
+
explicit locators and therefore forces UDP.
|
|
4269
|
+
|
|
4270
|
+
Not under `--network-name`. Sharing SHM there would let DDS bypass the very
|
|
4271
|
+
boundary the isolation exists to simulate, and a test that passes through a
|
|
4272
|
+
hole in its own isolation is worse than no test at all.
|
|
4273
|
+
"""
|
|
4274
|
+
return [] if network_isolated else ["--ipc", "host"]
|
|
4275
|
+
|
|
4276
|
+
|
|
4252
4277
|
def _base_extra_run_args(
|
|
4253
4278
|
runtime: RuntimeConfig,
|
|
4254
4279
|
session: ResolvedSession,
|
|
4255
4280
|
cfg: dict[str, Any],
|
|
4256
4281
|
instance: SessionInstance,
|
|
4282
|
+
*,
|
|
4283
|
+
network_isolated: bool = False,
|
|
4257
4284
|
) -> list[str]:
|
|
4258
|
-
args: list[str] =
|
|
4285
|
+
args: list[str] = _local_ipc_run_args(network_isolated)
|
|
4259
4286
|
ros2docker_cfg = load_config(runtime.ros2docker_config)
|
|
4260
4287
|
|
|
4261
4288
|
if not ros2docker_cfg.get("mount_ws"):
|
|
@@ -4425,7 +4452,7 @@ def start_session(args: argparse.Namespace) -> str:
|
|
|
4425
4452
|
" (or pass --force to replace it, --skip-conflict-check to ignore it).",
|
|
4426
4453
|
)
|
|
4427
4454
|
image_name = _scoped_image_name(runtime)
|
|
4428
|
-
extra_run_args = _base_extra_run_args(runtime, session, cfg, instance)
|
|
4455
|
+
extra_run_args = _base_extra_run_args(runtime, session, cfg, instance, network_isolated=network_isolated)
|
|
4429
4456
|
run_override: dict[str, object] = {}
|
|
4430
4457
|
network_name = getattr(args, "network_name", None)
|
|
4431
4458
|
if network_name:
|
|
@@ -243,7 +243,7 @@ common:
|
|
|
243
243
|
before_commands:
|
|
244
244
|
- if [ '${local_domain_id}' != "None" ] && [ -n '${local_domain_id}' ]; then export ROS_DOMAIN_ID='${local_domain_id}'; fi
|
|
245
245
|
- if [ '${rmw_local}' != "None" ]; then case ${rmw_local} in cyclone) export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp;; fastdds) export RMW_IMPLEMENTATION=rmw_fastrtps_cpp; export FASTDDS_BUILTIN_TRANSPORTS=${FASTDDS_BUILTIN_TRANSPORTS:-UDPv4};; zenoh) export RMW_IMPLEMENTATION=rmw_zenoh_cpp;; *) export RMW_IMPLEMENTATION='${rmw_local}';; esac; fi
|
|
246
|
-
- if [ '${local_config_template}' != "None" ] && [ -n '${local_config_template}' ]; then local_args=(--config "${local_config_template}" --host-ip "${ip_local}" --peer "${ip_remote}"); [ '${local_easy_mode_ip}' != "None" ] && [ -n '${local_easy_mode_ip}' ] && local_args+=(--easy-mode-ip "${local_easy_mode_ip}"); [ '${local_spdp_interval}' != "None" ] && [ -n '${local_spdp_interval}' ] && local_args+=(--spdp-interval "${local_spdp_interval}"); /ws/ota_configs/get_ota_xml.py "${local_args[@]}" > "${local_config_file}"; case ${rmw_local} in cyclone) export CYCLONEDDS_URI="file://${local_config_file}";; fastdds) export FASTDDS_DEFAULT_PROFILES_FILE="${local_config_file}"; export RMW_FASTRTPS_USE_QOS_FROM_XML=1;; esac; fi
|
|
246
|
+
- if [ '${local_config_template}' != "None" ] && [ -n '${local_config_template}' ]; then local_args=(--config "${local_config_template}" --host-ip "${ip_local}" --peer "${ip_remote}"); [ '${local_easy_mode_ip}' != "None" ] && [ -n '${local_easy_mode_ip}' ] && local_args+=(--easy-mode-ip "${local_easy_mode_ip}"); [ '${local_spdp_interval}' != "None" ] && [ -n '${local_spdp_interval}' ] && local_args+=(--spdp-interval "${local_spdp_interval}"); python3 /ws/ota_configs/get_ota_xml.py "${local_args[@]}" > "${local_config_file}"; case ${rmw_local} in cyclone) export CYCLONEDDS_URI="file://${local_config_file}";; fastdds) export FASTDDS_DEFAULT_PROFILES_FILE="${local_config_file}"; export RMW_FASTRTPS_USE_QOS_FROM_XML=1;; esac; fi
|
|
247
247
|
- if [ '${before_command}' != "None" ]; then ${before_command}; fi
|
|
248
248
|
|
|
249
249
|
windows:
|
|
@@ -254,7 +254,7 @@ windows:
|
|
|
254
254
|
- commands:
|
|
255
255
|
- if [ '${ota_domain_id}' != "None" ] && [ -n '${ota_domain_id}' ]; then export ROS_DOMAIN_ID='${ota_domain_id}'; fi
|
|
256
256
|
- export RUST_LOG=zenoh=debug,zenoh_bridge_ros2dds=debug
|
|
257
|
-
- /ws/ota_configs/create_zenoh_json5.py -m ${zen_mode} -e ${zen_endpoint_role} -t ${zen_transport} -i ${zen_main_ip} -r ${zen_main_port} -p ${zen_pub_allow} -s ${zen_sub_allow} -q '${zen_qos_pub}' -f ${zen_config_file}
|
|
257
|
+
- python3 /ws/ota_configs/create_zenoh_json5.py -m ${zen_mode} -e ${zen_endpoint_role} -t ${zen_transport} -i ${zen_main_ip} -r ${zen_main_port} -p ${zen_pub_allow} -s ${zen_sub_allow} -q '${zen_qos_pub}' -f ${zen_config_file}
|
|
258
258
|
- zenohd -c ${zen_config_file}
|
|
259
259
|
# Debugging commands:
|
|
260
260
|
# - zenohd -c ${zen_config_file} --rest-http-port 8000 2>&1 | tee ${zen_config_file}.log
|
|
@@ -277,7 +277,7 @@ windows:
|
|
|
277
277
|
if: use_domain_bridge
|
|
278
278
|
splits:
|
|
279
279
|
- commands:
|
|
280
|
-
- if [ '${ota_config_template}' != "None" ] && [ -n '${ota_config_template}' ]; then ota_args=(--config "${ota_config_template}" --host-ip "${ip_local}" --peer "${ip_remote}"); [ '${ota_easy_mode_ip}' != "None" ] && [ -n '${ota_easy_mode_ip}' ] && ota_args+=(--easy-mode-ip "${ota_easy_mode_ip}"); [ '${ota_spdp_interval}' != "None" ] && [ -n '${ota_spdp_interval}' ] && ota_args+=(--spdp-interval "${ota_spdp_interval}"); /ws/ota_configs/get_ota_xml.py "${ota_args[@]}" > "${ota_config_file}"; case ${rmw_ota} in cyclone) export CYCLONEDDS_URI="file://${ota_config_file}";; fastdds) export FASTDDS_DEFAULT_PROFILES_FILE="${ota_config_file}"; export RMW_FASTRTPS_USE_QOS_FROM_XML=1;; esac; fi
|
|
280
|
+
- if [ '${ota_config_template}' != "None" ] && [ -n '${ota_config_template}' ]; then ota_args=(--config "${ota_config_template}" --host-ip "${ip_local}" --peer "${ip_remote}"); [ '${ota_easy_mode_ip}' != "None" ] && [ -n '${ota_easy_mode_ip}' ] && ota_args+=(--easy-mode-ip "${ota_easy_mode_ip}"); [ '${ota_spdp_interval}' != "None" ] && [ -n '${ota_spdp_interval}' ] && ota_args+=(--spdp-interval "${ota_spdp_interval}"); python3 /ws/ota_configs/get_ota_xml.py "${ota_args[@]}" > "${ota_config_file}"; case ${rmw_ota} in cyclone) export CYCLONEDDS_URI="file://${ota_config_file}";; fastdds) export FASTDDS_DEFAULT_PROFILES_FILE="${ota_config_file}"; export RMW_FASTRTPS_USE_QOS_FROM_XML=1;; esac; fi
|
|
281
281
|
- ros2 run domain_bridge domain_bridge --wait-for-publisher false ${domain_bridge_config_file}
|
|
282
282
|
- name: IN
|
|
283
283
|
if: in
|
|
@@ -285,7 +285,7 @@ windows:
|
|
|
285
285
|
- commands:
|
|
286
286
|
- if [ '${ota_domain_id}' != "None" ] && [ -n '${ota_domain_id}' ]; then export ROS_DOMAIN_ID='${ota_domain_id}'; fi
|
|
287
287
|
- case ${rmw_ota} in cyclone) export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp;; fastdds) export RMW_IMPLEMENTATION=rmw_fastrtps_cpp; export FASTDDS_BUILTIN_TRANSPORTS=${FASTDDS_BUILTIN_TRANSPORTS:-UDPv4};; zenoh) export RMW_IMPLEMENTATION=rmw_zenoh_cpp;; esac
|
|
288
|
-
- if [ '${ota_config_template}' != "None" ] && [ -n '${ota_config_template}' ]; then ota_args=(--config "${ota_config_template}" --host-ip "${ip_local}" --peer "${ip_remote}"); [ '${ota_easy_mode_ip}' != "None" ] && [ -n '${ota_easy_mode_ip}' ] && ota_args+=(--easy-mode-ip "${ota_easy_mode_ip}"); [ '${ota_spdp_interval}' != "None" ] && [ -n '${ota_spdp_interval}' ] && ota_args+=(--spdp-interval "${ota_spdp_interval}"); /ws/ota_configs/get_ota_xml.py "${ota_args[@]}" > "${ota_config_file}"; case ${rmw_ota} in cyclone) export CYCLONEDDS_URI="file://${ota_config_file}";; fastdds) export FASTDDS_DEFAULT_PROFILES_FILE="${ota_config_file}"; export RMW_FASTRTPS_USE_QOS_FROM_XML=1;; esac; fi
|
|
288
|
+
- if [ '${ota_config_template}' != "None" ] && [ -n '${ota_config_template}' ]; then ota_args=(--config "${ota_config_template}" --host-ip "${ip_local}" --peer "${ip_remote}"); [ '${ota_easy_mode_ip}' != "None" ] && [ -n '${ota_easy_mode_ip}' ] && ota_args+=(--easy-mode-ip "${ota_easy_mode_ip}"); [ '${ota_spdp_interval}' != "None" ] && [ -n '${ota_spdp_interval}' ] && ota_args+=(--spdp-interval "${ota_spdp_interval}"); python3 /ws/ota_configs/get_ota_xml.py "${ota_args[@]}" > "${ota_config_file}"; case ${rmw_ota} in cyclone) export CYCLONEDDS_URI="file://${ota_config_file}";; fastdds) export FASTDDS_DEFAULT_PROFILES_FILE="${ota_config_file}"; export RMW_FASTRTPS_USE_QOS_FROM_XML=1;; esac; fi
|
|
289
289
|
# For zenoh_ros2dds the OTA domain is loopback-only (zenoh is the inter-host
|
|
290
290
|
# transport), so confine discovery to localhost instead of statically peering
|
|
291
291
|
# the remote host — otherwise the OTA-domain DDS double-delivers alongside zenoh.
|
|
@@ -310,7 +310,7 @@ windows:
|
|
|
310
310
|
- commands:
|
|
311
311
|
- if [ '${ota_domain_id}' != "None" ] && [ -n '${ota_domain_id}' ]; then export ROS_DOMAIN_ID='${ota_domain_id}'; fi
|
|
312
312
|
- case ${rmw_ota} in cyclone) export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp;; fastdds) export RMW_IMPLEMENTATION=rmw_fastrtps_cpp; export FASTDDS_BUILTIN_TRANSPORTS=${FASTDDS_BUILTIN_TRANSPORTS:-UDPv4};; zenoh) export RMW_IMPLEMENTATION=rmw_zenoh_cpp;; esac
|
|
313
|
-
- if [ '${ota_config_template}' != "None" ] && [ -n '${ota_config_template}' ]; then ota_args=(--config "${ota_config_template}" --host-ip "${ip_local}" --peer "${ip_remote}"); [ '${ota_easy_mode_ip}' != "None" ] && [ -n '${ota_easy_mode_ip}' ] && ota_args+=(--easy-mode-ip "${ota_easy_mode_ip}"); [ '${ota_spdp_interval}' != "None" ] && [ -n '${ota_spdp_interval}' ] && ota_args+=(--spdp-interval "${ota_spdp_interval}"); /ws/ota_configs/get_ota_xml.py "${ota_args[@]}" > "${ota_config_file}"; case ${rmw_ota} in cyclone) export CYCLONEDDS_URI="file://${ota_config_file}";; fastdds) export FASTDDS_DEFAULT_PROFILES_FILE="${ota_config_file}"; export RMW_FASTRTPS_USE_QOS_FROM_XML=1;; esac; fi
|
|
313
|
+
- if [ '${ota_config_template}' != "None" ] && [ -n '${ota_config_template}' ]; then ota_args=(--config "${ota_config_template}" --host-ip "${ip_local}" --peer "${ip_remote}"); [ '${ota_easy_mode_ip}' != "None" ] && [ -n '${ota_easy_mode_ip}' ] && ota_args+=(--easy-mode-ip "${ota_easy_mode_ip}"); [ '${ota_spdp_interval}' != "None" ] && [ -n '${ota_spdp_interval}' ] && ota_args+=(--spdp-interval "${ota_spdp_interval}"); python3 /ws/ota_configs/get_ota_xml.py "${ota_args[@]}" > "${ota_config_file}"; case ${rmw_ota} in cyclone) export CYCLONEDDS_URI="file://${ota_config_file}";; fastdds) export FASTDDS_DEFAULT_PROFILES_FILE="${ota_config_file}"; export RMW_FASTRTPS_USE_QOS_FROM_XML=1;; esac; fi
|
|
314
314
|
# For zenoh_ros2dds the OTA domain is loopback-only (zenoh is the inter-host
|
|
315
315
|
# transport), so confine discovery to localhost instead of statically peering
|
|
316
316
|
# the remote host — otherwise the OTA-domain DDS double-delivers alongside zenoh.
|
|
@@ -1817,10 +1817,33 @@ def test_container_scripts_run_through_the_interpreter() -> None:
|
|
|
1817
1817
|
|
|
1818
1818
|
Asserted as a property rather than as one literal command, so a second
|
|
1819
1819
|
script added later fails here instead of on a machine.
|
|
1820
|
+
|
|
1821
|
+
The first version of this test looked only at `cli.py`, and the session
|
|
1822
|
+
templates carried two more of exactly the same call — `get_ota_xml.py` and
|
|
1823
|
+
`create_zenoh_json5.py`. Those failed the same way and cost the same
|
|
1824
|
+
bring-up a second time: the redirect made the failure silent, leaving a
|
|
1825
|
+
zero-byte DDS profile, so the symptom was an unexplained XML parser error
|
|
1826
|
+
and an OTA layer that never came up. Anything that runs inside a container
|
|
1827
|
+
is in scope here, not just what `cli.py` spawns.
|
|
1820
1828
|
"""
|
|
1821
1829
|
assert rosotacom.RUN_SESSION_CONTAINER_ARGV[0] == "python3"
|
|
1822
1830
|
assert rosotacom.RUN_SESSION_CONTAINER_ARGV[1].endswith("/run_session.py")
|
|
1823
1831
|
|
|
1832
|
+
# The session content templates run commands in the container too, and a
|
|
1833
|
+
# failure there is worse than an exec error: the call is redirected into a
|
|
1834
|
+
# config file, so a non-executable script leaves an empty one and the next
|
|
1835
|
+
# component reports a parse error instead of a missing interpreter.
|
|
1836
|
+
content = Path(rosotacom.__file__).parent / "resources" / "ws" / "session" / "content"
|
|
1837
|
+
for template in sorted(content.rglob("*.yaml")):
|
|
1838
|
+
text = template.read_text(encoding="utf-8")
|
|
1839
|
+
for match in re.finditer(r"(?<![\w/])(/ws/[\w/.-]+\.py)", text):
|
|
1840
|
+
preceding = text[max(0, match.start() - 40) : match.start()]
|
|
1841
|
+
assert "python3 " in preceding, (
|
|
1842
|
+
f"{template.name}: {match.group(1)} is run by path. In a wheel "
|
|
1843
|
+
"install it is not executable, and here the output is "
|
|
1844
|
+
"redirected into a config file, so the failure is silent."
|
|
1845
|
+
)
|
|
1846
|
+
|
|
1824
1847
|
# And the same for any container script added later. Comment lines are
|
|
1825
1848
|
# dropped first: the explanation above quotes the failing path, and a test
|
|
1826
1849
|
# that reads prose as code would fail on the wrong thing.
|
|
@@ -1865,6 +1888,29 @@ def test_resolve_session_and_base_extra_run_args(tmp_path: Path, monkeypatch: py
|
|
|
1865
1888
|
assert f"{runtime.session_configs_dir[0]}:/session/definitions:ro" in args
|
|
1866
1889
|
assert f"{runtime.session_instances_dir}:/session/instances" in args
|
|
1867
1890
|
assert "Configured sessions:" in rosotacom._format_available_sessions(runtime)
|
|
1891
|
+
# A peer shares the host IPC namespace, so it can exchange local-domain
|
|
1892
|
+
# data with application containers on the same machine. See
|
|
1893
|
+
# `_local_ipc_run_args` for what happens without it.
|
|
1894
|
+
assert args[:2] == ["--ipc", "host"]
|
|
1895
|
+
|
|
1896
|
+
|
|
1897
|
+
def test_a_peer_shares_the_host_ipc_namespace_unless_isolated() -> None:
|
|
1898
|
+
"""Without it, a peer receives nothing from a local application container.
|
|
1899
|
+
|
|
1900
|
+
`--network host` with `ipc=private` gives every container its own
|
|
1901
|
+
/dev/shm. FastDDS sees two participants on one host, chooses shared memory,
|
|
1902
|
+
and the reader never maps the writer's segment. Discovery succeeds, delivery
|
|
1903
|
+
does not, and nothing in the output says so: the link comes up, the
|
|
1904
|
+
heartbeat crosses at 10 Hz with 0% loss, and no payload ever enters it.
|
|
1905
|
+
|
|
1906
|
+
Isolated on 2026-08-09 with two containers from one image on one host:
|
|
1907
|
+
`ipc=private` received 0 messages, `--ipc host` received 200.
|
|
1908
|
+
"""
|
|
1909
|
+
assert rosotacom._local_ipc_run_args(network_isolated=False) == ["--ipc", "host"]
|
|
1910
|
+
# Under network isolation it must not be shared: SHM would carry data
|
|
1911
|
+
# straight past the boundary the isolation exists to simulate, and a test
|
|
1912
|
+
# that passes through a hole in its own isolation is worse than none.
|
|
1913
|
+
assert rosotacom._local_ipc_run_args(network_isolated=True) == []
|
|
1868
1914
|
|
|
1869
1915
|
|
|
1870
1916
|
def test_container_helpers_use_docker_and_ros2docker_stop(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None:
|
|
@@ -1905,7 +1951,7 @@ def test_start_session_detached_dispatches_ros2docker(monkeypatch: pytest.Monkey
|
|
|
1905
1951
|
monkeypatch.setattr(
|
|
1906
1952
|
rosotacom,
|
|
1907
1953
|
"_base_extra_run_args",
|
|
1908
|
-
lambda runtime, session, cfg, instance: ["--network", "host"],
|
|
1954
|
+
lambda runtime, session, cfg, instance, **kwargs: ["--network", "host"],
|
|
1909
1955
|
)
|
|
1910
1956
|
monkeypatch.setattr(rosotacom, "_resolve_mode", lambda mode: "detached")
|
|
1911
1957
|
monkeypatch.setattr(rosotacom, "_list_docker_containers", lambda all_states=False: [])
|
|
@@ -1949,7 +1995,7 @@ def test_start_session_attach_dispatches_command_run(monkeypatch: pytest.MonkeyP
|
|
|
1949
1995
|
monkeypatch.setattr(rosotacom, "_effective_session_config", lambda *args, **kwargs: cfg)
|
|
1950
1996
|
monkeypatch.setattr(rosotacom, "_auto_identity", lambda *args: "a")
|
|
1951
1997
|
monkeypatch.setattr(rosotacom, "_scoped_image_name", lambda runtime: "image:id")
|
|
1952
|
-
monkeypatch.setattr(rosotacom, "_base_extra_run_args", lambda runtime, session, cfg, instance: [])
|
|
1998
|
+
monkeypatch.setattr(rosotacom, "_base_extra_run_args", lambda runtime, session, cfg, instance, **kwargs: [])
|
|
1953
1999
|
monkeypatch.setattr(rosotacom, "_resolve_mode", lambda mode: "attach")
|
|
1954
2000
|
monkeypatch.setattr(rosotacom, "_list_docker_containers", lambda all_states=False: [])
|
|
1955
2001
|
monkeypatch.setattr(rosotacom, "_stop_container_name", lambda *args, **kwargs: True)
|
|
@@ -143,7 +143,7 @@ def _patch_start_session_collaborators(
|
|
|
143
143
|
monkeypatch.setattr(rosotacom, "_resolve_session", lambda session_dir, runtime: session)
|
|
144
144
|
monkeypatch.setattr(rosotacom, "_effective_session_config", lambda *args, **kwargs: cfg)
|
|
145
145
|
monkeypatch.setattr(rosotacom, "_scoped_image_name", lambda runtime: "image:id")
|
|
146
|
-
monkeypatch.setattr(rosotacom, "_base_extra_run_args", lambda runtime, session, cfg, instance: [])
|
|
146
|
+
monkeypatch.setattr(rosotacom, "_base_extra_run_args", lambda runtime, session, cfg, instance, **kwargs: [])
|
|
147
147
|
monkeypatch.setattr(rosotacom, "_resolve_mode", lambda mode: "detached")
|
|
148
148
|
monkeypatch.setattr(rosotacom, "_container_exists", lambda name: False)
|
|
149
149
|
monkeypatch.setattr(rosotacom, "_wait_for_container_ready", lambda name: None)
|
|
File without changes
|
{rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/.devcontainer/re_generate_devcontainer_json.py
RENAMED
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/.github/ISSUE_TEMPLATE/documentation-audit.md
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/.github/ISSUE_TEMPLATE/implementation-cleanup.md
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/.github/ISSUE_TEMPLATE/quality-workflow.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/.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
|
|
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.dev3 → rosotacom_dev-2.5.dev5}/calibration/capacity-size-tight-cyclone.json
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/calibration/probe-loss-gop-tight-cyclone.json
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/calibration/probe-loss-nominal-cyclone.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
|
{rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/findings/cyclone-spdp-discovery-bursts.md
RENAMED
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/findings/head-of-line-irregularity.md
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/findings/jitter-loss-bandwidth-latency.md
RENAMED
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/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
|
{rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/docs/rfcs/0001-expectation-driven-test-suite.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
|
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/.gitignore
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/README.md
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/profiles.yaml
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/ros2docker.json
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev3 → rosotacom_dev-2.5.dev5}/src/rosotacom/resources/examples/rosotacom.yaml
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
|