rosotacom-dev 2.5.dev81__tar.gz → 2.5.dev83__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.dev81 → rosotacom_dev-2.5.dev83}/PKG-INFO +1 -1
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/cli.py +99 -4
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom_dev.egg-info/PKG-INFO +1 -1
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom_dev.egg-info/scm_version.json +2 -2
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_cli.py +26 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_ota_benchmark_peer_exec.py +64 -4
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/.devcontainer/devcontainer.json.template +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/.devcontainer/re_generate_devcontainer_json.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/.github/CODEOWNERS +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/.github/ISSUE_TEMPLATE/documentation-audit.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/.github/ISSUE_TEMPLATE/implementation-cleanup.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/.github/ISSUE_TEMPLATE/quality-workflow.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/.github/ISSUE_TEMPLATE/redesign.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/.github/ISSUE_TEMPLATE/release-process.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/.github/ISSUE_TEMPLATE/repository-diagnosis.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/.github/ISSUE_TEMPLATE/test-ci-audit.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/.github/ISSUE_TEMPLATE/work-item.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/.github/actions/setup-just/action.yml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/.github/dependabot.yml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/.github/workflows/benchmark-calibrate.yml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/.github/workflows/benchmark-gate.yml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/.github/workflows/dev-release.yml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/.github/workflows/image-scan.yml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/.github/workflows/nightly-e2e.yml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/.github/workflows/pr-lightweight.yml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/.github/workflows/pr-merge-gate.yml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/.github/workflows/release.yml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/.pre-commit-config.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/AGENTS.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/CONCURRENCY.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/CONTRIBUTING.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/DEVELOPMENT_PRINCIPLES.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/LICENSE.txt +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/MANIFEST.in +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/README.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/budgets.jsonl +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/calibration/README.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/calibration/capacity-size-tight-cyclone.json +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/calibration/probe-loss-gop-tight-cyclone.json +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/calibration/probe-loss-nominal-cyclone.json +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/calibration/probe-loss-tight-cyclone.json +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/calibration/probe-loss-tight-fastdds.json +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/calibration/probe-loss-tight-zenoh.json +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/codecov.yml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/deployment-configuration.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/benchmark-ab.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/benchmark-bag-as-load.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/ci.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/ffmpeg-keyframes.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/findings/README.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/findings/a-fitted-delay-table-never-reached-the-shaper.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/findings/a-shorter-group-does-not-lose-fewer-key-frames.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/findings/a-transport-element-doubles-every-fastdds-sample.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/findings/cyclone-fragment-equal-to-max-drops-fragmented-samples.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/findings/cyclone-spdp-discovery-bursts.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/findings/delay-alone-no-loss.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/findings/fastdds-datagram-cap-drops-large-samples.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/findings/graph-derived-types-block-a-non-graph-transport.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/findings/head-of-line-irregularity.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/findings/jitter-loss-bandwidth-latency.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/findings/keyframe-loss-kills-the-next-deltas.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/findings/lifespan-is-enforced-by-one-reader-and-not-the-other.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/findings/lighter-message-loss.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/findings/neither-a-queue-nor-a-burst-tilts-the-size-law.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/findings/one-domain-two-cyclone-configs-stop-interoperating.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/findings/oversubscription-queues-not-losses.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/findings/queueing-adds-delay-not-loss.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/findings/reorder-becomes-reader-loss.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/findings/repro/decode_chain_repro.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/findings/repro/reorder_drop_repro.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/findings/sender-rows-make-a-dead-link-look-loss-free.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/findings/the-size-law-belongs-to-the-transport-not-the-link.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/findings/zero-loss-boundaries-18kb-20hz.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/forensics-report.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/geo-link-map.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/github-repository-settings.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/link-bandwidth.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/link-trace.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/ota-pcap.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/owner-runbook.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/performance-bands.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/playbooks/README.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/quality-model.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/release-notes/TEMPLATE.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/release-notes/v2.1.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/release-notes/v2.2.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/release-notes/v2.3.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/release-notes/v2.4.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/release.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/rfcs/0001-expectation-driven-test-suite.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/rfcs/0002-expectation-concepts.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/rfcs/0003-metric-backbone.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/rfcs/0004-network-profiles.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/rfcs/0005-benchmark-genres-and-ci.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/rfcs/0006-dynamic-qos.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/rfcs/0007-regression-gate.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/rfcs/README.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/testing.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/work-items.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/install.sh +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/justfile +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/media/control_center.png +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/media/echo_test.png +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/media/forensics-report-example.png +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/media/host.png +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/media/vehicle.png +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/pyproject.toml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/requirements.txt +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/rosotacom.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/session-configuration.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/setup.cfg +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/__init__.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/__main__.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/anonymize.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/bag_ground_truth.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/benched_set.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/benchmark.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/benchmark_delta.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/bundle_check.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/cli_benchmark.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/deployment.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/ffmpeg_packet.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/forensics.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/geomap.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/image_cache.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/netem_dist.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/network_preflight.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/network_profiles.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/network_shaper.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/plots.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/py.typed +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/benched-set.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/.gitignore +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/README.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/__init__.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/bags/8_drop_reference/metadata.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/deployment.example.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/dist/field-20260817.dist +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/profiles.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/ros2docker.lyrical.json +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/rosotacom.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scenarios/2_native_chatter/scenario-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/1_heartbeat/run_machine_a.sh +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/1_heartbeat/run_machine_b.sh +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/external.lyrical.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/run_external.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/wait_for_echo_topic.sh +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/external.lyrical.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/run_external.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/external_session.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/foxglove.json +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/run_external.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/costmap_1second/costmap_1second_0.mcap +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/costmap_1second/metadata.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/run_external.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/external_session.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/foxglove.json +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/run_external.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/costmap_1second/costmap_1second_0.mcap +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/costmap_1second/metadata.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/run_external.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/external_session.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/run_external.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/external_session.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/run_external.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/external_session.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/run_external.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/external_session.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/run_external.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/sessions/10_restamp/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/sessions/11_trickle/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/sessions/12_content_integrity/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/sessions/13_link_latency/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/sessions/14_remote_assist_anonymized/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/sessions/15_remote_assist_anonymized_costmap/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/sessions/16_remote_assist_anonymized_camera/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/sessions/17_synthetic_camera_quality/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/sessions/1_heartbeat/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/sessions/1_heartbeat_status/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/sessions/2_native_chatter/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/sessions/3_comp_occ_grid/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/sessions/4_comp_occ_grid_zen/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/sessions/5_sized_payload/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/sessions/6_sized_payload_zen/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/sessions/7_latched_static/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/sessions/8_drop/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/sessions/9_throttle/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/sessions/bench_1_1_capacity/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/sessions/bench_1_2_load_sweep/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/sessions/bench_1_3_ramp/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/sessions/bench_1_4_recovery/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/examples/sessions/bench_1_5_camera/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ros2docker.json.example +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ros2docker.lyrical.json.example +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/.vscode/c_cpp_properties.json +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/.vscode/settings.json +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_easy_mode.xml.template +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_initial_peer_list.xml.template +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v2.xml.template +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v3.xml.template +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v4.xml.template +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v5.xml.template +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ota_configs/create_zenoh_json5.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ota_configs/cyclonedds_local_participants.xml.template +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ota_configs/cyclonedds_minimal.xml.template +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ota_configs/cyclonedds_scoped.xml.template +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ota_configs/cyclonedds_tuned.xml.template +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ota_configs/fastdds_easy_mode.xml.template +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ota_configs/fastdds_local.xml.template +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ota_configs/fastdds_tuned.xml.template +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ota_configs/fastdds_unicast.xml.template +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ota_configs/get_ota_xml.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ota_configs/utils.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ota_configs/zenoh.json5.template +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/.gitkeep +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_cpp/CMakeLists.txt +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_cpp/COLCON_IGNORE +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_cpp/LICENSE.txt +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_cpp/package.xml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_cpp/src/hz_monitor.cpp +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_cpp/src/universal_compressor.cpp +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_cpp/src/universal_decompressor.cpp +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_msgs/CMakeLists.txt +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_msgs/LICENSE.txt +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/CompressedData.msg +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/EchoHeartbeat.msg +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/OtaStamped.msg +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/SizedPayload.msg +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_msgs/package.xml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/LICENSE.txt +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/__init__.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/base_bridge_relay.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/bridge_in.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/bridge_out.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/ffmpeg_flags.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/heartbeat_echo.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/hz_monitor.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/image_bandwidth_reducer.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/image_pixel_capper.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/lanelet_saver.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/latch_relay.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/costmap_remapper.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/marker_remapper.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/speed_test.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/tf_remapper.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/traffic_monitor.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/wifi_network_analysis_1.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/link_bytes.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/link_trace.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/local_global_frame_bridge.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/localization_map_split_reduce_saver.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/msg_transform.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/ota_pcap.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/pair_management.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/playout_pacer.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/playout_pacer_core.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/pub_sub_pair.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/qos.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/relay_in.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/relay_out.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/restamp.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/sized_publisher.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/stage_latency.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/stage_latency_core.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/status_overview.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/status_overview_core.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/tf_map_to_cart_saver.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/topic_monitor.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/topic_resolution.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/trickle.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_compressor.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_decompressor.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_ota_unwrapper.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_ota_wrapper.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/package.xml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/resource/com_py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/setup.cfg +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/setup.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/test/test_copyright.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/test/test_flake8.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/ros2src/com_py/test/test_pep257.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/session/content/base/session_plugin_base.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/session/content/network/up_connectivity.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/session/content/network/wifi_network_analysis_2.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/session/creation/anonymize_bag.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/session/creation/catmux_log_setup.sh +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/session/creation/create_session_yaml.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/session/creation/generate_session_files.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/session/creation/run_session.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/session/creation/run_session_in_external_terminal.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/resources/ws/session/creation/strip_ansi.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/status_eval.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/stream_stats.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/trace_profiles.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/transit.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom/video_quality.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom_dev.egg-info/SOURCES.txt +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom_dev.egg-info/dependency_links.txt +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom_dev.egg-info/entry_points.txt +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom_dev.egg-info/requires.txt +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom_dev.egg-info/scm_file_list.json +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/src/rosotacom_dev.egg-info/top_level.txt +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/terminology.md +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/contract/test_benched_set_registry.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/contract/test_findings.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/contract/test_generated_topics_have_a_producer.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/contract/test_lyrical_runtime_compat.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/contract/test_markdown_links.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/contract/test_ota_source_bundle.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/contract/test_package_metadata.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/contract/test_packaged_resources.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/contract/test_profile_covers_generated_commands.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/contract/test_pytest_policy.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/contract/test_readme_examples.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/contract/test_security_maintenance_config.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/contract/test_session_configuration_doc.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/contract/test_session_template_substitution.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/contract/test_workflow_contracts.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/e2e/conftest.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/e2e/test_anonymize_e2e.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/e2e/test_benchmark_ab.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/e2e/test_benchmark_capacity.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/e2e/test_benchmark_replay.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/e2e/test_parallel_smoke.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/e2e/test_smoke.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/e2e/test_timeline_stepping.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/e2e/test_video_quality_e2e.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/sessions/generate_rmw_matrix.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-local_zenoh-ros2dds-ota/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-ota/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-ota-tuned/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/sessions/rmw_matrix/1_heartbeat_fastdds/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/sessions/rmw_matrix/1_heartbeat_fastdds-default/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/sessions/rmw_matrix/1_heartbeat_zen-endpoints/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_anonymize.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_bag_ground_truth.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_benched_set.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_benchmark.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_benchmark_delta.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_bundle_check.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_catmux_pane_logging.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_cli_benchmark.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_concurrency.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_container_shaping.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_deployment.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_ffmpeg_flags.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_ffmpeg_packet.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_field_profiles.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_forensics.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_geomap.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_image_cache.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_link_bytes.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_link_trace.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_netem_dist.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_network_preflight.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_network_profiles.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_network_shaper.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_ota_link_configs.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_ota_pcap.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_ota_unwrapper.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_ota_wrapper.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_ota_xml.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_playout_pacer.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_plots.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_pub_sub_pair_types.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_qos_fallback_logging.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_relay_optional_parameters.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_ros_node_entity_ownership.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_session_pipeline.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_stage_latency.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_status_eval.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_status_overview.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_status_overview_observer.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_stream_stats.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_terminology_stage_ownership.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_trace_profiles.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_transit.py +0 -0
- {rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_video_quality.py +0 -0
|
@@ -2437,9 +2437,19 @@ def _ota_stop_parts(
|
|
|
2437
2437
|
#: How a benchmark's load maps onto `publish-test-topics` flags. The keys are
|
|
2438
2438
|
#: `_sized_publisher_param_args`'s own, so a load dict travels from the
|
|
2439
2439
|
#: benchmark to the peer's publisher without being rewritten on the way.
|
|
2440
|
+
#:
|
|
2441
|
+
#: `size_pattern` and not `pattern`, and that distinction is the whole reason a
|
|
2442
|
+
#: mixed-size load never reached a peer. `parse_size_pattern_load` turns one CLI
|
|
2443
|
+
#: string into five keys -- `sizes`, `pattern`, `size_pattern`, and one
|
|
2444
|
+
#: `size_<label>` per distinct size -- and only three of them used to cross the
|
|
2445
|
+
#: hop. A two-size pattern therefore arrived as `pattern=a*6,b*1` with `size_a`
|
|
2446
|
+
#: and no `size_b`, and the publisher died on `Pattern references size 'b' but
|
|
2447
|
+
#: it was not provided` inside a detached `docker exec`, which the orchestrator
|
|
2448
|
+
#: reported as the topic not advertising. Sending the *source* string instead
|
|
2449
|
+
#: cannot lose a size, whatever the pattern turns out to contain.
|
|
2440
2450
|
_OTA_LOAD_FLAGS: tuple[tuple[str, str], ...] = (
|
|
2441
2451
|
("size", "--load-size"),
|
|
2442
|
-
("
|
|
2452
|
+
("size_pattern", "--load-size-pattern"),
|
|
2443
2453
|
("rate", "--load-rate-hz"),
|
|
2444
2454
|
("streams", "--load-streams"),
|
|
2445
2455
|
("interval_jitter_ms", "--load-interval-jitter-ms"),
|
|
@@ -2469,6 +2479,16 @@ def _ota_publish_parts(
|
|
|
2469
2479
|
merged = dict(load or {})
|
|
2470
2480
|
if "size" not in merged and merged.get("size_a") is not None:
|
|
2471
2481
|
merged["size"] = merged["size_a"]
|
|
2482
|
+
if merged.get("pattern") and not merged.get("size_pattern"):
|
|
2483
|
+
# Only `parse_size_pattern_load` produces `pattern`, and it always
|
|
2484
|
+
# produces `size_pattern` beside it. A load carrying one without the
|
|
2485
|
+
# other was assembled by hand, and sending the expanded form would
|
|
2486
|
+
# drop every size but the first -- loudly here rather than as a peer
|
|
2487
|
+
# whose publisher will not start.
|
|
2488
|
+
raise RuntimeError(
|
|
2489
|
+
f"load carries pattern {merged['pattern']!r} without the size pattern it came from; "
|
|
2490
|
+
"build it with parse_size_pattern_load so every size reaches the peer."
|
|
2491
|
+
)
|
|
2472
2492
|
for key, flag in _OTA_LOAD_FLAGS:
|
|
2473
2493
|
if merged.get(key) is not None:
|
|
2474
2494
|
parts.extend([flag, str(merged[key])])
|
|
@@ -3562,6 +3582,35 @@ def _ota_remote_package_dir(peer: OtaSmokePeer, plan: OtaSmokePlan, *, dry_run:
|
|
|
3562
3582
|
return located
|
|
3563
3583
|
|
|
3564
3584
|
|
|
3585
|
+
def _ota_missing_project_message(plan: OtaSmokePlan, peer: OtaSmokePeer) -> str:
|
|
3586
|
+
"""Why one peer has no project file, in the terms that make it fixable.
|
|
3587
|
+
|
|
3588
|
+
`test -f` failing is the single most common way a checkout-mode run stops,
|
|
3589
|
+
and the bare "exit code 1" it used to raise says nothing about the contract
|
|
3590
|
+
it broke. The path is not resolved per peer: `--project` is split once, on
|
|
3591
|
+
the orchestrator, into (checkout root, path inside it), and that *relative*
|
|
3592
|
+
path is then asserted inside every peer's own `--peer-checkout`. So the
|
|
3593
|
+
peers do not merely need a rosotacom project each — they need the same
|
|
3594
|
+
repository, with the project at the same place in it.
|
|
3595
|
+
|
|
3596
|
+
The failure therefore has two ordinary causes and they want opposite fixes:
|
|
3597
|
+
the peer is behind (sync it), or the project lives in a repository this peer
|
|
3598
|
+
does not have (move the project, or point the peer at the repository that
|
|
3599
|
+
holds it). Naming both is the difference between a minute and an afternoon.
|
|
3600
|
+
"""
|
|
3601
|
+
workdir = _ota_peer_workdir(plan, peer)
|
|
3602
|
+
return (
|
|
3603
|
+
f"{peer.name}: {workdir}/{plan.project} does not exist.\n"
|
|
3604
|
+
f" --install-mode checkout resolves the project once, on this machine, into a checkout root and "
|
|
3605
|
+
f"the path {plan.project!r} inside it, and then asserts that same relative path inside every peer's "
|
|
3606
|
+
f"--peer-checkout. Every peer therefore needs the same repository, with the project at the same "
|
|
3607
|
+
f"place in it -- not a project of its own.\n"
|
|
3608
|
+
f" If {peer.name} has that repository, it is behind: sync it and run again.\n"
|
|
3609
|
+
f" If it does not, the project is in the wrong repository for this run. Move it into the one the "
|
|
3610
|
+
f"peers actually have, or give this peer --peer-checkout for a checkout that holds it."
|
|
3611
|
+
)
|
|
3612
|
+
|
|
3613
|
+
|
|
3565
3614
|
def _ota_verify_checkouts(plan: OtaSmokePlan, *, dry_run: bool) -> None:
|
|
3566
3615
|
"""Checkout mode's replacement for staging: assert, do not install.
|
|
3567
3616
|
|
|
@@ -3583,13 +3632,16 @@ def _ota_verify_checkouts(plan: OtaSmokePlan, *, dry_run: bool) -> None:
|
|
|
3583
3632
|
dry_run=dry_run,
|
|
3584
3633
|
batch=True,
|
|
3585
3634
|
)
|
|
3586
|
-
_ota_run(
|
|
3635
|
+
found = _ota_run(
|
|
3587
3636
|
peer,
|
|
3588
3637
|
f"test -f {checkout}/{project}",
|
|
3589
3638
|
label=f"{peer.name}: project config {plan.project} inside the checkout",
|
|
3590
3639
|
dry_run=dry_run,
|
|
3640
|
+
check=False,
|
|
3591
3641
|
batch=True,
|
|
3592
3642
|
)
|
|
3643
|
+
if found.returncode != 0:
|
|
3644
|
+
raise RuntimeError(_ota_missing_project_message(plan, peer))
|
|
3593
3645
|
_ota_run(
|
|
3594
3646
|
peer,
|
|
3595
3647
|
f"{OTA_CHECKOUT_PATH_PREFIX}command -v rosotacom >/dev/null 2>&1",
|
|
@@ -7548,6 +7600,33 @@ def _smoke_publish_specs(cfg: dict[str, Any], source_peer_key: str | None = None
|
|
|
7548
7600
|
return specs
|
|
7549
7601
|
|
|
7550
7602
|
|
|
7603
|
+
#: Where a detached smoke publisher's own output goes inside its container.
|
|
7604
|
+
#: `docker exec -d` returns before the process says anything and keeps nothing,
|
|
7605
|
+
#: so without this the only evidence of a publisher that refused to start is the
|
|
7606
|
+
#: topic never appearing -- which reads as a broken graph rather than as a bad
|
|
7607
|
+
#: parameter. One file per topic, overwritten per attempt.
|
|
7608
|
+
_SMOKE_PUBLISHER_LOG_DIR = "/tmp"
|
|
7609
|
+
|
|
7610
|
+
|
|
7611
|
+
def _smoke_publisher_log_path(topic: str) -> str:
|
|
7612
|
+
slug = re.sub(r"[^A-Za-z0-9]+", "_", topic).strip("_") or "topic"
|
|
7613
|
+
return f"{_SMOKE_PUBLISHER_LOG_DIR}/rosotacom-smoke-publisher-{slug}.log"
|
|
7614
|
+
|
|
7615
|
+
|
|
7616
|
+
def _smoke_publisher_failure_detail(container: str, log_path: str) -> str:
|
|
7617
|
+
"""What the publisher said before it stopped, if it said anything."""
|
|
7618
|
+
result = subprocess.run(
|
|
7619
|
+
["docker", "exec", container, "tail", "-n", "20", log_path],
|
|
7620
|
+
capture_output=True,
|
|
7621
|
+
text=True,
|
|
7622
|
+
check=False,
|
|
7623
|
+
)
|
|
7624
|
+
detail = ((result.stdout or "") + (result.stderr or "")).strip()
|
|
7625
|
+
if not detail:
|
|
7626
|
+
return f" Nothing was written to {log_path} in the container, so it never got as far as starting."
|
|
7627
|
+
return f"\nWhat it wrote to {log_path}:\n{detail}"
|
|
7628
|
+
|
|
7629
|
+
|
|
7551
7630
|
def _start_smoke_topic_publishers(
|
|
7552
7631
|
containers: dict[str, str],
|
|
7553
7632
|
ros_setups: dict[str, str],
|
|
@@ -7574,8 +7653,9 @@ def _start_smoke_topic_publishers(
|
|
|
7574
7653
|
f"Starting smoke publisher {spec.source_peer_key}->{spec.receiver_peer_key} "
|
|
7575
7654
|
f"{spec.publish_topic} ({spec.publish_type}) in {container}{offered}"
|
|
7576
7655
|
)
|
|
7656
|
+
log_path = _smoke_publisher_log_path(spec.publish_topic)
|
|
7577
7657
|
subprocess.run(
|
|
7578
|
-
["docker", "exec", "-d", container, "bash", "-c", cmd],
|
|
7658
|
+
["docker", "exec", "-d", container, "bash", "-c", f"{{ {cmd} ; }} > {shlex.quote(log_path)} 2>&1"],
|
|
7579
7659
|
capture_output=True,
|
|
7580
7660
|
text=True,
|
|
7581
7661
|
check=False,
|
|
@@ -7594,6 +7674,7 @@ def _start_smoke_topic_publishers(
|
|
|
7594
7674
|
raise RuntimeError(
|
|
7595
7675
|
f"Smoke publisher {spec.source_peer_key}->{spec.receiver_peer_key} "
|
|
7596
7676
|
f"{spec.publish_topic} ({spec.publish_type}) did not advertise in {container}."
|
|
7677
|
+
+ _smoke_publisher_failure_detail(container, log_path)
|
|
7597
7678
|
)
|
|
7598
7679
|
return started
|
|
7599
7680
|
|
|
@@ -7949,7 +8030,21 @@ def _publish_load_override(args: argparse.Namespace) -> dict[str, Any] | None:
|
|
|
7949
8030
|
load["size"] = int(args.load_size)
|
|
7950
8031
|
load["size_a"] = int(args.load_size)
|
|
7951
8032
|
if getattr(args, "load_size_pattern", None):
|
|
7952
|
-
|
|
8033
|
+
# Re-derived here rather than carried in pieces: the orchestrator sends
|
|
8034
|
+
# the pattern it was given, and this side expands it into `sizes`,
|
|
8035
|
+
# `pattern` and every `size_<label>` the publisher needs. `size_a` from
|
|
8036
|
+
# `--load-size` above is overwritten on purpose -- a pattern names its
|
|
8037
|
+
# own sizes, and the scalar is only a fallback for callers without one.
|
|
8038
|
+
from .benchmark import parse_size_pattern_load
|
|
8039
|
+
|
|
8040
|
+
try:
|
|
8041
|
+
load.update(parse_size_pattern_load(str(args.load_size_pattern)))
|
|
8042
|
+
except ValueError as error:
|
|
8043
|
+
raise RuntimeError(
|
|
8044
|
+
f"--load-size-pattern {args.load_size_pattern!r} is not a size pattern ({error}). "
|
|
8045
|
+
"An orchestrator older than this peer sends the expanded token form here instead of the "
|
|
8046
|
+
"pattern; the two sides have to agree, so bring them to the same rosotacom."
|
|
8047
|
+
) from error
|
|
7953
8048
|
if getattr(args, "load_rate_hz", None) is not None:
|
|
7954
8049
|
load["rate"] = float(args.load_rate_hz)
|
|
7955
8050
|
if getattr(args, "load_streams", None) is not None:
|
|
@@ -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.dev81 → rosotacom_dev-2.5.dev83}/tests/unit/test_ota_benchmark_peer_exec.py
RENAMED
|
@@ -11,12 +11,16 @@ from __future__ import annotations
|
|
|
11
11
|
|
|
12
12
|
import argparse
|
|
13
13
|
|
|
14
|
+
import pytest
|
|
15
|
+
|
|
16
|
+
from rosotacom.benchmark import parse_size_pattern_load
|
|
14
17
|
from rosotacom.cli import (
|
|
15
18
|
_ota_instances_rel,
|
|
16
19
|
_ota_publish_parts,
|
|
17
20
|
_profile_directions_for,
|
|
18
21
|
_publish_load_override,
|
|
19
22
|
)
|
|
23
|
+
from rosotacom.cli_benchmark import _sized_publisher_param_args
|
|
20
24
|
|
|
21
25
|
|
|
22
26
|
class _Target:
|
|
@@ -72,11 +76,67 @@ def test_the_benchmark_load_reaches_the_peer_command():
|
|
|
72
76
|
assert "--load-streams" in parts and parts[parts.index("--load-streams") + 1] == "2"
|
|
73
77
|
|
|
74
78
|
|
|
75
|
-
def
|
|
76
|
-
|
|
77
|
-
|
|
79
|
+
def test_a_size_pattern_travels_as_the_string_it_was_given():
|
|
80
|
+
"""The source pattern, not the expanded token form it was compiled into.
|
|
81
|
+
|
|
82
|
+
`parse_size_pattern_load` turns one string into `sizes`, `pattern`,
|
|
83
|
+
`size_pattern` and a `size_<label>` per distinct size, and only three of
|
|
84
|
+
those used to cross the hop. A two-size pattern arrived as `a*6,b*1` with a
|
|
85
|
+
`size_a` and no `size_b`, so the peer's publisher died on `Pattern
|
|
86
|
+
references size 'b' but it was not provided` -- inside a detached
|
|
87
|
+
`docker exec`, which the orchestrator could only report as the topic never
|
|
88
|
+
advertising. Sending the source string cannot lose a size.
|
|
89
|
+
"""
|
|
90
|
+
load = parse_size_pattern_load("6x200B+1x28000B")
|
|
91
|
+
parts = _ota_publish_parts(_Target(), "a", [], load=load)
|
|
92
|
+
|
|
93
|
+
assert parts[parts.index("--load-size-pattern") + 1] == "6x200B+1x28000B"
|
|
94
|
+
assert "a*6,b*1" not in parts
|
|
78
95
|
# `size_a` is the pattern's own base size and must reach the peer as --load-size.
|
|
79
|
-
assert parts[parts.index("--load-size") + 1] == "
|
|
96
|
+
assert parts[parts.index("--load-size") + 1] == "200"
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def test_a_hand_built_pattern_load_is_refused_rather_than_silently_truncated():
|
|
100
|
+
with pytest.raises(RuntimeError, match="without the size pattern it came from"):
|
|
101
|
+
_ota_publish_parts(_Target(), "a", [], load={"pattern": "a*4,b*1", "size_a": 5000})
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def test_every_size_of_a_pattern_survives_the_round_trip_to_the_publisher():
|
|
105
|
+
"""Orchestrator load -> peer flags -> peer load -> publisher parameters.
|
|
106
|
+
|
|
107
|
+
The end the defect lived at: each step looked right on its own, and only
|
|
108
|
+
the whole chain shows that the second size never arrives.
|
|
109
|
+
"""
|
|
110
|
+
parts = _ota_publish_parts(_Target(), "a", [], load=parse_size_pattern_load("6x200B+1x28000B"))
|
|
111
|
+
args = argparse.Namespace(
|
|
112
|
+
load_size=int(parts[parts.index("--load-size") + 1]),
|
|
113
|
+
load_size_pattern=parts[parts.index("--load-size-pattern") + 1],
|
|
114
|
+
load_rate_hz=None,
|
|
115
|
+
load_streams=None,
|
|
116
|
+
load_interval_jitter_ms=None,
|
|
117
|
+
load_interval_jitter_seed=None,
|
|
118
|
+
)
|
|
119
|
+
peer_load = _publish_load_override(args)
|
|
120
|
+
assert peer_load is not None
|
|
121
|
+
|
|
122
|
+
params = _sized_publisher_param_args("/bench_capacity", dict(peer_load))
|
|
123
|
+
|
|
124
|
+
assert "size_a:=200" in params
|
|
125
|
+
assert "size_b:=28000" in params
|
|
126
|
+
assert "pattern:=a*6,b*1" in params
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def test_a_peer_newer_than_its_orchestrator_says_so_instead_of_failing_obscurely():
|
|
130
|
+
args = argparse.Namespace(
|
|
131
|
+
load_size=5000,
|
|
132
|
+
load_size_pattern="a*4,b*1",
|
|
133
|
+
load_rate_hz=None,
|
|
134
|
+
load_streams=None,
|
|
135
|
+
load_interval_jitter_ms=None,
|
|
136
|
+
load_interval_jitter_seed=None,
|
|
137
|
+
)
|
|
138
|
+
with pytest.raises(RuntimeError, match="same rosotacom"):
|
|
139
|
+
_publish_load_override(args)
|
|
80
140
|
|
|
81
141
|
|
|
82
142
|
def test_no_load_leaves_the_session_to_say_what_it_expects():
|
{rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/.devcontainer/devcontainer.json.template
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/.devcontainer/re_generate_devcontainer_json.py
RENAMED
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/.github/ISSUE_TEMPLATE/documentation-audit.md
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/.github/ISSUE_TEMPLATE/implementation-cleanup.md
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/.github/ISSUE_TEMPLATE/quality-workflow.md
RENAMED
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/.github/ISSUE_TEMPLATE/release-process.md
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/.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.dev81 → rosotacom_dev-2.5.dev83}/.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.dev81 → rosotacom_dev-2.5.dev83}/calibration/capacity-size-tight-cyclone.json
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/calibration/probe-loss-gop-tight-cyclone.json
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/calibration/probe-loss-nominal-cyclone.json
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/calibration/probe-loss-tight-cyclone.json
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/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
|
|
File without changes
|
{rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/findings/cyclone-spdp-discovery-bursts.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/findings/head-of-line-irregularity.md
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/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.dev81 → rosotacom_dev-2.5.dev83}/docs/findings/queueing-adds-delay-not-loss.md
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/findings/reorder-becomes-reader-loss.md
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/findings/repro/decode_chain_repro.py
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/docs/findings/repro/reorder_drop_repro.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev81 → rosotacom_dev-2.5.dev83}/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.dev81 → rosotacom_dev-2.5.dev83}/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.dev81 → rosotacom_dev-2.5.dev83}/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
|