From 2e20ca77777cab4bb9561c6bea0f61120c79a217 Mon Sep 17 00:00:00 2001 From: DCCONSTRUCTIONS Date: Wed, 26 Aug 2026 17:50:37 +0300 Subject: [PATCH] feat(simulation): load combined rover collision --- src/k1link/simulation/gaussian_pipeline_gateway.py | 9 +++++++-- src/k1link/simulation/projects.py | 10 +++++++--- tests/test_gaussian_pipeline_gateway.py | 6 +++++- tests/test_simulation_projects.py | 8 ++++++-- 4 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/k1link/simulation/gaussian_pipeline_gateway.py b/src/k1link/simulation/gaussian_pipeline_gateway.py index 96e5aa1..848e9b9 100644 --- a/src/k1link/simulation/gaussian_pipeline_gateway.py +++ b/src/k1link/simulation/gaussian_pipeline_gateway.py @@ -19,8 +19,13 @@ TUS_VERSION: Final = "1.0.0" BUILD_REQUEST_SCHEMA: Final = "gaussian-pipeline.build-request/v1" JOB_SCHEMA: Final = "gaussian-pipeline.job/v1" LEGACY_RESULT_SCHEMA: Final = "gaussian-pipeline.build-result/v1" -RESULT_SCHEMA: Final = "gaussian-pipeline.build-result/v2" -RESULT_SCHEMAS: Final = frozenset({LEGACY_RESULT_SCHEMA, RESULT_SCHEMA}) +LEGACY_ROVER_RESULT_SCHEMA: Final = "gaussian-pipeline.build-result/v2" +RESULT_SCHEMA: Final = "gaussian-pipeline.build-result/v3" +RESULT_SCHEMAS: Final = frozenset({ + LEGACY_RESULT_SCHEMA, + LEGACY_ROVER_RESULT_SCHEMA, + RESULT_SCHEMA, +}) CAPABILITIES_SCHEMA: Final = "gaussian-pipeline.capabilities/v1" ARCHIVE_INGEST_REQUEST_SCHEMA: Final = "gaussian-pipeline.archive-ingest-request/v1" ARCHIVE_INGEST_SCHEMA: Final = "gaussian-pipeline.archive-ingest/v1" diff --git a/src/k1link/simulation/projects.py b/src/k1link/simulation/projects.py index 79e81af..7a6fdb9 100644 --- a/src/k1link/simulation/projects.py +++ b/src/k1link/simulation/projects.py @@ -671,6 +671,11 @@ def _world_manifest(project_id: str, artifacts: list[dict[str, Any]]) -> dict[st ) return f"/api/v1/simulation-worlds/projects/{project_id}/artifacts/{encoded}" + collision_mesh_url = ( + url_for("rover-collision-mesh") + or url_for("rover-terrain-mesh") + or url_for("collision-mesh") + ) return { "schema_version": WORLD_MANIFEST_SCHEMA, "project_id": project_id, @@ -679,9 +684,8 @@ def _world_manifest(project_id: str, artifacts: list[dict[str, Any]]) -> dict[st "streamed_sog_url": url_for("stream-manifest"), }, "collision": { - "mesh_url": url_for("rover-terrain-mesh") or url_for("collision-mesh"), - "available": (url_for("rover-terrain-mesh") or url_for("collision-mesh")) - is not None, + "mesh_url": collision_mesh_url, + "available": collision_mesh_url is not None, }, "transforms": { "world_from_visual": [1, 0, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1], diff --git a/tests/test_gaussian_pipeline_gateway.py b/tests/test_gaussian_pipeline_gateway.py index 6d073b0..272bbcb 100644 --- a/tests/test_gaussian_pipeline_gateway.py +++ b/tests/test_gaussian_pipeline_gateway.py @@ -352,7 +352,11 @@ def test_gateway_rejects_symlink_source_and_token(tmp_path: Path) -> None: @pytest.mark.parametrize( "result_schema", - ["gaussian-pipeline.build-result/v1", "gaussian-pipeline.build-result/v2"], + [ + "gaussian-pipeline.build-result/v1", + "gaussian-pipeline.build-result/v2", + "gaussian-pipeline.build-result/v3", + ], ) def test_gateway_submits_tracks_and_imports_digest_bound_artifact( tmp_path: Path, diff --git a/tests/test_simulation_projects.py b/tests/test_simulation_projects.py index 5f73a77..9c358a8 100644 --- a/tests/test_simulation_projects.py +++ b/tests/test_simulation_projects.py @@ -225,7 +225,7 @@ def test_service_materializes_world_manifest_and_deletes_both_copies(tmp_path: P assert provider.deleted == ["gsp-20260826000000-deadbeef"] -def test_world_manifest_prefers_seed_connected_rover_terrain() -> None: +def test_world_manifest_prefers_combined_rover_collision_world() -> None: manifest = _world_manifest( "sim-" + "a" * 32, [ @@ -237,12 +237,16 @@ def test_world_manifest_prefers_seed_connected_rover_terrain() -> None: "role": "rover-terrain-mesh", "logical_path": "rover/terrain.collision.glb", }, + { + "role": "rover-collision-mesh", + "logical_path": "rover/scene.collision.glb", + }, ], ) assert manifest["collision"]["available"] is True assert manifest["collision"]["mesh_url"].endswith( - "/artifacts/rover/terrain.collision.glb" + "/artifacts/rover/scene.collision.glb" )