rosotacom-dev 2.5.dev1__tar.gz → 2.5.dev3__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.dev1 → rosotacom_dev-2.5.dev3}/PKG-INFO +1 -1
- rosotacom_dev-2.5.dev3/docs/github-repository-settings.md +155 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/cli.py +14 -2
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom_dev.egg-info/PKG-INFO +1 -1
- rosotacom_dev-2.5.dev3/src/rosotacom_dev.egg-info/scm_version.json +8 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/unit/test_cli.py +36 -0
- rosotacom_dev-2.5.dev1/docs/github-repository-settings.md +0 -81
- rosotacom_dev-2.5.dev1/src/rosotacom_dev.egg-info/scm_version.json +0 -8
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/.devcontainer/devcontainer.json.template +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/.devcontainer/re_generate_devcontainer_json.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/.github/CODEOWNERS +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/.github/ISSUE_TEMPLATE/documentation-audit.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/.github/ISSUE_TEMPLATE/implementation-cleanup.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/.github/ISSUE_TEMPLATE/quality-workflow.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/.github/ISSUE_TEMPLATE/redesign.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/.github/ISSUE_TEMPLATE/release-process.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/.github/ISSUE_TEMPLATE/repository-diagnosis.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/.github/ISSUE_TEMPLATE/test-ci-audit.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/.github/ISSUE_TEMPLATE/work-item.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/.github/dependabot.yml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/.github/workflows/benchmark-calibrate.yml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/.github/workflows/benchmark-gate.yml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/.github/workflows/dev-release.yml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/.github/workflows/image-scan.yml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/.github/workflows/nightly-e2e.yml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/.github/workflows/pr-lightweight.yml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/.github/workflows/pr-merge-gate.yml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/.github/workflows/release.yml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/.pre-commit-config.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/AGENTS.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/CONCURRENCY.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/CONTRIBUTING.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/DEVELOPMENT_PRINCIPLES.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/LICENSE.txt +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/MANIFEST.in +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/README.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/budgets.jsonl +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/calibration/README.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/calibration/capacity-size-tight-cyclone.json +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/calibration/probe-loss-gop-tight-cyclone.json +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/calibration/probe-loss-nominal-cyclone.json +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/calibration/probe-loss-tight-cyclone.json +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/calibration/probe-loss-tight-fastdds.json +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/calibration/probe-loss-tight-zenoh.json +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/codecov.yml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/deployment-configuration.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/benchmark-ab.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/benchmark-bag-as-load.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/ci.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/ffmpeg-keyframes.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/findings/README.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/findings/cyclone-spdp-discovery-bursts.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/findings/delay-alone-no-loss.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/findings/head-of-line-irregularity.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/findings/jitter-loss-bandwidth-latency.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/findings/lighter-message-loss.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/findings/zero-loss-boundaries-18kb-20hz.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/forensics-report.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/geo-link-map.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/link-trace.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/owner-runbook.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/performance-bands.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/playbooks/README.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/quality-model.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/release-notes/TEMPLATE.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/release-notes/v2.1.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/release-notes/v2.2.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/release-notes/v2.3.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/release-notes/v2.4.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/release.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/rfcs/0001-expectation-driven-test-suite.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/rfcs/0002-expectation-concepts.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/rfcs/0003-metric-backbone.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/rfcs/0004-network-profiles.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/rfcs/0005-benchmark-genres-and-ci.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/rfcs/0006-dynamic-qos.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/rfcs/0007-regression-gate.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/rfcs/README.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/testing.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/work-items.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/install.sh +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/justfile +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/media/control_center.png +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/media/echo_test.png +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/media/forensics-report-example.png +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/media/host.png +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/media/vehicle.png +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/pyproject.toml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/requirements.txt +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/rosotacom.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/run_session_in_container.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/session-configuration.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/setup.cfg +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/__init__.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/__main__.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/anonymize.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/bag_ground_truth.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/benched_set.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/benchmark.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/bundle_check.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/cli_benchmark.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/deployment.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/ffmpeg_packet.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/forensics.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/geomap.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/network_profiles.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/network_shaper.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/plots.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/py.typed +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/benched-set.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/.gitignore +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/README.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/__init__.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/bags/8_drop_reference/metadata.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/deployment.example.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/profiles.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/rosotacom.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scenarios/2_native_chatter/scenario-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/1_heartbeat/run_machine_a.sh +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/1_heartbeat/run_machine_b.sh +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/run_external.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/wait_for_echo_topic.sh +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/run_external.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/external_session.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/foxglove.json +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/run_external.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/costmap_1second/costmap_1second_0.mcap +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/costmap_1second/metadata.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/run_external.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/external_session.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/foxglove.json +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/run_external.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/costmap_1second/costmap_1second_0.mcap +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/costmap_1second/metadata.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/run_external.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/external_session.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/run_external.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/external_session.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/run_external.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/external_session.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/run_external.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/external.ros2docker.json +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/external_session.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/run_communication.sh +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/run_external.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/sessions/10_restamp/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/sessions/11_trickle/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/sessions/12_content_integrity/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/sessions/13_link_latency/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/sessions/14_remote_assist_anonymized/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/sessions/15_remote_assist_anonymized_costmap/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/sessions/16_remote_assist_anonymized_camera/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/sessions/17_synthetic_camera_quality/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/sessions/1_heartbeat/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/sessions/1_heartbeat_status/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/sessions/2_native_chatter/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/sessions/3_comp_occ_grid/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/sessions/4_comp_occ_grid_zen/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/sessions/5_sized_payload/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/sessions/6_sized_payload_zen/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/sessions/7_latched_static/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/sessions/8_drop/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/sessions/9_throttle/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/sessions/bench_1_1_capacity/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/sessions/bench_1_2_load_sweep/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/sessions/bench_1_3_ramp/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/sessions/bench_1_4_recovery/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/sessions/bench_1_5_camera/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ros2docker.json.example +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/.vscode/c_cpp_properties.json +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/.vscode/settings.json +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_easy_mode.xml.template +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_initial_peer_list.xml.template +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v2.xml.template +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v3.xml.template +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v4.xml.template +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v5.xml.template +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ota_configs/create_zenoh_json5.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ota_configs/cyclonedds_minimal.xml.template +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ota_configs/cyclonedds_tuned.xml.template +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ota_configs/fastdds_unicast.xml.template +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ota_configs/get_ota_xml.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ota_configs/utils.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ota_configs/zenoh.json5.template +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/.gitkeep +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_cpp/CMakeLists.txt +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_cpp/COLCON_IGNORE +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_cpp/LICENSE.txt +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_cpp/package.xml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_cpp/src/hz_monitor.cpp +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_cpp/src/universal_compressor.cpp +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_cpp/src/universal_decompressor.cpp +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_msgs/CMakeLists.txt +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_msgs/LICENSE.txt +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/CompressedData.msg +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/EchoHeartbeat.msg +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/OtaStamped.msg +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_msgs/msg/SizedPayload.msg +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_msgs/package.xml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/LICENSE.txt +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/__init__.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/base_bridge_relay.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/bridge_in.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/bridge_out.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/heartbeat_echo.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/hz_monitor.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/image_bandwidth_reducer.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/image_pixel_capper.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/lanelet_saver.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/latch_relay.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/costmap_remapper.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/marker_remapper.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/speed_test.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/tf_remapper.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/traffic_monitor.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/wifi_network_analysis_1.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/link_bytes.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/link_trace.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/local_global_frame_bridge.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/localization_map_split_reduce_saver.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/msg_transform.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/pair_management.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/pub_sub_pair.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/qos.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/relay_in.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/relay_out.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/restamp.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/sized_publisher.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/stage_latency.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/stage_latency_core.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/status_overview.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/status_overview_core.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/tf_map_to_cart_saver.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/topic_monitor.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/topic_resolution.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/trickle.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_compressor.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_decompressor.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_ota_unwrapper.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_ota_wrapper.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/package.xml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/resource/com_py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/setup.cfg +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/setup.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/test/test_copyright.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/test/test_flake8.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/ros2src/com_py/test/test_pep257.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/session/content/base/session_plugin_base.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/session/content/network/up_connectivity.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/session/content/network/wifi_network_analysis_2.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/session/creation/anonymize_bag.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/session/creation/catmux_log_setup.sh +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/session/creation/create_session_yaml.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/session/creation/generate_session_files.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/session/creation/run_session.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/session/creation/run_session_in_external_terminal.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/ws/session/creation/strip_ansi.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/status_eval.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/stream_stats.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/trace_profiles.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/transit.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/video_quality.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom_dev.egg-info/SOURCES.txt +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom_dev.egg-info/dependency_links.txt +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom_dev.egg-info/entry_points.txt +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom_dev.egg-info/requires.txt +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom_dev.egg-info/scm_file_list.json +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom_dev.egg-info/top_level.txt +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/stop_session_in_container.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/terminology.md +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/contract/test_benched_set_registry.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/contract/test_findings.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/contract/test_markdown_links.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/contract/test_ota_source_bundle.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/contract/test_package_metadata.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/contract/test_packaged_resources.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/contract/test_profile_covers_generated_commands.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/contract/test_pytest_policy.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/contract/test_readme_examples.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/contract/test_security_maintenance_config.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/contract/test_workflow_contracts.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/e2e/conftest.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/e2e/test_anonymize_e2e.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/e2e/test_benchmark_ab.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/e2e/test_benchmark_capacity.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/e2e/test_benchmark_replay.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/e2e/test_parallel_smoke.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/e2e/test_smoke.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/e2e/test_timeline_stepping.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/e2e/test_video_quality_e2e.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/sessions/generate_rmw_matrix.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-local_zenoh-ros2dds-ota/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-ota/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/sessions/rmw_matrix/1_heartbeat_cyclone-ota-tuned/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/sessions/rmw_matrix/1_heartbeat_fastdds/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/sessions/rmw_matrix/1_heartbeat_zen-endpoints/session-definition.yaml +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/unit/test_anonymize.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/unit/test_bag_ground_truth.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/unit/test_benched_set.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/unit/test_benchmark.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/unit/test_bundle_check.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/unit/test_cli_benchmark.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/unit/test_concurrency.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/unit/test_deployment.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/unit/test_ffmpeg_packet.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/unit/test_forensics.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/unit/test_geomap.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/unit/test_link_bytes.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/unit/test_link_trace.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/unit/test_network_profiles.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/unit/test_network_shaper.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/unit/test_ota_xml.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/unit/test_plots.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/unit/test_stage_latency.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/unit/test_status_eval.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/unit/test_status_overview.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/unit/test_stream_stats.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/unit/test_trace_profiles.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/unit/test_transit.py +0 -0
- {rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/tests/unit/test_video_quality.py +0 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# GitHub Repository Settings
|
|
2
|
+
|
|
3
|
+
These settings live outside git and must be verified separately in every
|
|
4
|
+
repository using this shared codebase. The GitHub UI, CLI, and API remain the
|
|
5
|
+
live source of truth.
|
|
6
|
+
|
|
7
|
+
## Branch Protection
|
|
8
|
+
|
|
9
|
+
Expected shared state:
|
|
10
|
+
|
|
11
|
+
- `main` is the protected release line.
|
|
12
|
+
- The repository's active development/default branch is protected.
|
|
13
|
+
- Pull requests are required.
|
|
14
|
+
- The required status check is `ci-success` — the aggregate gate job in
|
|
15
|
+
`pr-merge-gate.yml`, not the individual lanes. It `needs` all of them and runs
|
|
16
|
+
under `if: always()`, so it turns red rather than vanishing when one fails.
|
|
17
|
+
Requiring the lanes individually would mean editing this ruleset every time
|
|
18
|
+
CI gains or renames a job; requiring the aggregate means CI can change shape
|
|
19
|
+
without the ruleset drifting.
|
|
20
|
+
- "Require branches to be up to date before merging" (`strict`) is **off**. With
|
|
21
|
+
auto-merge enabled it would make every merge invalidate all other open PRs,
|
|
22
|
+
each then waiting for a rebase.
|
|
23
|
+
- The bypass list contains the Repository role `admin` and nothing else, so the
|
|
24
|
+
owner is not locked out by a stuck check while the agent account still cannot
|
|
25
|
+
merge around one. See "Identities" below.
|
|
26
|
+
- Squash merges are allowed.
|
|
27
|
+
- CodeQL default setup is enabled for Actions and Python.
|
|
28
|
+
- The `release` environment and `PYPI_PUBLISH_URL` variable point at this
|
|
29
|
+
repository's intended package index.
|
|
30
|
+
|
|
31
|
+
Verify:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
REPO="$(gh repo view --json nameWithOwner --jq .nameWithOwner)"
|
|
35
|
+
DEFAULT_BRANCH="$(gh repo view --repo "$REPO" --json defaultBranchRef --jq .defaultBranchRef.name)"
|
|
36
|
+
gh ruleset list --repo "$REPO" --parents
|
|
37
|
+
gh ruleset check "$DEFAULT_BRANCH" --repo "$REPO"
|
|
38
|
+
gh ruleset check main --repo "$REPO"
|
|
39
|
+
gh api "repos/$REPO/code-scanning/default-setup"
|
|
40
|
+
gh variable get PYPI_PUBLISH_URL --repo "$REPO"
|
|
41
|
+
|
|
42
|
+
# the two rules most likely to drift back, read straight from the ruleset
|
|
43
|
+
gh api "repos/$REPO/rulesets/$(gh api "repos/$REPO/rulesets" --jq '.[0].id')" \
|
|
44
|
+
--jq '{bypass: [.bypass_actors[].actor_type],
|
|
45
|
+
checks: [.rules[] | select(.type=="required_status_checks")
|
|
46
|
+
| .parameters.required_status_checks[].context],
|
|
47
|
+
strict: [.rules[] | select(.type=="required_status_checks")
|
|
48
|
+
| .parameters.strict_required_status_checks_policy]}'
|
|
49
|
+
|
|
50
|
+
# who acts on the repository, and with what
|
|
51
|
+
gh api "repos/$REPO/collaborators" --jq '.[] | "\(.login) \(.role_name)"'
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
`gh ruleset check` reports which rules apply, not which status checks they
|
|
55
|
+
require. A ruleset can be named for CI and still carry no
|
|
56
|
+
`required_status_checks` rule, in which case auto-merge will merge a pull
|
|
57
|
+
request whose checks are red. Read the rule types out directly:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
gh api "repos/$REPO/rulesets" --jq '.[].id' \
|
|
61
|
+
| xargs -I{} gh api "repos/$REPO/rulesets/{}" \
|
|
62
|
+
--jq '{name, rules: [.rules[] | select(.type=="required_status_checks")
|
|
63
|
+
| .parameters.required_status_checks[].context]}'
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Expected output names `ci-success`. An empty list is the drift this section
|
|
67
|
+
exists to catch.
|
|
68
|
+
|
|
69
|
+
## Trusted Publishers
|
|
70
|
+
|
|
71
|
+
PyPI authorizes an upload by matching the OIDC claims of the *workflow file*
|
|
72
|
+
that requests it, so a publisher registration is per filename, not per
|
|
73
|
+
repository. This codebase publishes from two:
|
|
74
|
+
|
|
75
|
+
| Workflow | Publishes | Registration |
|
|
76
|
+
|---|---|---|
|
|
77
|
+
| `release.yml` | stable `vX.Y.Z` tags | required |
|
|
78
|
+
| `dev-release.yml` | `X.Y.devN` from the development branch | required for the development channel |
|
|
79
|
+
|
|
80
|
+
A missing registration fails at upload with `invalid-publisher: valid token, but
|
|
81
|
+
no corresponding publisher`, after a completely successful build. The message
|
|
82
|
+
prints the claims it presented; `workflow_ref` is the filename to register.
|
|
83
|
+
|
|
84
|
+
Register on PyPI under the project's *Publishing* settings: owner, repository,
|
|
85
|
+
the workflow filename, and an empty environment (this codebase deliberately uses
|
|
86
|
+
no GitHub environment, so that no repository sharing it needs environment-admin
|
|
87
|
+
rights).
|
|
88
|
+
|
|
89
|
+
## Identities
|
|
90
|
+
|
|
91
|
+
Two accounts act on this repository, and the difference between them is the
|
|
92
|
+
point: work done by an agent must be attributable and must not be able to
|
|
93
|
+
change the rules it runs under.
|
|
94
|
+
|
|
95
|
+
| | `develNor` | `develNor-agent` |
|
|
96
|
+
|---|---|---|
|
|
97
|
+
| Relation | owner | collaborator |
|
|
98
|
+
| Repository permission | admin | write |
|
|
99
|
+
| Ruleset bypass | yes (Repository role `admin`) | no |
|
|
100
|
+
| Credential | interactive login | classic PAT in `.agents/github.env` |
|
|
101
|
+
|
|
102
|
+
**A personal repository has no role picker.** Adding a collaborator to a
|
|
103
|
+
repository owned by a user — as opposed to an organization — grants write, with
|
|
104
|
+
no read/triage/maintain/admin choice offered. So the owner/agent boundary is not
|
|
105
|
+
drawn by the collaborator entry; it is drawn by two things that *are*
|
|
106
|
+
configurable: the agent is not admin, and the ruleset's bypass list names the
|
|
107
|
+
`admin` role only. An agent therefore cannot merge without `ci-success`, cannot
|
|
108
|
+
force-push, and cannot edit the ruleset that says so.
|
|
109
|
+
|
|
110
|
+
**Pushing must use HTTPS.** `origin` is an SSH URL, and SSH authenticates by
|
|
111
|
+
key, not by token: with an SSH remote every push lands under whoever owns the
|
|
112
|
+
key, no matter which `GH_TOKEN` is set. An agent push must therefore name an
|
|
113
|
+
HTTPS URL carrying its own PAT. Getting this wrong is silent — the push
|
|
114
|
+
succeeds, under the wrong name.
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
set -a; . .agents/github.env; set +a
|
|
118
|
+
git push "https://${GITHUB_USER}:${GITHUB_PAT_CLASSIC}@github.com/develNor/ros_communication_devcontainer.git" HEAD
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**What the agent can verify for itself.** A write collaborator reads more repo
|
|
122
|
+
settings than expected, which is what makes autonomous advice about them
|
|
123
|
+
possible. Measured against this repository:
|
|
124
|
+
|
|
125
|
+
| Endpoint | agent | owner |
|
|
126
|
+
|---|---|---|
|
|
127
|
+
| `rulesets` | yes | yes |
|
|
128
|
+
| `actions/variables`, `actions/secrets` (names) | yes | yes |
|
|
129
|
+
| `environments` | yes | yes |
|
|
130
|
+
| merge settings (`allow_auto_merge`, …) | yes | yes |
|
|
131
|
+
| `actions/permissions/workflow` | **403** | yes |
|
|
132
|
+
| `vulnerability-alerts` | **404** | yes |
|
|
133
|
+
| `hooks` | **404** | yes |
|
|
134
|
+
| `security_and_analysis` on the repo object | **null** | yes |
|
|
135
|
+
|
|
136
|
+
Scope is not the limit here — the PAT already carries `read:repo_hook` and still
|
|
137
|
+
gets 404 on `hooks`, because repository role decides, not token scope. The four
|
|
138
|
+
denied items are all owner-only checks; an agent asked to audit them should say
|
|
139
|
+
so rather than report an absent value as a finding.
|
|
140
|
+
|
|
141
|
+
## Repository Metadata
|
|
142
|
+
|
|
143
|
+
Expected topics include `ros2`, `docker`, `robotics`, `teleoperation`, and
|
|
144
|
+
`communication`.
|
|
145
|
+
|
|
146
|
+
Verify:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
gh repo view --json description,homepageUrl,repositoryTopics
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Drift Handling
|
|
153
|
+
|
|
154
|
+
If GitHub state differs from this document, either update the live setting to
|
|
155
|
+
match the documented contract or update this document in a PR if policy changed.
|
|
@@ -98,7 +98,19 @@ SESSION_CONFIG_CONTAINER_DIR = "/session/configs"
|
|
|
98
98
|
SESSION_DEFINITION_CONTAINER_DIR = "/session/definitions"
|
|
99
99
|
SESSION_INSTANCE_CONTAINER_DIR = "/session/instances"
|
|
100
100
|
EXTERNAL_SESSION_CONTAINER_DIR = "/session/current"
|
|
101
|
-
|
|
101
|
+
# Run through the interpreter, never as a bare path. `docker exec` on a bare
|
|
102
|
+
# path relies on the file's executable bit, and a wheel does not carry
|
|
103
|
+
# executable bits for package data: the bit is present in a checkout and gone
|
|
104
|
+
# after an install. Every packaged machine therefore failed with
|
|
105
|
+
# `exec: "/ws/session/creation/run_session.py": permission denied` and exit 126,
|
|
106
|
+
# while the development laptop — an editable install over the checkout — worked.
|
|
107
|
+
# That is the one shape no test exercised, and the only shape a control centre,
|
|
108
|
+
# a vehicle or a bench machine ever runs.
|
|
109
|
+
#
|
|
110
|
+
# Not relying on the bit beats making the bit survive packaging: one is a
|
|
111
|
+
# property of this command, the other a property of every tool in the chain.
|
|
112
|
+
# `anonymize_bag.py` two thousand lines below already does it this way.
|
|
113
|
+
RUN_SESSION_CONTAINER_ARGV = ("python3", "/ws/session/creation/run_session.py")
|
|
102
114
|
DEFAULT_SMOKE_SESSION = "1_heartbeat"
|
|
103
115
|
OTA_SUDO_MODES = ("passwordless", "askpass")
|
|
104
116
|
|
|
@@ -4299,7 +4311,7 @@ def _session_command(
|
|
|
4299
4311
|
link_trace_modem_command: str | None = None,
|
|
4300
4312
|
) -> list[str]:
|
|
4301
4313
|
parts = [
|
|
4302
|
-
|
|
4314
|
+
*RUN_SESSION_CONTAINER_ARGV,
|
|
4303
4315
|
"--session-dir",
|
|
4304
4316
|
session.container_dir,
|
|
4305
4317
|
"--output-dir",
|
|
@@ -1759,6 +1759,7 @@ def test_peer_binding_identity_and_command_helpers(tmp_path: Path, monkeypatch:
|
|
|
1759
1759
|
peer_address_overrides={"a": "10.0.0.1", "b": "10.0.0.2"},
|
|
1760
1760
|
attach_mode="attach",
|
|
1761
1761
|
) == [
|
|
1762
|
+
"python3",
|
|
1762
1763
|
"/ws/session/creation/run_session.py",
|
|
1763
1764
|
"--session-dir",
|
|
1764
1765
|
"/session/current",
|
|
@@ -1801,6 +1802,41 @@ def test_peer_binding_identity_and_command_helpers(tmp_path: Path, monkeypatch:
|
|
|
1801
1802
|
rosotacom._parse_peer_address_overrides(["a=1.1.1.1", "a=2.2.2.2"])
|
|
1802
1803
|
|
|
1803
1804
|
|
|
1805
|
+
def test_container_scripts_run_through_the_interpreter() -> None:
|
|
1806
|
+
"""No `docker exec` may depend on a file's executable bit.
|
|
1807
|
+
|
|
1808
|
+
A wheel does not carry executable bits for package data, so a bare script
|
|
1809
|
+
path works from a checkout and fails from an install with
|
|
1810
|
+
|
|
1811
|
+
exec: "/ws/session/creation/run_session.py": permission denied
|
|
1812
|
+
|
|
1813
|
+
and exit 126. That broke `rosotacom start` on every packaged machine —
|
|
1814
|
+
bench, control centre, vehicle — while the development laptop's editable
|
|
1815
|
+
install kept working, which is why it survived to a two-host bring-up on
|
|
1816
|
+
2026-08-09 before anyone saw it.
|
|
1817
|
+
|
|
1818
|
+
Asserted as a property rather than as one literal command, so a second
|
|
1819
|
+
script added later fails here instead of on a machine.
|
|
1820
|
+
"""
|
|
1821
|
+
assert rosotacom.RUN_SESSION_CONTAINER_ARGV[0] == "python3"
|
|
1822
|
+
assert rosotacom.RUN_SESSION_CONTAINER_ARGV[1].endswith("/run_session.py")
|
|
1823
|
+
|
|
1824
|
+
# And the same for any container script added later. Comment lines are
|
|
1825
|
+
# dropped first: the explanation above quotes the failing path, and a test
|
|
1826
|
+
# that reads prose as code would fail on the wrong thing.
|
|
1827
|
+
code = "\n".join(
|
|
1828
|
+
line
|
|
1829
|
+
for line in Path(rosotacom.__file__).read_text(encoding="utf-8").splitlines()
|
|
1830
|
+
if not line.lstrip().startswith("#")
|
|
1831
|
+
)
|
|
1832
|
+
for match in re.finditer(r'"(/ws/[^"]*\.py)"', code):
|
|
1833
|
+
preceding = code[max(0, match.start() - 200) : match.start()]
|
|
1834
|
+
assert '"python3"' in preceding, (
|
|
1835
|
+
f"{match.group(1)} is handed to the container without an interpreter; "
|
|
1836
|
+
"a wheel install has no executable bit and this fails with exit 126"
|
|
1837
|
+
)
|
|
1838
|
+
|
|
1839
|
+
|
|
1804
1840
|
def test_resolve_session_and_base_extra_run_args(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None:
|
|
1805
1841
|
session = tmp_path / "sessions" / "1_heartbeat"
|
|
1806
1842
|
session.mkdir(parents=True)
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
# GitHub Repository Settings
|
|
2
|
-
|
|
3
|
-
These settings live outside git and must be verified separately in every
|
|
4
|
-
repository using this shared codebase. The GitHub UI, CLI, and API remain the
|
|
5
|
-
live source of truth.
|
|
6
|
-
|
|
7
|
-
## Branch Protection
|
|
8
|
-
|
|
9
|
-
Expected shared state:
|
|
10
|
-
|
|
11
|
-
- `main` is the protected release line.
|
|
12
|
-
- The repository's active development/default branch is protected.
|
|
13
|
-
- Pull requests are required.
|
|
14
|
-
- The required status check is `ci-success`.
|
|
15
|
-
- Squash merges are allowed.
|
|
16
|
-
- CodeQL default setup is enabled for Actions and Python.
|
|
17
|
-
- The `release` environment and `PYPI_PUBLISH_URL` variable point at this
|
|
18
|
-
repository's intended package index.
|
|
19
|
-
|
|
20
|
-
Verify:
|
|
21
|
-
|
|
22
|
-
```bash
|
|
23
|
-
REPO="$(gh repo view --json nameWithOwner --jq .nameWithOwner)"
|
|
24
|
-
DEFAULT_BRANCH="$(gh repo view --repo "$REPO" --json defaultBranchRef --jq .defaultBranchRef.name)"
|
|
25
|
-
gh ruleset list --repo "$REPO" --parents
|
|
26
|
-
gh ruleset check "$DEFAULT_BRANCH" --repo "$REPO"
|
|
27
|
-
gh ruleset check main --repo "$REPO"
|
|
28
|
-
gh api "repos/$REPO/code-scanning/default-setup"
|
|
29
|
-
gh variable get PYPI_PUBLISH_URL --repo "$REPO"
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
`gh ruleset check` reports which rules apply, not which status checks they
|
|
33
|
-
require. A ruleset can be named for CI and still carry no
|
|
34
|
-
`required_status_checks` rule, in which case auto-merge will merge a pull
|
|
35
|
-
request whose checks are red. Read the rule types out directly:
|
|
36
|
-
|
|
37
|
-
```bash
|
|
38
|
-
gh api "repos/$REPO/rulesets" --jq '.[].id' \
|
|
39
|
-
| xargs -I{} gh api "repos/$REPO/rulesets/{}" \
|
|
40
|
-
--jq '{name, rules: [.rules[] | select(.type=="required_status_checks")
|
|
41
|
-
| .parameters.required_status_checks[].context]}'
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
Expected output names `ci-success`. An empty list is the drift this section
|
|
45
|
-
exists to catch.
|
|
46
|
-
|
|
47
|
-
## Trusted Publishers
|
|
48
|
-
|
|
49
|
-
PyPI authorizes an upload by matching the OIDC claims of the *workflow file*
|
|
50
|
-
that requests it, so a publisher registration is per filename, not per
|
|
51
|
-
repository. This codebase publishes from two:
|
|
52
|
-
|
|
53
|
-
| Workflow | Publishes | Registration |
|
|
54
|
-
|---|---|---|
|
|
55
|
-
| `release.yml` | stable `vX.Y.Z` tags | required |
|
|
56
|
-
| `dev-release.yml` | `X.Y.devN` from the development branch | required for the development channel |
|
|
57
|
-
|
|
58
|
-
A missing registration fails at upload with `invalid-publisher: valid token, but
|
|
59
|
-
no corresponding publisher`, after a completely successful build. The message
|
|
60
|
-
prints the claims it presented; `workflow_ref` is the filename to register.
|
|
61
|
-
|
|
62
|
-
Register on PyPI under the project's *Publishing* settings: owner, repository,
|
|
63
|
-
the workflow filename, and an empty environment (this codebase deliberately uses
|
|
64
|
-
no GitHub environment, so that no repository sharing it needs environment-admin
|
|
65
|
-
rights).
|
|
66
|
-
|
|
67
|
-
## Repository Metadata
|
|
68
|
-
|
|
69
|
-
Expected topics include `ros2`, `docker`, `robotics`, `teleoperation`, and
|
|
70
|
-
`communication`.
|
|
71
|
-
|
|
72
|
-
Verify:
|
|
73
|
-
|
|
74
|
-
```bash
|
|
75
|
-
gh repo view --json description,homepageUrl,repositoryTopics
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
## Drift Handling
|
|
79
|
-
|
|
80
|
-
If GitHub state differs from this document, either update the live setting to
|
|
81
|
-
match the documented contract or update this document in a PR if policy changed.
|
|
File without changes
|
{rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/.devcontainer/re_generate_devcontainer_json.py
RENAMED
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/.github/ISSUE_TEMPLATE/documentation-audit.md
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/.github/ISSUE_TEMPLATE/implementation-cleanup.md
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/.github/ISSUE_TEMPLATE/quality-workflow.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/.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.dev1 → rosotacom_dev-2.5.dev3}/calibration/capacity-size-tight-cyclone.json
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/calibration/probe-loss-gop-tight-cyclone.json
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/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.dev1 → rosotacom_dev-2.5.dev3}/docs/findings/cyclone-spdp-discovery-bursts.md
RENAMED
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/findings/head-of-line-irregularity.md
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/docs/findings/jitter-loss-bandwidth-latency.md
RENAMED
|
File without changes
|
|
File without changes
|
{rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/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
|
{rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/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.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/.gitignore
RENAMED
|
File without changes
|
{rosotacom_dev-2.5.dev1 → rosotacom_dev-2.5.dev3}/src/rosotacom/resources/examples/README.md
RENAMED
|
File without changes
|