rosotacom-dev 2.2__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.2/.devcontainer/devcontainer.json.template +25 -0
- rosotacom_dev-2.2/.devcontainer/re_generate_devcontainer_json.py +48 -0
- rosotacom_dev-2.2/.github/CODEOWNERS +8 -0
- rosotacom_dev-2.2/.github/ISSUE_TEMPLATE/documentation-audit.md +67 -0
- rosotacom_dev-2.2/.github/ISSUE_TEMPLATE/implementation-cleanup.md +60 -0
- rosotacom_dev-2.2/.github/ISSUE_TEMPLATE/quality-workflow.md +68 -0
- rosotacom_dev-2.2/.github/ISSUE_TEMPLATE/redesign.md +59 -0
- rosotacom_dev-2.2/.github/ISSUE_TEMPLATE/release-process.md +89 -0
- rosotacom_dev-2.2/.github/ISSUE_TEMPLATE/repository-diagnosis.md +104 -0
- rosotacom_dev-2.2/.github/ISSUE_TEMPLATE/test-ci-audit.md +61 -0
- rosotacom_dev-2.2/.github/ISSUE_TEMPLATE/work-item.md +46 -0
- rosotacom_dev-2.2/.github/PULL_REQUEST_TEMPLATE.md +43 -0
- rosotacom_dev-2.2/.github/dependabot.yml +22 -0
- rosotacom_dev-2.2/.github/workflows/benchmark-calibrate.yml +176 -0
- rosotacom_dev-2.2/.github/workflows/benchmark-gate.yml +173 -0
- rosotacom_dev-2.2/.github/workflows/image-scan.yml +68 -0
- rosotacom_dev-2.2/.github/workflows/nightly-e2e.yml +105 -0
- rosotacom_dev-2.2/.github/workflows/pr-lightweight.yml +43 -0
- rosotacom_dev-2.2/.github/workflows/pr-merge-gate.yml +497 -0
- rosotacom_dev-2.2/.github/workflows/release.yml +258 -0
- rosotacom_dev-2.2/.pre-commit-config.yaml +31 -0
- rosotacom_dev-2.2/AGENTS.md +85 -0
- rosotacom_dev-2.2/CONCURRENCY.md +74 -0
- rosotacom_dev-2.2/CONTRIBUTING.md +134 -0
- rosotacom_dev-2.2/DEVELOPMENT_PRINCIPLES.md +49 -0
- rosotacom_dev-2.2/LICENSE.txt +25 -0
- rosotacom_dev-2.2/MANIFEST.in +6 -0
- rosotacom_dev-2.2/PKG-INFO +874 -0
- rosotacom_dev-2.2/README.md +829 -0
- rosotacom_dev-2.2/budgets.jsonl +15 -0
- rosotacom_dev-2.2/calibration/README.md +15 -0
- rosotacom_dev-2.2/calibration/capacity-size-tight-cyclone.json +28 -0
- rosotacom_dev-2.2/calibration/probe-loss-gop-tight-cyclone.json +52 -0
- rosotacom_dev-2.2/calibration/probe-loss-nominal-cyclone.json +52 -0
- rosotacom_dev-2.2/calibration/probe-loss-tight-cyclone.json +52 -0
- rosotacom_dev-2.2/calibration/probe-loss-tight-fastdds.json +52 -0
- rosotacom_dev-2.2/calibration/probe-loss-tight-zenoh.json +52 -0
- rosotacom_dev-2.2/codecov.yml +18 -0
- rosotacom_dev-2.2/deployment-configuration.md +99 -0
- rosotacom_dev-2.2/docs/benchmark-ab.md +172 -0
- rosotacom_dev-2.2/docs/benchmark-bag-as-load.md +124 -0
- rosotacom_dev-2.2/docs/ci.md +100 -0
- rosotacom_dev-2.2/docs/ffmpeg-keyframes.md +129 -0
- rosotacom_dev-2.2/docs/findings/README.md +36 -0
- rosotacom_dev-2.2/docs/findings/cyclone-spdp-discovery-bursts.md +56 -0
- rosotacom_dev-2.2/docs/findings/delay-alone-no-loss.md +70 -0
- rosotacom_dev-2.2/docs/findings/head-of-line-irregularity.md +61 -0
- rosotacom_dev-2.2/docs/findings/jitter-loss-bandwidth-latency.md +87 -0
- rosotacom_dev-2.2/docs/findings/lighter-message-loss.md +63 -0
- rosotacom_dev-2.2/docs/findings/zero-loss-boundaries-18kb-20hz.md +85 -0
- rosotacom_dev-2.2/docs/forensics-report.md +158 -0
- rosotacom_dev-2.2/docs/geo-link-map.md +93 -0
- rosotacom_dev-2.2/docs/github-repository-settings.md +46 -0
- rosotacom_dev-2.2/docs/link-trace.md +83 -0
- rosotacom_dev-2.2/docs/owner-runbook.md +57 -0
- rosotacom_dev-2.2/docs/performance-bands.md +130 -0
- rosotacom_dev-2.2/docs/playbooks/README.md +8 -0
- rosotacom_dev-2.2/docs/quality-model.md +181 -0
- rosotacom_dev-2.2/docs/release-notes/TEMPLATE.md +19 -0
- rosotacom_dev-2.2/docs/release-notes/v2.1.md +22 -0
- rosotacom_dev-2.2/docs/release-notes/v2.2.md +31 -0
- rosotacom_dev-2.2/docs/release.md +51 -0
- rosotacom_dev-2.2/docs/rfcs/0001-expectation-driven-test-suite.md +174 -0
- rosotacom_dev-2.2/docs/rfcs/0002-expectation-concepts.md +351 -0
- rosotacom_dev-2.2/docs/rfcs/0003-metric-backbone.md +343 -0
- rosotacom_dev-2.2/docs/rfcs/0004-network-profiles.md +334 -0
- rosotacom_dev-2.2/docs/rfcs/0005-benchmark-genres-and-ci.md +350 -0
- rosotacom_dev-2.2/docs/rfcs/0006-dynamic-qos.md +152 -0
- rosotacom_dev-2.2/docs/rfcs/0007-regression-gate.md +373 -0
- rosotacom_dev-2.2/docs/rfcs/README.md +35 -0
- rosotacom_dev-2.2/docs/testing.md +183 -0
- rosotacom_dev-2.2/docs/work-items.md +54 -0
- rosotacom_dev-2.2/install.sh +92 -0
- rosotacom_dev-2.2/justfile +143 -0
- rosotacom_dev-2.2/media/control_center.png +0 -0
- rosotacom_dev-2.2/media/echo_test.png +0 -0
- rosotacom_dev-2.2/media/forensics-report-example.png +0 -0
- rosotacom_dev-2.2/media/host.png +0 -0
- rosotacom_dev-2.2/media/vehicle.png +0 -0
- rosotacom_dev-2.2/pyproject.toml +152 -0
- rosotacom_dev-2.2/requirements.txt +1 -0
- rosotacom_dev-2.2/rosotacom.yaml +12 -0
- rosotacom_dev-2.2/run_session_in_container.py +9 -0
- rosotacom_dev-2.2/session-configuration.md +537 -0
- rosotacom_dev-2.2/setup.cfg +4 -0
- rosotacom_dev-2.2/src/rosotacom/__init__.py +32 -0
- rosotacom_dev-2.2/src/rosotacom/__main__.py +8 -0
- rosotacom_dev-2.2/src/rosotacom/anonymize.py +360 -0
- rosotacom_dev-2.2/src/rosotacom/bag_ground_truth.py +395 -0
- rosotacom_dev-2.2/src/rosotacom/benched_set.py +492 -0
- rosotacom_dev-2.2/src/rosotacom/benchmark.py +1842 -0
- rosotacom_dev-2.2/src/rosotacom/bundle_check.py +517 -0
- rosotacom_dev-2.2/src/rosotacom/cli.py +8637 -0
- rosotacom_dev-2.2/src/rosotacom/cli_benchmark.py +8211 -0
- rosotacom_dev-2.2/src/rosotacom/deployment.py +196 -0
- rosotacom_dev-2.2/src/rosotacom/ffmpeg_packet.py +123 -0
- rosotacom_dev-2.2/src/rosotacom/forensics.py +1172 -0
- rosotacom_dev-2.2/src/rosotacom/geomap.py +848 -0
- rosotacom_dev-2.2/src/rosotacom/network_profiles.py +563 -0
- rosotacom_dev-2.2/src/rosotacom/network_shaper.py +127 -0
- rosotacom_dev-2.2/src/rosotacom/plots.py +609 -0
- rosotacom_dev-2.2/src/rosotacom/py.typed +0 -0
- rosotacom_dev-2.2/src/rosotacom/resources/benched-set.yaml +317 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/.gitignore +1 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/README.md +163 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/__init__.py +1 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/bags/8_drop_reference/metadata.yaml +17 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/deployment.example.yaml +14 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/profiles.yaml +85 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/ros2docker.json +33 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/rosotacom.yaml +12 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scenarios/2_native_chatter/scenario-definition.yaml +10 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/1_heartbeat/run_machine_a.sh +9 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/1_heartbeat/run_machine_b.sh +9 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/external.ros2docker.json +21 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/run_communication.sh +9 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/run_external.py +15 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_a/wait_for_echo_topic.sh +10 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/external.ros2docker.json +19 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/run_communication.sh +9 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/2_native_chatter/machine_b/run_external.py +15 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/external.ros2docker.json +12 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/external_session.yaml +9 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/foxglove.json +89 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/run_communication.sh +9 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_a/run_external.py +15 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/costmap_1second/costmap_1second_0.mcap +0 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/costmap_1second/metadata.yaml +44 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/external.ros2docker.json +13 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/run_communication.sh +9 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/3_comp_occ_grid/machine_b/run_external.py +15 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/external.ros2docker.json +12 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/external_session.yaml +9 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/foxglove.json +89 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/run_communication.sh +9 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_a/run_external.py +15 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/costmap_1second/costmap_1second_0.mcap +0 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/costmap_1second/metadata.yaml +44 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/external.ros2docker.json +13 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/run_communication.sh +9 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/4_comp_occ_grid_zen/machine_b/run_external.py +15 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/external.ros2docker.json +20 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/external_session.yaml +22 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/run_communication.sh +9 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_a/run_external.py +15 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/external.ros2docker.json +20 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/external_session.yaml +22 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/run_communication.sh +9 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/5_sized_payload/machine_b/run_external.py +15 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/external.ros2docker.json +18 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/external_session.yaml +22 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/run_communication.sh +9 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_a/run_external.py +15 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/external.ros2docker.json +18 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/external_session.yaml +22 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/run_communication.sh +9 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/scripts/6_sized_payload_zen/machine_b/run_external.py +15 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/sessions/10_restamp/session-definition.yaml +39 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/sessions/11_trickle/session-definition.yaml +42 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/sessions/12_content_integrity/session-definition.yaml +33 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/sessions/13_link_latency/session-definition.yaml +42 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/sessions/14_remote_assist_anonymized/session-definition.yaml +211 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/sessions/15_remote_assist_anonymized_costmap/session-definition.yaml +59 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/sessions/16_remote_assist_anonymized_camera/session-definition.yaml +61 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/sessions/17_synthetic_camera_quality/session-definition.yaml +57 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/sessions/1_heartbeat/session-definition.yaml +26 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/sessions/1_heartbeat_status/session-definition.yaml +37 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/sessions/2_native_chatter/session-definition.yaml +34 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/sessions/3_comp_occ_grid/session-definition.yaml +43 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/sessions/4_comp_occ_grid_zen/session-definition.yaml +43 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/sessions/5_sized_payload/session-definition.yaml +39 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/sessions/6_sized_payload_zen/session-definition.yaml +50 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/sessions/7_latched_static/session-definition.yaml +49 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/sessions/8_drop/session-definition.yaml +37 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/sessions/9_throttle/session-definition.yaml +37 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/sessions/bench_1_1_capacity/session-definition.yaml +42 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/sessions/bench_1_2_load_sweep/session-definition.yaml +51 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/sessions/bench_1_3_ramp/session-definition.yaml +41 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/sessions/bench_1_4_recovery/session-definition.yaml +47 -0
- rosotacom_dev-2.2/src/rosotacom/resources/examples/sessions/bench_1_5_camera/session-definition.yaml +45 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ros2docker.json.example +33 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/.vscode/c_cpp_properties.json +20 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/.vscode/settings.json +8 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ota_configs/archive/fastdds_easy_mode.xml.template +32 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ota_configs/archive/fastdds_initial_peer_list.xml.template +21 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v2.xml.template +17 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v3.xml.template +48 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v4.xml.template +95 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ota_configs/archive/fastdds_v5.xml.template +64 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ota_configs/create_zenoh_json5.py +56 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ota_configs/cyclonedds_minimal.xml.template +9 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ota_configs/cyclonedds_tuned.xml.template +33 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ota_configs/fastdds_unicast.xml.template +71 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ota_configs/get_ota_xml.py +214 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ota_configs/utils.py +74 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ota_configs/zenoh.json5.template +32 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/.gitkeep +0 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_cpp/CMakeLists.txt +67 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_cpp/COLCON_IGNORE +0 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_cpp/LICENSE.txt +25 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_cpp/package.xml +37 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_cpp/src/hz_monitor.cpp +192 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_cpp/src/universal_compressor.cpp +283 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_cpp/src/universal_decompressor.cpp +306 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_msgs/CMakeLists.txt +22 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_msgs/LICENSE.txt +25 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_msgs/msg/CompressedData.msg +3 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_msgs/msg/EchoHeartbeat.msg +10 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_msgs/msg/OtaStamped.msg +4 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_msgs/msg/SizedPayload.msg +4 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_msgs/package.xml +25 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/LICENSE.txt +25 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/__init__.py +0 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/base_bridge_relay.py +106 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/bridge_in.py +76 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/bridge_out.py +70 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/heartbeat_echo.py +221 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/hz_monitor.py +178 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/image_bandwidth_reducer.py +218 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/image_pixel_capper.py +370 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/lanelet_saver.py +80 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/latch_relay.py +205 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/costmap_remapper.py +73 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/marker_remapper.py +93 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/speed_test.py +107 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/tf_remapper.py +156 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/traffic_monitor.py +91 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/legacy/wifi_network_analysis_1.py +213 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/link_bytes.py +177 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/link_trace.py +186 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/local_global_frame_bridge.py +465 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/localization_map_split_reduce_saver.py +258 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/msg_transform.py +277 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/pair_management.py +87 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/pub_sub_pair.py +145 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/qos.py +254 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/relay_in.py +78 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/relay_out.py +75 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/restamp.py +191 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/sized_publisher.py +244 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/stage_latency.py +64 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/stage_latency_core.py +51 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/status_overview.py +476 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/status_overview_core.py +989 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/tf_map_to_cart_saver.py +99 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/topic_monitor.py +327 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/topic_resolution.py +171 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/trickle.py +183 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_compressor.py +653 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_decompressor.py +372 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_ota_unwrapper.py +191 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/com_py/universal_ota_wrapper.py +154 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/package.xml +34 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/resource/com_py +0 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/setup.cfg +6 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/setup.py +55 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/test/test_copyright.py +25 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/test/test_flake8.py +25 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/ros2src/com_py/test/test_pep257.py +23 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/session/content/base/session_plugin_base.yaml +633 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/session/content/network/up_connectivity.py +364 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/session/content/network/wifi_network_analysis_2.py +215 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/session/creation/anonymize_bag.py +156 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/session/creation/catmux_log_setup.sh +65 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/session/creation/create_session_yaml.py +145 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/session/creation/generate_session_files.py +3217 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/session/creation/run_session.py +447 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/session/creation/run_session_in_external_terminal.py +54 -0
- rosotacom_dev-2.2/src/rosotacom/resources/ws/session/creation/strip_ansi.py +42 -0
- rosotacom_dev-2.2/src/rosotacom/status_eval.py +475 -0
- rosotacom_dev-2.2/src/rosotacom/stream_stats.py +650 -0
- rosotacom_dev-2.2/src/rosotacom/trace_profiles.py +561 -0
- rosotacom_dev-2.2/src/rosotacom/transit.py +249 -0
- rosotacom_dev-2.2/src/rosotacom/video_quality.py +906 -0
- rosotacom_dev-2.2/src/rosotacom_dev.egg-info/PKG-INFO +874 -0
- rosotacom_dev-2.2/src/rosotacom_dev.egg-info/SOURCES.txt +332 -0
- rosotacom_dev-2.2/src/rosotacom_dev.egg-info/dependency_links.txt +1 -0
- rosotacom_dev-2.2/src/rosotacom_dev.egg-info/entry_points.txt +4 -0
- rosotacom_dev-2.2/src/rosotacom_dev.egg-info/requires.txt +20 -0
- rosotacom_dev-2.2/src/rosotacom_dev.egg-info/scm_file_list.json +329 -0
- rosotacom_dev-2.2/src/rosotacom_dev.egg-info/scm_version.json +8 -0
- rosotacom_dev-2.2/src/rosotacom_dev.egg-info/top_level.txt +1 -0
- rosotacom_dev-2.2/stop_session_in_container.py +9 -0
- rosotacom_dev-2.2/terminology.md +358 -0
- rosotacom_dev-2.2/tests/contract/test_benched_set_registry.py +192 -0
- rosotacom_dev-2.2/tests/contract/test_findings.py +152 -0
- rosotacom_dev-2.2/tests/contract/test_markdown_links.py +103 -0
- rosotacom_dev-2.2/tests/contract/test_package_metadata.py +53 -0
- rosotacom_dev-2.2/tests/contract/test_packaged_resources.py +240 -0
- rosotacom_dev-2.2/tests/contract/test_profile_covers_generated_commands.py +78 -0
- rosotacom_dev-2.2/tests/contract/test_pytest_policy.py +64 -0
- rosotacom_dev-2.2/tests/contract/test_readme_examples.py +105 -0
- rosotacom_dev-2.2/tests/contract/test_security_maintenance_config.py +285 -0
- rosotacom_dev-2.2/tests/contract/test_workflow_contracts.py +189 -0
- rosotacom_dev-2.2/tests/e2e/conftest.py +14 -0
- rosotacom_dev-2.2/tests/e2e/test_anonymize_e2e.py +200 -0
- rosotacom_dev-2.2/tests/e2e/test_benchmark_ab.py +193 -0
- rosotacom_dev-2.2/tests/e2e/test_benchmark_capacity.py +262 -0
- rosotacom_dev-2.2/tests/e2e/test_benchmark_replay.py +151 -0
- rosotacom_dev-2.2/tests/e2e/test_parallel_smoke.py +189 -0
- rosotacom_dev-2.2/tests/e2e/test_smoke.py +1016 -0
- rosotacom_dev-2.2/tests/e2e/test_timeline_stepping.py +159 -0
- rosotacom_dev-2.2/tests/e2e/test_video_quality_e2e.py +104 -0
- rosotacom_dev-2.2/tests/sessions/generate_rmw_matrix.py +133 -0
- rosotacom_dev-2.2/tests/sessions/rmw_matrix/1_heartbeat_cyclone-local_zenoh-ros2dds-ota/session-definition.yaml +24 -0
- rosotacom_dev-2.2/tests/sessions/rmw_matrix/1_heartbeat_cyclone-ota/session-definition.yaml +28 -0
- rosotacom_dev-2.2/tests/sessions/rmw_matrix/1_heartbeat_cyclone-ota-tuned/session-definition.yaml +22 -0
- rosotacom_dev-2.2/tests/sessions/rmw_matrix/1_heartbeat_fastdds/session-definition.yaml +28 -0
- rosotacom_dev-2.2/tests/sessions/rmw_matrix/1_heartbeat_zen-endpoints/session-definition.yaml +24 -0
- rosotacom_dev-2.2/tests/unit/test_anonymize.py +511 -0
- rosotacom_dev-2.2/tests/unit/test_bag_ground_truth.py +167 -0
- rosotacom_dev-2.2/tests/unit/test_benched_set.py +250 -0
- rosotacom_dev-2.2/tests/unit/test_benchmark.py +1196 -0
- rosotacom_dev-2.2/tests/unit/test_bundle_check.py +121 -0
- rosotacom_dev-2.2/tests/unit/test_cli.py +2761 -0
- rosotacom_dev-2.2/tests/unit/test_cli_benchmark.py +3516 -0
- rosotacom_dev-2.2/tests/unit/test_concurrency.py +456 -0
- rosotacom_dev-2.2/tests/unit/test_deployment.py +111 -0
- rosotacom_dev-2.2/tests/unit/test_ffmpeg_packet.py +106 -0
- rosotacom_dev-2.2/tests/unit/test_forensics.py +518 -0
- rosotacom_dev-2.2/tests/unit/test_geomap.py +255 -0
- rosotacom_dev-2.2/tests/unit/test_link_bytes.py +126 -0
- rosotacom_dev-2.2/tests/unit/test_link_trace.py +131 -0
- rosotacom_dev-2.2/tests/unit/test_network_profiles.py +433 -0
- rosotacom_dev-2.2/tests/unit/test_network_shaper.py +136 -0
- rosotacom_dev-2.2/tests/unit/test_ota_xml.py +70 -0
- rosotacom_dev-2.2/tests/unit/test_plots.py +226 -0
- rosotacom_dev-2.2/tests/unit/test_stage_latency.py +34 -0
- rosotacom_dev-2.2/tests/unit/test_status_eval.py +506 -0
- rosotacom_dev-2.2/tests/unit/test_status_overview.py +901 -0
- rosotacom_dev-2.2/tests/unit/test_stream_stats.py +227 -0
- rosotacom_dev-2.2/tests/unit/test_trace_profiles.py +228 -0
- rosotacom_dev-2.2/tests/unit/test_transit.py +163 -0
- rosotacom_dev-2.2/tests/unit/test_video_quality.py +360 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// See https://containers.dev/implementors/json_reference/
|
|
2
|
+
{
|
|
3
|
+
"image": "#image_name",
|
|
4
|
+
"initializeCommand": "ros2docker build -f ./ros2docker.json",
|
|
5
|
+
"postCreateCommand": "/entrypoint.sh",
|
|
6
|
+
"workspaceMount": "",
|
|
7
|
+
"workspaceFolder": "/ws",
|
|
8
|
+
"runArgs": [
|
|
9
|
+
#docker_run_args,
|
|
10
|
+
],
|
|
11
|
+
"customizations": {
|
|
12
|
+
"vscode": {
|
|
13
|
+
"extensions": [
|
|
14
|
+
"ms-vscode.cpptools",
|
|
15
|
+
"ms-vscode.cpptools-themes",
|
|
16
|
+
"twxs.cmake",
|
|
17
|
+
"ms-python.python",
|
|
18
|
+
"ms-python.debugpy",
|
|
19
|
+
"ms-python.vscode-pylance",
|
|
20
|
+
"ms-iot.vscode-ros",
|
|
21
|
+
"mhutchie.git-graph"
|
|
22
|
+
]
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
import stat
|
|
5
|
+
|
|
6
|
+
script_dir = os.path.dirname(os.path.abspath(__file__))
|
|
7
|
+
project_dir = os.path.dirname(script_dir)
|
|
8
|
+
config_path = os.path.join(project_dir, "ros2docker.json")
|
|
9
|
+
|
|
10
|
+
from ros2docker.commands import make_run_command
|
|
11
|
+
from ros2docker.config import load_config, strip_json_comments
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def generate_file_from_template(template_path, output_path, substitutions):
|
|
15
|
+
with open(template_path, "r", encoding="utf-8") as file:
|
|
16
|
+
content = file.read()
|
|
17
|
+
for key, value in substitutions.items():
|
|
18
|
+
content = content.replace(key, value)
|
|
19
|
+
content = strip_json_comments(content)
|
|
20
|
+
content = "\n".join(line for line in content.splitlines() if line.strip())
|
|
21
|
+
if os.path.exists(output_path):
|
|
22
|
+
os.remove(output_path)
|
|
23
|
+
with open(output_path, "w", encoding="utf-8") as file:
|
|
24
|
+
file.write(content)
|
|
25
|
+
os.chmod(output_path, stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def main():
|
|
29
|
+
# Save the contents of the vsc-template-files
|
|
30
|
+
devcontainer_template_file = os.path.join(script_dir, "devcontainer.json.template")
|
|
31
|
+
devcontainer_file = os.path.join(script_dir, "devcontainer.json")
|
|
32
|
+
|
|
33
|
+
local_config = load_config(config_path)
|
|
34
|
+
run_command = make_run_command(config_path, override={"run_type": "up"})
|
|
35
|
+
image_name = local_config.get("image_name", "ros2docker")
|
|
36
|
+
image_index = run_command.index(image_name)
|
|
37
|
+
docker_run_args = run_command[2:image_index]
|
|
38
|
+
if docker_run_args and docker_run_args[-1] == "-d":
|
|
39
|
+
docker_run_args = docker_run_args[:-1]
|
|
40
|
+
|
|
41
|
+
substitutions = {
|
|
42
|
+
"#docker_run_args": str(docker_run_args).replace("'", '"')[1:-1],
|
|
43
|
+
"#image_name": str(image_name),
|
|
44
|
+
}
|
|
45
|
+
generate_file_from_template(devcontainer_template_file, devcontainer_file, substitutions)
|
|
46
|
+
|
|
47
|
+
if __name__ == "__main__":
|
|
48
|
+
main()
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# CODEOWNERS file for ros_communication_devcontainer
|
|
2
|
+
# High-risk CI, release, and packaging surfaces
|
|
3
|
+
/.github/ @develNor
|
|
4
|
+
/pyproject.toml @develNor
|
|
5
|
+
/justfile @develNor
|
|
6
|
+
/docs/release.md @develNor
|
|
7
|
+
/docs/release-notes/ @develNor
|
|
8
|
+
/src/rosotacom/resources/ @develNor
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Documentation audit
|
|
3
|
+
about: Align public-facing documentation with the repository and remove drift.
|
|
4
|
+
title: "Audit public-facing documentation"
|
|
5
|
+
labels: ready, documentation
|
|
6
|
+
assignees: ""
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
Make public-facing documentation consistent, non-redundant, aligned with the
|
|
12
|
+
repository, and no larger than it needs to be. Every document and section should
|
|
13
|
+
earn its place or be removed or merged into its canonical home.
|
|
14
|
+
|
|
15
|
+
## Scope
|
|
16
|
+
|
|
17
|
+
- README.
|
|
18
|
+
- CONTRIBUTING.
|
|
19
|
+
- DEVELOPMENT_PRINCIPLES.
|
|
20
|
+
- docs/.
|
|
21
|
+
- `.github/ISSUE_TEMPLATE/`.
|
|
22
|
+
- Package metadata if it contains public-facing descriptions.
|
|
23
|
+
|
|
24
|
+
## Document Ownership
|
|
25
|
+
|
|
26
|
+
Audit against the ownership map in
|
|
27
|
+
[docs/quality-model.md](../../docs/quality-model.md#document-ownership). Do not
|
|
28
|
+
restate that map here.
|
|
29
|
+
|
|
30
|
+
## Constraints
|
|
31
|
+
|
|
32
|
+
- Follow the shared [task contract](../../docs/quality-model.md#task-contract).
|
|
33
|
+
- Prefer one canonical location plus links instead of repeated prose.
|
|
34
|
+
- Remove or merge documents or sections that do not earn their place.
|
|
35
|
+
- Do not change source code unless needed to correct a documented command.
|
|
36
|
+
|
|
37
|
+
## Tasks
|
|
38
|
+
|
|
39
|
+
- [ ] Find duplicated, stale, contradictory, or misplaced information.
|
|
40
|
+
- [ ] Justify or delete each document and major section.
|
|
41
|
+
- [ ] Keep public docs generic: no private hostnames, credentials, or local
|
|
42
|
+
operator details.
|
|
43
|
+
- [ ] Ensure documented workflows match actual repo configuration.
|
|
44
|
+
- [ ] Ensure links resolve.
|
|
45
|
+
- [ ] Ensure contributor workflow instructions do not diverge between docs and
|
|
46
|
+
templates.
|
|
47
|
+
|
|
48
|
+
## Acceptance Criteria
|
|
49
|
+
|
|
50
|
+
- [ ] Public docs have clear ownership and no accidental policy duplication.
|
|
51
|
+
- [ ] Documents or sections that did not earn their place were removed or merged.
|
|
52
|
+
- [ ] README, CONTRIBUTING, DEVELOPMENT_PRINCIPLES, issue templates, and docs
|
|
53
|
+
links resolve.
|
|
54
|
+
- [ ] Remaining duplication is intentional and recorded in the PR.
|
|
55
|
+
|
|
56
|
+
## Checks
|
|
57
|
+
|
|
58
|
+
- [ ] `just docs`
|
|
59
|
+
- [ ] `just lint`
|
|
60
|
+
|
|
61
|
+
## Final Report
|
|
62
|
+
|
|
63
|
+
- Final responsibility of each public-facing document:
|
|
64
|
+
- Moved or removed duplicated content:
|
|
65
|
+
- Remaining intentional duplication:
|
|
66
|
+
- Documented behavior that still lacks implementation or tests:
|
|
67
|
+
- Commands run:
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Implementation cleanup
|
|
3
|
+
about: Simplify implementation while preserving the public contract.
|
|
4
|
+
title: "Clean up implementation"
|
|
5
|
+
labels: ready
|
|
6
|
+
assignees: ""
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
Improve implementation quality while preserving the current public contract.
|
|
12
|
+
|
|
13
|
+
## Scope
|
|
14
|
+
|
|
15
|
+
- Source code.
|
|
16
|
+
- Tests only where needed to preserve or clarify behavior.
|
|
17
|
+
- Documentation only for small corrections caused by code cleanup.
|
|
18
|
+
|
|
19
|
+
## Constraints
|
|
20
|
+
|
|
21
|
+
- Follow the shared [task contract](../../docs/quality-model.md#task-contract).
|
|
22
|
+
- Do not change documented CLI/config/Docker behavior unless tests and docs prove
|
|
23
|
+
the old behavior was stale or broken.
|
|
24
|
+
- Do not remove tests or weaken assertions.
|
|
25
|
+
- Do not add compatibility layers unless explicitly required.
|
|
26
|
+
- Prefer clean removal of obsolete or dead code.
|
|
27
|
+
- Avoid broad rewrites.
|
|
28
|
+
|
|
29
|
+
## Tasks
|
|
30
|
+
|
|
31
|
+
- [ ] Check for dead code and unused imports.
|
|
32
|
+
- [ ] Check for duplicated logic and redundant branches.
|
|
33
|
+
- [ ] Check for over-abstracted helpers and unclear names.
|
|
34
|
+
- [ ] Check for unnecessary compatibility paths.
|
|
35
|
+
- [ ] Check for unnecessarily complicated control flow.
|
|
36
|
+
- [ ] Check for tests that no longer test meaningful behavior.
|
|
37
|
+
|
|
38
|
+
## Acceptance Criteria
|
|
39
|
+
|
|
40
|
+
- [ ] Public CLI/config/Docker behavior is preserved unless explicitly documented
|
|
41
|
+
and tested.
|
|
42
|
+
- [ ] Simplifications are focused and reviewable.
|
|
43
|
+
- [ ] Existing tests remain meaningful.
|
|
44
|
+
|
|
45
|
+
## Checks
|
|
46
|
+
|
|
47
|
+
- [ ] `just lint`
|
|
48
|
+
- [ ] `just typecheck`
|
|
49
|
+
- [ ] `just test-unit`
|
|
50
|
+
- [ ] `just test-contract`
|
|
51
|
+
- [ ] `just docs`
|
|
52
|
+
- [ ] `just test-e2e-smoke`, if Docker/runtime behavior changed.
|
|
53
|
+
|
|
54
|
+
## Final Report
|
|
55
|
+
|
|
56
|
+
- Simplifications made:
|
|
57
|
+
- Public behavior preserved:
|
|
58
|
+
- Tests changed:
|
|
59
|
+
- Commands run:
|
|
60
|
+
- Remaining risks or follow-up:
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Quality workflow
|
|
3
|
+
about: Run the multi-PR repository quality workflow.
|
|
4
|
+
title: "Run repository quality workflow"
|
|
5
|
+
labels: ready
|
|
6
|
+
assignees: ""
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
Run the repository quality pass: diagnose first, then create one focused PR for
|
|
12
|
+
each actionable finding the diagnosis triages. A healthy repository may yield no
|
|
13
|
+
PRs at all; that is a successful outcome.
|
|
14
|
+
|
|
15
|
+
## Autonomous Mode
|
|
16
|
+
|
|
17
|
+
- [ ] This issue explicitly requests autonomous PR creation and auto-merge.
|
|
18
|
+
|
|
19
|
+
If autonomous mode is not checked, open draft review PRs by default and stop
|
|
20
|
+
after each PR is ready for review.
|
|
21
|
+
|
|
22
|
+
## Constraints
|
|
23
|
+
|
|
24
|
+
- Follow the shared [task contract](../../docs/quality-model.md#task-contract).
|
|
25
|
+
- Create one focused PR per goal.
|
|
26
|
+
- Do not combine unrelated goals into one PR.
|
|
27
|
+
- Start each implementation goal from latest `origin/develop` unless the
|
|
28
|
+
diagnosis names a release or `main`-promotion task.
|
|
29
|
+
- Do not start a dependent goal until prerequisite PRs merge.
|
|
30
|
+
- If CI fails, fix the current PR instead of starting a new goal.
|
|
31
|
+
- If a PR cannot be merged automatically, stop and report the blocker.
|
|
32
|
+
|
|
33
|
+
## Execution Plan
|
|
34
|
+
|
|
35
|
+
- [ ] Create and complete an issue from
|
|
36
|
+
[repository-diagnosis.md](repository-diagnosis.md). This read-only pass
|
|
37
|
+
triages findings by altitude and disposition and proposes the issues to
|
|
38
|
+
open. If it finds nothing actionable, report that and stop here.
|
|
39
|
+
- [ ] For each actionable finding, in the diagnosis's priority order, create and
|
|
40
|
+
complete one focused issue using the leaf template it names:
|
|
41
|
+
[test-ci-audit.md](test-ci-audit.md),
|
|
42
|
+
[documentation-audit.md](documentation-audit.md),
|
|
43
|
+
[implementation-cleanup.md](implementation-cleanup.md),
|
|
44
|
+
[redesign.md](redesign.md),
|
|
45
|
+
[release-process.md](release-process.md), or [work-item.md](work-item.md).
|
|
46
|
+
|
|
47
|
+
## Acceptance Criteria
|
|
48
|
+
|
|
49
|
+
- [ ] The diagnosis ran first and its triage is recorded.
|
|
50
|
+
- [ ] Each actionable goal has a separate issue and PR.
|
|
51
|
+
- [ ] Each PR links its issue and reports checks run.
|
|
52
|
+
- [ ] Dependent goals start only after prerequisite PRs merge.
|
|
53
|
+
- [ ] If the diagnosis found no action, the final report records that outcome and
|
|
54
|
+
the probes that support it.
|
|
55
|
+
|
|
56
|
+
## Checks
|
|
57
|
+
|
|
58
|
+
Use the checks listed in each generated issue template.
|
|
59
|
+
|
|
60
|
+
## Final Report
|
|
61
|
+
|
|
62
|
+
- Diagnosis summary or no-action result:
|
|
63
|
+
- Issues created:
|
|
64
|
+
- PRs created:
|
|
65
|
+
- PR URLs and CI status:
|
|
66
|
+
- Merged PRs:
|
|
67
|
+
- Net line delta for product vs. governance/process changes:
|
|
68
|
+
- Blockers:
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Redesign
|
|
3
|
+
about: Bold, cross-cutting redesign of one diagnosed concern, backed by tests.
|
|
4
|
+
title: "Redesign: "
|
|
5
|
+
labels: ready
|
|
6
|
+
assignees: ""
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
Redesign the specific concern named by the
|
|
12
|
+
[repository diagnosis](repository-diagnosis.md). This is for one coherent
|
|
13
|
+
vertical slice when a finding spans code, tests, docs, and naming together.
|
|
14
|
+
|
|
15
|
+
## Scope
|
|
16
|
+
|
|
17
|
+
- The single diagnosed concern.
|
|
18
|
+
- Code, tests, docs, examples, and packaging only where that concern reaches.
|
|
19
|
+
|
|
20
|
+
## Constraints
|
|
21
|
+
|
|
22
|
+
- Follow the shared [task contract](../../docs/quality-model.md#task-contract).
|
|
23
|
+
- Be bold inside the diagnosed scope; do not expand beyond it.
|
|
24
|
+
- Prefer clean removal, renaming, or restructuring over compatibility shims.
|
|
25
|
+
- Public behavior changes must update tests and docs in the same PR.
|
|
26
|
+
- Do not weaken Docker/runtime checks when the redesign touches runtime behavior.
|
|
27
|
+
|
|
28
|
+
## Tasks
|
|
29
|
+
|
|
30
|
+
- [ ] Restate the diagnosis and target shape.
|
|
31
|
+
- [ ] Make one coherent vertical-slice change.
|
|
32
|
+
- [ ] Update README, docs, examples, schemas, and tests for public behavior.
|
|
33
|
+
- [ ] Remove obsolete code or docs created by the old shape.
|
|
34
|
+
|
|
35
|
+
## Acceptance Criteria
|
|
36
|
+
|
|
37
|
+
- [ ] The diagnosed concern is resolved.
|
|
38
|
+
- [ ] Tests cover the new shape.
|
|
39
|
+
- [ ] Public behavior changes are documented.
|
|
40
|
+
- [ ] The PR stays inside the diagnosed scope.
|
|
41
|
+
|
|
42
|
+
## Checks
|
|
43
|
+
|
|
44
|
+
- [ ] `just lint`
|
|
45
|
+
- [ ] `just typecheck`
|
|
46
|
+
- [ ] `just test-unit`
|
|
47
|
+
- [ ] `just test-contract`
|
|
48
|
+
- [ ] `just docs`
|
|
49
|
+
- [ ] `just check`
|
|
50
|
+
- [ ] `just test-e2e-smoke`, if Docker/runtime behavior changed.
|
|
51
|
+
|
|
52
|
+
## Final Report
|
|
53
|
+
|
|
54
|
+
- Concern redesigned:
|
|
55
|
+
- Target shape:
|
|
56
|
+
- Code / tests / docs changed:
|
|
57
|
+
- Public behavior changes:
|
|
58
|
+
- Commands run:
|
|
59
|
+
- Remaining risks or follow-up:
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Release process
|
|
3
|
+
about: Prepare, validate, describe, and publish a rosotacom release.
|
|
4
|
+
title: "Prepare release vX.Y.Z"
|
|
5
|
+
labels: ready, documentation
|
|
6
|
+
assignees: ""
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
Ship a validated, well-described `rosotacom` release.
|
|
12
|
+
|
|
13
|
+
## Use When
|
|
14
|
+
|
|
15
|
+
A maintainer is preparing a new `vX.Y.Z` tag, package release, and GitHub
|
|
16
|
+
Release. This is the executable checklist for the release entrypoint in
|
|
17
|
+
[docs/owner-runbook.md](../../docs/owner-runbook.md#prepare-a-release).
|
|
18
|
+
|
|
19
|
+
## Target
|
|
20
|
+
|
|
21
|
+
- Target tag: `vX.Y.Z`
|
|
22
|
+
- `main` commit SHA:
|
|
23
|
+
- Previous release tag:
|
|
24
|
+
- Promotion/validation evidence:
|
|
25
|
+
|
|
26
|
+
## Constraints
|
|
27
|
+
|
|
28
|
+
- Follow the shared [task contract](../../docs/quality-model.md#task-contract).
|
|
29
|
+
- Start from the exact validated `main` commit when preparing release notes.
|
|
30
|
+
- Do not tag or publish until the release PR has merged.
|
|
31
|
+
- Open a draft review PR by default unless autonomous release work is explicitly
|
|
32
|
+
requested.
|
|
33
|
+
- Keep external OTA gate evidence generic; do not record private hostnames,
|
|
34
|
+
credentials, or deployment details.
|
|
35
|
+
- Update docs/tests if public CLI, config, Docker, or runtime behavior changed.
|
|
36
|
+
|
|
37
|
+
## Tasks
|
|
38
|
+
|
|
39
|
+
- [ ] Choose the target tag in the form `vX.Y.Z`.
|
|
40
|
+
- [ ] Identify the previous release tag.
|
|
41
|
+
- [ ] Confirm the release commit is on `main` and record its exact SHA.
|
|
42
|
+
- [ ] Review all commits and the full diff since the previous release.
|
|
43
|
+
- [ ] Summarize user-facing CLI, config, Docker, dependency, and packaging changes.
|
|
44
|
+
- [ ] Copy `docs/release-notes/TEMPLATE.md` to `docs/release-notes/vX.Y.Z.md`.
|
|
45
|
+
- [ ] State breaking changes and migration steps, or explicitly say there are none.
|
|
46
|
+
- [ ] Include local command results in the PR description.
|
|
47
|
+
- [ ] After merge, have a maintainer tag the release commit and push the tag.
|
|
48
|
+
- [ ] Confirm the tag workflow succeeded for the exact recorded SHA.
|
|
49
|
+
- [ ] Confirm the configured package deployment succeeded.
|
|
50
|
+
- [ ] Inspect the wheel, source distribution, checksums, and GitHub Release.
|
|
51
|
+
- [ ] Record release, workflow, and deployment links.
|
|
52
|
+
- [ ] Do not create a downstream sync PR until all release evidence is reviewed.
|
|
53
|
+
|
|
54
|
+
## Acceptance Criteria
|
|
55
|
+
|
|
56
|
+
- [ ] Release notes exist for the target tag.
|
|
57
|
+
- [ ] Compatibility, migration, Docker/runtime, dependency, packaging, and
|
|
58
|
+
validation notes are explicit.
|
|
59
|
+
- [ ] The release workflow validates and publishes from the tag.
|
|
60
|
+
|
|
61
|
+
## Checks
|
|
62
|
+
|
|
63
|
+
- [ ] `just lint`
|
|
64
|
+
- [ ] `just typecheck`
|
|
65
|
+
- [ ] `just test-unit`
|
|
66
|
+
- [ ] `just test-contract`
|
|
67
|
+
- [ ] `just docs`
|
|
68
|
+
- [ ] `just package`
|
|
69
|
+
- [ ] `just test-e2e-smoke`
|
|
70
|
+
|
|
71
|
+
## Evidence
|
|
72
|
+
|
|
73
|
+
- Release PR:
|
|
74
|
+
- GitHub Release:
|
|
75
|
+
- Release workflow:
|
|
76
|
+
- Deployment:
|
|
77
|
+
- Artifacts inspected:
|
|
78
|
+
|
|
79
|
+
## Final Report
|
|
80
|
+
|
|
81
|
+
- Previous release tag:
|
|
82
|
+
- Target release tag:
|
|
83
|
+
- Release notes file path:
|
|
84
|
+
- User-facing changes:
|
|
85
|
+
- Compatibility or migration notes:
|
|
86
|
+
- Docker/runtime or dependency updates:
|
|
87
|
+
- Commands run:
|
|
88
|
+
- PR URL and CI status:
|
|
89
|
+
- Final package and GitHub Release status after tagging:
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Repository diagnosis
|
|
3
|
+
about: Read-only diagnosis and triage that decides what, if anything, the repo needs.
|
|
4
|
+
title: "Diagnose repository and triage follow-up work"
|
|
5
|
+
labels: ready
|
|
6
|
+
assignees: ""
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
Take in the whole repository and produce a prioritized diagnosis that decides
|
|
12
|
+
what work, if any, the repository needs. This is the planning keystone of the
|
|
13
|
+
quality pass: it routes work, it does not edit files.
|
|
14
|
+
|
|
15
|
+
## How This Fits
|
|
16
|
+
|
|
17
|
+
This runs first in the soft-check pass described by
|
|
18
|
+
[docs/quality-model.md](../../docs/quality-model.md). The
|
|
19
|
+
[quality-workflow](quality-workflow.md) orchestrator then creates and completes
|
|
20
|
+
exactly the issues this triage names. It may name none.
|
|
21
|
+
|
|
22
|
+
## Constraints
|
|
23
|
+
|
|
24
|
+
- Read-only: do not change code, docs, tests, or config in this task.
|
|
25
|
+
- Follow the shared [task contract](../../docs/quality-model.md#task-contract);
|
|
26
|
+
only the quality, tracking, and reporting parts apply because this task opens
|
|
27
|
+
no PR.
|
|
28
|
+
- Classify by what a finding needs, not by the smallest patch available.
|
|
29
|
+
- "No action needed" is valid only when it names the probes that would have
|
|
30
|
+
caught a problem.
|
|
31
|
+
- Keep public findings generic. Do not include private hostnames, credentials,
|
|
32
|
+
or operator-specific deployment details.
|
|
33
|
+
|
|
34
|
+
## Diagnose Along Two Axes
|
|
35
|
+
|
|
36
|
+
Altitude:
|
|
37
|
+
|
|
38
|
+
- Vision.
|
|
39
|
+
- Architecture.
|
|
40
|
+
- Module / interface.
|
|
41
|
+
- Line / local.
|
|
42
|
+
- Meta / governance.
|
|
43
|
+
|
|
44
|
+
Disposition:
|
|
45
|
+
|
|
46
|
+
- None.
|
|
47
|
+
- Inline.
|
|
48
|
+
- Scoped.
|
|
49
|
+
- Redesign.
|
|
50
|
+
|
|
51
|
+
Use [docs/quality-model.md](../../docs/quality-model.md#diagnosis-first) for the
|
|
52
|
+
meaning of each axis and disposition.
|
|
53
|
+
|
|
54
|
+
## Lenses
|
|
55
|
+
|
|
56
|
+
- Value / proportionality: every doc, template, and process step must be
|
|
57
|
+
load-bearing for an owner-visible outcome.
|
|
58
|
+
- Generality: public docs use roles and generic external-gate language, not
|
|
59
|
+
private deployment details.
|
|
60
|
+
- Drift: documented commands, checks, CI, release steps, and RFC state match the
|
|
61
|
+
repository.
|
|
62
|
+
- Runtime relevance: Docker smoke, packaged examples, ROS/catmux resources, and
|
|
63
|
+
external OTA gates are distinct and should not be conflated.
|
|
64
|
+
|
|
65
|
+
## Tasks
|
|
66
|
+
|
|
67
|
+
- [ ] Read top-down: README, CONTRIBUTING, development principles, docs, issue
|
|
68
|
+
templates, tests, package config, source, and workflows.
|
|
69
|
+
- [ ] Record findings with altitude, disposition, target template, and rationale.
|
|
70
|
+
- [ ] Include an explicit "no action" section with the probes that found healthy
|
|
71
|
+
areas.
|
|
72
|
+
- [ ] Check product vs. governance/process size and whether the governance layer
|
|
73
|
+
earns its current size.
|
|
74
|
+
- [ ] For each reusable issue template, state the owner-visible outcome that
|
|
75
|
+
would change if it were deleted.
|
|
76
|
+
- [ ] Check RFC implementation and validation checklists for drift.
|
|
77
|
+
- [ ] Order actionable findings by priority and dependencies.
|
|
78
|
+
- [ ] Propose one issue per actionable finding, naming the template to use.
|
|
79
|
+
- [ ] If nothing is actionable, say so explicitly.
|
|
80
|
+
|
|
81
|
+
## Acceptance Criteria
|
|
82
|
+
|
|
83
|
+
- [ ] Every finding has an altitude and disposition.
|
|
84
|
+
- [ ] Every actionable finding maps to one proposed issue and template.
|
|
85
|
+
- [ ] Every `None` disposition cites a meaningful probe.
|
|
86
|
+
- [ ] The report distinguishes public GitHub checks from external OTA promotion
|
|
87
|
+
gates.
|
|
88
|
+
- [ ] The report includes product-vs-governance proportionality and issue-template
|
|
89
|
+
reachability/load-bearing notes.
|
|
90
|
+
- [ ] No files were changed by this task.
|
|
91
|
+
|
|
92
|
+
## Final Report
|
|
93
|
+
|
|
94
|
+
Triage table:
|
|
95
|
+
|
|
96
|
+
| Finding | Altitude | Disposition | Target template | Rationale |
|
|
97
|
+
| --- | --- | --- | --- | --- |
|
|
98
|
+
|
|
99
|
+
- No action needed, with probes:
|
|
100
|
+
- Product vs. governance/process size verdict:
|
|
101
|
+
- Issue-template load-bearing notes:
|
|
102
|
+
- RFC validation drift:
|
|
103
|
+
- Proposed issues, in priority order:
|
|
104
|
+
- Dependencies:
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Test and CI audit
|
|
3
|
+
about: Audit tests, CI wiring, and coverage of documented behavior.
|
|
4
|
+
title: "Audit test and CI coverage"
|
|
5
|
+
labels: ready
|
|
6
|
+
assignees: ""
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
Audit and improve test coverage and test execution wiring.
|
|
12
|
+
|
|
13
|
+
## Scope
|
|
14
|
+
|
|
15
|
+
- tests/.
|
|
16
|
+
- pyproject.toml.
|
|
17
|
+
- .pre-commit-config.yaml.
|
|
18
|
+
- .github/workflows/*.
|
|
19
|
+
- README and docs that describe testing.
|
|
20
|
+
- Minimal source changes only if required to make behavior testable.
|
|
21
|
+
|
|
22
|
+
## Constraints
|
|
23
|
+
|
|
24
|
+
- Follow the shared [task contract](../../docs/quality-model.md#task-contract).
|
|
25
|
+
- Do not refactor implementation except where needed to make tests possible.
|
|
26
|
+
|
|
27
|
+
## Tasks
|
|
28
|
+
|
|
29
|
+
- [ ] Map public README-documented commands, features, and CLI behavior to tests
|
|
30
|
+
where feasible.
|
|
31
|
+
- [ ] Add missing tests for feasible documented behavior.
|
|
32
|
+
- [ ] Record manual verification for behavior that cannot sensibly be automated.
|
|
33
|
+
- [ ] Verify that tests are collected and actually executed.
|
|
34
|
+
- [ ] Check that tests are not accidentally skipped, deselected, ignored, or
|
|
35
|
+
excluded by config.
|
|
36
|
+
- [ ] Ensure skipped/xfail tests have explicit reasons.
|
|
37
|
+
- [ ] Verify that local commands, pre-commit, CI, and release validation agree.
|
|
38
|
+
|
|
39
|
+
## Acceptance Criteria
|
|
40
|
+
|
|
41
|
+
- [ ] Documented public behavior has automated coverage or a recorded manual
|
|
42
|
+
verification reason.
|
|
43
|
+
- [ ] Local test commands and CI workflows agree on the intended gates.
|
|
44
|
+
- [ ] Changed behavior includes tests before the PR is marked ready.
|
|
45
|
+
|
|
46
|
+
## Checks
|
|
47
|
+
|
|
48
|
+
- [ ] `just lint`
|
|
49
|
+
- [ ] `just typecheck`
|
|
50
|
+
- [ ] `just test-unit`
|
|
51
|
+
- [ ] `just test-contract`
|
|
52
|
+
- [ ] `just docs`
|
|
53
|
+
- [ ] `just check`
|
|
54
|
+
- [ ] `just test-e2e-smoke`
|
|
55
|
+
|
|
56
|
+
## Final Report
|
|
57
|
+
|
|
58
|
+
- Changed files:
|
|
59
|
+
- Added or fixed tests:
|
|
60
|
+
- Remaining untested behavior and why:
|
|
61
|
+
- Commands run:
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Work item
|
|
3
|
+
about: Track actionable project work that should be handled through an issue and PR.
|
|
4
|
+
title: ""
|
|
5
|
+
labels: ready
|
|
6
|
+
assignees: ""
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Goal
|
|
10
|
+
|
|
11
|
+
Describe the outcome this issue should achieve.
|
|
12
|
+
|
|
13
|
+
## Scope
|
|
14
|
+
|
|
15
|
+
- In scope:
|
|
16
|
+
- Out of scope:
|
|
17
|
+
|
|
18
|
+
## Constraints
|
|
19
|
+
|
|
20
|
+
- Follow the shared [task contract](../../docs/quality-model.md#task-contract).
|
|
21
|
+
- Keep the change small and coherent.
|
|
22
|
+
- Do not skip, weaken, or delete tests/CI to make this pass.
|
|
23
|
+
|
|
24
|
+
## Acceptance Criteria
|
|
25
|
+
|
|
26
|
+
- [ ] The requested behavior or documentation exists.
|
|
27
|
+
- [ ] Public behavior changes update README, docs, examples, packaging, and tests where applicable.
|
|
28
|
+
- [ ] The PR links this issue.
|
|
29
|
+
- [ ] The PR body records local checks and manual verification.
|
|
30
|
+
|
|
31
|
+
## Checks
|
|
32
|
+
|
|
33
|
+
- [ ] `just lint`
|
|
34
|
+
- [ ] `just typecheck`
|
|
35
|
+
- [ ] `just test-unit`
|
|
36
|
+
- [ ] `just test-contract`
|
|
37
|
+
- [ ] `just docs`
|
|
38
|
+
- [ ] `just check`
|
|
39
|
+
- [ ] `just test-e2e-smoke`, if Docker/runtime behavior changed.
|
|
40
|
+
|
|
41
|
+
## Final Report
|
|
42
|
+
|
|
43
|
+
- Changed files:
|
|
44
|
+
- Behavior or documentation changed:
|
|
45
|
+
- Checks run:
|
|
46
|
+
- Remaining risks or follow-up:
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
## Summary
|
|
2
|
+
|
|
3
|
+
-
|
|
4
|
+
|
|
5
|
+
## Linked Issue
|
|
6
|
+
|
|
7
|
+
- Fixes #
|
|
8
|
+
|
|
9
|
+
## Release Notes
|
|
10
|
+
|
|
11
|
+
- [ ] Release PR: includes `docs/release-notes/vX.Y.Z.md`
|
|
12
|
+
- [ ] Release PR: summarizes user-facing changes since the previous release
|
|
13
|
+
- [ ] Release PR: documents compatibility, migration, and validation notes
|
|
14
|
+
- [ ] Release PR: records the intended `main` commit and previous release tag
|
|
15
|
+
- [ ] Not a release PR
|
|
16
|
+
|
|
17
|
+
## Public Behavior
|
|
18
|
+
|
|
19
|
+
- [ ] Changes public CLI/config/API/Docker behavior
|
|
20
|
+
- [ ] Does not change public behavior
|
|
21
|
+
|
|
22
|
+
## Checks
|
|
23
|
+
|
|
24
|
+
- [ ] `just lint-workflows`
|
|
25
|
+
- [ ] `just lint-build`
|
|
26
|
+
- [ ] `just lint`
|
|
27
|
+
- [ ] `just typecheck`
|
|
28
|
+
- [ ] `just test-unit`
|
|
29
|
+
- [ ] `just test-contract`
|
|
30
|
+
- [ ] `just docs`
|
|
31
|
+
- [ ] `just package`
|
|
32
|
+
- [ ] `just check`
|
|
33
|
+
- [ ] `just test-e2e-smoke`, if Docker/runtime behavior changed
|
|
34
|
+
|
|
35
|
+
## Test Integrity
|
|
36
|
+
|
|
37
|
+
- [ ] Tests/CI were not skipped, weakened, or removed to make this pass
|
|
38
|
+
|
|
39
|
+
## Maintainer Evidence
|
|
40
|
+
|
|
41
|
+
- Required CI links:
|
|
42
|
+
- Manual/runtime evidence:
|
|
43
|
+
- External OTA evidence, if this PR is part of a `main` promotion:
|