{
  "experiment": "A39 boundary-aware patch stitching",
  "protocol": {
    "source": "/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/vggt_spatial_adapter/support_guidance_a38_baseline_nearest_patch_proxy/analysis.json",
    "selection_uses_gt": false,
    "retrospective_validation_uses_gt": false,
    "best_proxy_only": "use A38 best proxy source per case, currently TRELLIS.2 raw for both focus cases",
    "operators": [
      "overlay_control: kept repair mesh + raw source patch, unstitched",
      "snap_merge: snap source patch boundary vertices to hole boundary then merge vertices",
      "bridge_curtain: add bridge triangles from hole boundary edges to nearest patch boundary vertices",
      "snap_bridge: snap first, then bridge"
    ]
  },
  "case_rows": [
    {
      "case_id": "gso_002_input4",
      "source": "trellis2_raw",
      "conflict_face_ratio": 0.1971782431052094,
      "hole_boundary_vertices": 5755,
      "snap_radius": 0.08,
      "bridge_radius": 0.1,
      "variant_rows": [
        {
          "variant": "overlay_control",
          "source": "trellis2_raw",
          "output_obj": "/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/vggt_spatial_adapter/support_guidance_a39_boundary_aware_patch_stitching/gso_002_input4/mesh_overlay_control_trellis2_raw.obj",
          "stats": {
            "vertices": 495724,
            "faces": 966818,
            "watertight": false,
            "winding_consistent": false,
            "boundary_edges": 29574,
            "nonmanifold_edges": 5150,
            "components": 1974,
            "largest_component_face_ratio": 0.5212987346118918,
            "euler_number": 109
          },
          "surface_proxy_chamfer_vs_repair": 0.010541755355082567,
          "boundary_delta_vs_overlay": 0,
          "component_delta_vs_overlay": 0,
          "nonmanifold_delta_vs_overlay": 0,
          "metadata": {
            "note": "A38 unstitched overlay"
          }
        },
        {
          "variant": "snap_merge",
          "source": "trellis2_raw",
          "output_obj": "/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/vggt_spatial_adapter/support_guidance_a39_boundary_aware_patch_stitching/gso_002_input4/mesh_snap_merge_trellis2_raw.obj",
          "stats": {
            "vertices": 472884,
            "faces": 966818,
            "watertight": false,
            "winding_consistent": false,
            "boundary_edges": 7085,
            "nonmanifold_edges": 17250,
            "components": 24262,
            "largest_component_face_ratio": 0.9225397127484181,
            "euler_number": 20769
          },
          "surface_proxy_chamfer_vs_repair": 0.010876676455534275,
          "boundary_delta_vs_overlay": -22489,
          "component_delta_vs_overlay": 22288,
          "nonmanifold_delta_vs_overlay": 12100,
          "metadata": {
            "snap_radius": 0.08,
            "eligible_patch_boundary_vertices": 24027,
            "snapped_vertices": 22840,
            "snap_rate": 0.9505972447663046,
            "pre_snap_dist_mean": 0.04309262359036143,
            "pre_snap_dist_p95": 0.07927683361113087
          }
        },
        {
          "variant": "bridge_curtain",
          "source": "trellis2_raw",
          "output_obj": "/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/vggt_spatial_adapter/support_guidance_a39_boundary_aware_patch_stitching/gso_002_input4/mesh_bridge_curtain_trellis2_raw.obj",
          "stats": {
            "vertices": 495724,
            "faces": 975101,
            "watertight": false,
            "winding_consistent": false,
            "boundary_edges": 25294,
            "nonmanifold_edges": 5647,
            "components": 2052,
            "largest_component_face_ratio": 0.8977234153180029,
            "euler_number": -1450
          },
          "surface_proxy_chamfer_vs_repair": 0.01074561131126466,
          "boundary_delta_vs_overlay": -4280,
          "component_delta_vs_overlay": 78,
          "nonmanifold_delta_vs_overlay": 497,
          "metadata": {
            "bridge_radius": 0.1,
            "eligible_hole_boundary_edges": 5895,
            "bridged_edges": 5320,
            "bridge_faces": 8283,
            "bridge_rate": 0.9024597116200169,
            "edge_to_patch_boundary_mean": 0.046400986611638925,
            "edge_to_patch_boundary_p95": 0.13533894016982256
          }
        },
        {
          "variant": "snap_bridge",
          "source": "trellis2_raw",
          "output_obj": "/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/vggt_spatial_adapter/support_guidance_a39_boundary_aware_patch_stitching/gso_002_input4/mesh_snap_bridge_trellis2_raw.obj",
          "stats": {
            "vertices": 472884,
            "faces": 973967,
            "watertight": false,
            "winding_consistent": false,
            "boundary_edges": 2146,
            "nonmanifold_edges": 19375,
            "components": 27129,
            "largest_component_face_ratio": 0.7833550828724176,
            "euler_number": 23647
          },
          "surface_proxy_chamfer_vs_repair": 0.010803403383271194,
          "boundary_delta_vs_overlay": -27428,
          "component_delta_vs_overlay": 25155,
          "nonmanifold_delta_vs_overlay": 14225,
          "metadata": {
            "snap_radius": 0.08,
            "eligible_patch_boundary_vertices": 24027,
            "snapped_vertices": 22840,
            "snap_rate": 0.9505972447663046,
            "pre_snap_dist_mean": 0.04309262359036143,
            "pre_snap_dist_p95": 0.07927683361113087,
            "snap_bridge_bridge_radius": 0.1,
            "snap_bridge_eligible_hole_boundary_edges": 5895,
            "snap_bridge_bridged_edges": 5384,
            "snap_bridge_bridge_faces": 7149,
            "snap_bridge_bridge_rate": 0.9133163698049194,
            "snap_bridge_edge_to_patch_boundary_mean": 0.032565703696399745,
            "snap_bridge_edge_to_patch_boundary_p95": 0.1291743662452546
          }
        }
      ],
      "best_boundary_variant": "snap_bridge",
      "best_component_variant": "overlay_control"
    },
    {
      "case_id": "gso_008_input4",
      "source": "trellis2_raw",
      "conflict_face_ratio": 0.6947948898180422,
      "hole_boundary_vertices": 10387,
      "snap_radius": 0.018121251827958294,
      "bridge_radius": 0.02071000208909519,
      "variant_rows": [
        {
          "variant": "overlay_control",
          "source": "trellis2_raw",
          "output_obj": "/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/vggt_spatial_adapter/support_guidance_a39_boundary_aware_patch_stitching/gso_008_input4/mesh_overlay_control_trellis2_raw.obj",
          "stats": {
            "vertices": 243562,
            "faces": 451781,
            "watertight": false,
            "winding_consistent": false,
            "boundary_edges": 34616,
            "nonmanifold_edges": 433,
            "components": 1219,
            "largest_component_face_ratio": 0.25717327643260784,
            "euler_number": 581
          },
          "surface_proxy_chamfer_vs_repair": 0.007236928091797389,
          "boundary_delta_vs_overlay": 0,
          "component_delta_vs_overlay": 0,
          "nonmanifold_delta_vs_overlay": 0,
          "metadata": {
            "note": "A38 unstitched overlay"
          }
        },
        {
          "variant": "snap_merge",
          "source": "trellis2_raw",
          "output_obj": "/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/vggt_spatial_adapter/support_guidance_a39_boundary_aware_patch_stitching/gso_008_input4/mesh_snap_merge_trellis2_raw.obj",
          "stats": {
            "vertices": 234571,
            "faces": 451781,
            "watertight": false,
            "winding_consistent": false,
            "boundary_edges": 26355,
            "nonmanifold_edges": 5105,
            "components": 7837,
            "largest_component_face_ratio": 0.4930995327382072,
            "euler_number": 4339
          },
          "surface_proxy_chamfer_vs_repair": 0.007165753372346765,
          "boundary_delta_vs_overlay": -8261,
          "component_delta_vs_overlay": 6618,
          "nonmanifold_delta_vs_overlay": 4672,
          "metadata": {
            "snap_radius": 0.018121251827958294,
            "eligible_patch_boundary_vertices": 23758,
            "snapped_vertices": 8991,
            "snap_rate": 0.3784409462075932,
            "pre_snap_dist_mean": 0.0433253295295453,
            "pre_snap_dist_p95": 0.13156458272042143
          }
        },
        {
          "variant": "bridge_curtain",
          "source": "trellis2_raw",
          "output_obj": "/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/vggt_spatial_adapter/support_guidance_a39_boundary_aware_patch_stitching/gso_008_input4/mesh_bridge_curtain_trellis2_raw.obj",
          "stats": {
            "vertices": 243562,
            "faces": 462941,
            "watertight": false,
            "winding_consistent": false,
            "boundary_edges": 26241,
            "nonmanifold_edges": 1170,
            "components": 1372,
            "largest_component_face_ratio": 0.5003315757299527,
            "euler_number": -160
          },
          "surface_proxy_chamfer_vs_repair": 0.007164212005139475,
          "boundary_delta_vs_overlay": -8375,
          "component_delta_vs_overlay": 153,
          "nonmanifold_delta_vs_overlay": 737,
          "metadata": {
            "bridge_radius": 0.02071000208909519,
            "eligible_hole_boundary_edges": 10508,
            "bridged_edges": 7998,
            "bridge_faces": 11160,
            "bridge_rate": 0.7611343738104301,
            "edge_to_patch_boundary_mean": 0.01920572636514365,
            "edge_to_patch_boundary_p95": 0.06868151731747002
          }
        },
        {
          "variant": "snap_bridge",
          "source": "trellis2_raw",
          "output_obj": "/home/jiachen/TRELLIS/experiments/nonorthogonal_gpt_orthoview/outputs/data_survey/vggt_spatial_adapter/support_guidance_a39_boundary_aware_patch_stitching/gso_008_input4/mesh_snap_bridge_trellis2_raw.obj",
          "stats": {
            "vertices": 234571,
            "faces": 463394,
            "watertight": false,
            "winding_consistent": false,
            "boundary_edges": 18100,
            "nonmanifold_edges": 9105,
            "components": 12256,
            "largest_component_face_ratio": 0.4812427437558536,
            "euler_number": 8843
          },
          "surface_proxy_chamfer_vs_repair": 0.007138947047704472,
          "boundary_delta_vs_overlay": -16516,
          "component_delta_vs_overlay": 11037,
          "nonmanifold_delta_vs_overlay": 8672,
          "metadata": {
            "snap_radius": 0.018121251827958294,
            "eligible_patch_boundary_vertices": 23758,
            "snapped_vertices": 8991,
            "snap_rate": 0.3784409462075932,
            "pre_snap_dist_mean": 0.0433253295295453,
            "pre_snap_dist_p95": 0.13156458272042143,
            "snap_bridge_bridge_radius": 0.02071000208909519,
            "snap_bridge_eligible_hole_boundary_edges": 10508,
            "snap_bridge_bridged_edges": 8543,
            "snap_bridge_bridge_faces": 11613,
            "snap_bridge_bridge_rate": 0.8129996193376475,
            "snap_bridge_edge_to_patch_boundary_mean": 0.013110834819607408,
            "snap_bridge_edge_to_patch_boundary_p95": 0.06568890499436111
          }
        }
      ],
      "best_boundary_variant": "snap_bridge",
      "best_component_variant": "overlay_control"
    }
  ],
  "assets": {
    "gso_002_input4": {
      "stitching_projection": "trellis2_vggt_assets/a39/gso_002_input4_stitching_projection.png"
    },
    "gso_008_input4": {
      "stitching_projection": "trellis2_vggt_assets/a39/gso_008_input4_stitching_projection.png"
    }
  },
  "aggregate": {
    "cases": 2,
    "variants": {
      "bridge_curtain": {
        "cases": 2,
        "watertight_rate": 0.0,
        "mean_boundary_edges": 25767.5,
        "mean_components": 1712,
        "mean_nonmanifold_edges": 3408.5,
        "mean_faces": 719021,
        "mean_surface_proxy_chamfer": 0.008954911658202069,
        "mean_boundary_delta_vs_overlay": -6327.5,
        "mean_component_delta_vs_overlay": 115.5,
        "mean_nonmanifold_delta_vs_overlay": 617
      },
      "overlay_control": {
        "cases": 2,
        "watertight_rate": 0.0,
        "mean_boundary_edges": 32095,
        "mean_components": 1596.5,
        "mean_nonmanifold_edges": 2791.5,
        "mean_faces": 709299.5,
        "mean_surface_proxy_chamfer": 0.008889341723439978,
        "mean_boundary_delta_vs_overlay": 0,
        "mean_component_delta_vs_overlay": 0,
        "mean_nonmanifold_delta_vs_overlay": 0
      },
      "snap_bridge": {
        "cases": 2,
        "watertight_rate": 0.0,
        "mean_boundary_edges": 10123,
        "mean_components": 19692.5,
        "mean_nonmanifold_edges": 14240,
        "mean_faces": 718680.5,
        "mean_surface_proxy_chamfer": 0.008971175215487834,
        "mean_boundary_delta_vs_overlay": -21972,
        "mean_component_delta_vs_overlay": 18096,
        "mean_nonmanifold_delta_vs_overlay": 11448.5
      },
      "snap_merge": {
        "cases": 2,
        "watertight_rate": 0.0,
        "mean_boundary_edges": 16720,
        "mean_components": 16049.5,
        "mean_nonmanifold_edges": 11177.5,
        "mean_faces": 709299.5,
        "mean_surface_proxy_chamfer": 0.00902121491394052,
        "mean_boundary_delta_vs_overlay": -15375,
        "mean_component_delta_vs_overlay": 14453,
        "mean_nonmanifold_delta_vs_overlay": 8386
      }
    },
    "best_boundary_counts": {
      "bridge_curtain": 0,
      "overlay_control": 0,
      "snap_bridge": 2,
      "snap_merge": 0
    },
    "best_component_counts": {
      "bridge_curtain": 0,
      "overlay_control": 2,
      "snap_bridge": 0,
      "snap_merge": 0
    }
  },
  "conclusion": {
    "status": "negative_but_informative",
    "summary": "Naive boundary snapping or bridge curtains cannot make the A38 replacement patch watertight. They may reduce component count or boundary edges in some cases, but introduce nonmanifold risk and do not solve global stitching. The next step should switch from triangle-level surgery to local implicit completion with visible-locked constraints."
  }
}