{"claim":{"id":"8cbe7882-6216-4d54-a860-e251e77a822a","submission_id":"2b990d68-481c-45f3-9ff0-bc3a7bbe9749","submission_revision_id":"82c60163-2299-43ca-a665-f7ee68d57200","builder":"builder-01","status":"active","claimed_at":"2026-10-15T15:00:01.760304Z","delivered_at":null,"ended_at":null,"delivery_note":null,"end_reason":null},"task":{"submission_id":"2b990d68-481c-45f3-9ff0-bc3a7bbe9749","submission_revision_id":"82c60163-2299-43ca-a665-f7ee68d57200","revision_version":6,"submission_status":"under_review","submitted_at":"2026-08-15T22:34:37.525850Z","submitter_name":"Yuanze Lin","submitter_email":"lin357823511@gmail.com","task":{"status":"submitted","version":6,"extra_fields":{"ai_draft":{"source":"submissions_workbench","status":"ready","preview":{"domain":"3D Reconstruction / Computer Vision Graphics","task_goal":"Reconstruct a textured mesh from multi-view images and calibration, then export a validated USD asset with quantified geometric accuracy.\n\nStarting state: A multi-view image capture of a single object with known camera poses/intrinsics and a sparse reference point cloud are provided, but no dense mesh, UVs, or USD asset exist yet.\n\nInstructions and rules: Run dense multi-view stereo reconstruction from the provided images and camera poses to produce a watertight, manifold mesh, then clean, retopologize lightly if needed, UV-unwrap, and export as USD geometry. Compute quantitative accuracy metrics against the provided reference point cloud (e.g., point-to-mesh distance, completeness, and normal consistency) and report them in a structured metrics file. The mesh must remain within reasonable topology bounds (no excessive non-manifold geometry) and preserve the object's true scale using the provided calibration units.","short_name":"mvs_mesh_reconstruction_usd","input_files":"- images/*.png (PNG, ~60 files, ~150 MB): Multi-view captures of the target object used as raw input for dense reconstruction\n- cameras.txt (TXT (COLMAP format), ~5 KB): Camera intrinsics and extrinsics per image, required to run posed multi-view stereo\n- reference_cloud.ply (PLY, ~20 MB): Sparse ground-truth-aligned point cloud with known scale, used only for scoring geometric accuracy, not for reconstruction","output_files":"- object_model.usdc (USDC) [graded]: Final reconstructed, UV-unwrapped, watertight mesh exported in USD form representing the reconstructed object geometry","operating_system":"Linux","software_licensing":"Free/Open Source","verification_method":"object_model.usdc: parse/schema pass; required fields = 100%; records > 0.\nobject_model.usdc: exact match for ids/labels; numeric delta <= 5% or domain tolerance; blocking mismatches = 0.\nCross-file check: outputs stay traceable to inputs (images/*.png, cameras.txt); mismatch count = 0.\nOverall: machine-readable = true; constraint violations = 0; formats remain comparable (USDC; declared constraints).","evaluation_criterion":"Method: script + rubric review\nMetric: primary reference-output comparison over structure, key values, consistency, and evidence grounding\nThreshold: pass when the primary reference output has no critical mismatch and supporting artifacts show no blocking inconsistency","software_and_version":"COLMAP 3.9, Blender 4.1, OpenUSD 23.11, Python 3.11","tools_software_details":"Software: COLMAP 3.9, Blender 4.1, OpenUSD 23.11, Python 3.11\nDense reconstruct mesh from posed images using COLMAP/MVS pipeline (Tools: COLMAP)\nClean, UV-unwrap, and export mesh as USD with metrics (Tools: Blender, OpenUSD)"},"warnings":["estimated_expert_hours \"\" does not meet the ≥5 hour requirement","expected_output has no structured data file (TSV/CSV/VCF/JSON/BAM etc.)"],"createdAt":1785666789048,"formPrefill":{"extra_fields":{},"industry_domain":"3D Reconstruction / Computer Vision Graphics","task_short_name":"mvs_mesh_reconstruction_usd","operating_system":"Linux","task_description":"# Task Goal\n\nReconstruct a textured mesh from multi-view images and calibration, then export a validated USD asset with quantified geometric accuracy.\n\nStarting state: A multi-view image capture of a single object with known camera poses/intrinsics and a sparse reference point cloud are provided, but no dense mesh, UVs, or USD asset exist yet.\n\nInstructions and rules: Run dense multi-view stereo reconstruction from the provided images and camera poses to produce a watertight, manifold mesh, then clean, retopologize lightly if needed, UV-unwrap, and export as USD geometry. Compute quantitative accuracy metrics against the provided reference point cloud (e.g., point-to-mesh distance, completeness, and normal consistency) and report them in a structured metrics file. The mesh must remain within reasonable topology bounds (no excessive non-manifold geometry) and preserve the object's true scale using the provided calibration units.\n\n# Input Files\n\n- images/*.png (PNG, ~60 files, ~150 MB): Multi-view captures of the target object used as raw input for dense reconstruction\n- cameras.txt (TXT (COLMAP format), ~5 KB): Camera intrinsics and extrinsics per image, required to run posed multi-view stereo\n- reference_cloud.ply (PLY, ~20 MB): Sparse ground-truth-aligned point cloud with known scale, used only for scoring geometric accuracy, not for reconstruction\n\n# Output Files\n\n- object_model.usdc (USDC) [graded]: Final reconstructed, UV-unwrapped, watertight mesh exported in USD form representing the reconstructed object geometry\n\n# Tools / Software Details\n\nSoftware: COLMAP 3.9, Blender 4.1, OpenUSD 23.11, Python 3.11\nDense reconstruct mesh from posed images using COLMAP/MVS pipeline (Tools: COLMAP)\nClean, UV-unwrap, and export mesh as USD with metrics (Tools: Blender, OpenUSD)\n\n# Evaluation Criterion\n\nMethod: script + rubric review\nMetric: primary reference-output comparison over structure, key values, consistency, and evidence grounding\nThreshold: pass when the primary reference output has no critical mismatch and supporting artifacts show no blocking inconsistency","software_licensing":"Free/Open Source","verification_method":"object_model.usdc: parse/schema pass; required fields = 100%; records > 0.\nobject_model.usdc: exact match for ids/labels; numeric delta <= 5% or domain tolerance; blocking mismatches = 0.\nCross-file check: outputs stay traceable to inputs (images/*.png, cameras.txt); mismatch count = 0.\nOverall: machine-readable = true; constraint violations = 0; formats remain comparable (USDC; declared constraints).","software_and_version":"COLMAP 3.9, Blender 4.1, OpenUSD 23.11, Python 3.11"},"draftSession":"f3d37fb1-c42e-484a-92c3-23ca09442f8f"},"difficulty_self_test":{"model":"Claude Opus 4.8","harness":"Claude Code","estimated_score":"10–20%"}},"submitted_at":"2026-08-15T22:34:37.525850+00:00","industry_domain":"3D Reconstruction / Computer Vision Graphics","task_short_name":"mvs_mesh_reconstruction_usd","operating_system":"Linux","task_description":"# Task Goal\n\nReconstruct a textured mesh from multi-view images and calibration, then export a validated USD asset with quantified geometric accuracy.\n\nStarting state: A multi-view image capture of a single object with known camera poses/intrinsics and a sparse scale reference are provided, but no dense mesh, UVs, or USD asset exist yet.\n\nInstructions and rules: Run dense multi-view stereo reconstruction from the provided images and camera poses to produce a watertight, manifold mesh, then clean, retopologize lightly if needed, UV-unwrap, and export as USD geometry. Compute quantitative metrics -- point-to-mesh agreement against the supplied sparse reference, scale, and a full topology validation -- and report them in a structured metrics file. The mesh must remain within reasonable topology bounds (no excessive non-manifold geometry) and preserve the object's true scale using the provided calibration units.\n\nYour geometry must come from the imagery. Grading scores the submitted mesh against a dense ground-truth surface that is deliberately NOT supplied; the sparse reference you receive is a scale and placement anchor, far too coarse to reconstruct from.\n\n# Conventions you must honour\n\n- All lengths are METRES. The world frame is right-handed with +Z up, and the object rests on the plane z = 0. The reconstruction must be delivered at true metric scale; do not normalise, recentre, or rescale the model.\n- `cameras.txt` is a single file carrying BOTH COLMAP blocks (CAMERAS and IMAGES). Unlike a native COLMAP `images.txt`, the per-image `POINTS2D[]` line is omitted, and image names are given as `images/view_XXX.png`. Splitting this into a model COLMAP will accept is part of the task.\n- Poses are WORLD-TO-CAMERA rigid transforms in the COLMAP/OpenCV camera convention (+X right, +Y down, +Z along the viewing direction): for a world point Xw, the camera-frame point is Xc = R(q) * Xw + T. Quaternions are (QW, QX, QY, QZ), Hamilton, unit norm. Images are undistorted pinhole renders with no distortion terms.\n- The camera poses are GIVEN and are correct. Do not re-solve them with an incremental SfM `mapper` run; triangulate against the supplied extrinsics and keep both intrinsics and extrinsics fixed. A correct pipeline reproduces sub-pixel mean reprojection error with all 60 images registered.\n- The object stands on a visible textured floor plane. Segmenting the object from that floor is part of the task.\n- `reference_points_sparse.ply` is a scale and placement reference, not a surface and not the grading ground truth. Its header comments carry the exact `true_bbox_extent_m` and `true_surface_centroid_m`; use those to confirm true metric scale and placement. Do not attempt to reconstruct from its 300 points -- at 16.6 mm spacing, roughly 1/60th of the detail you are expected to resolve and with no normals, surface reconstruction over it scores far outside the accuracy the grade requires.\n- The object's flat base -- about 10% of its surface -- rests on the floor and is never observed by any camera. A correct pipeline must close that region to deliver a watertight result rather than leaving a boundary there. Note also that a surface reconstructor asked to invent that cap will typically bulge it several millimetres BELOW the support plane; trimming the result back to the plane you fitted during floor segmentation is legitimate and materially improves both scale and accuracy. Everything above the base is observed by at least one camera, so there is no unrecoverable undercut anywhere on this capture.\n\n# Deliverable\n\n`object_model.usdc` -- the reconstructed object as a single UsdGeom.Mesh:\n\n- watertight and 2-manifold: zero boundary edges, zero non-manifold edges, a single connected component, consistent outward winding;\n- carries per-vertex or per-face normals and a `primvars:st` UV set covering all faces, with non-overlapping islands;\n- stage metadata `metersPerUnit = 1.0` and `upAxis = \"Z\"`, with `extent` authored;\n- triangle count within a sane band for a 30 cm object at this capture resolution (50,000-600,000 triangles); an unsimplified multi-million-triangle dump or a mesh decimated to a few thousand triangles both fail the topology bound.\n\nGeometry only. UVs and normals are required; a texture image, `UsdShade` material, or baked albedo is NOT required and is not graded. Authoring `primvars:displayColor` per vertex is welcome but optional.\n\nAlongside it, report a structured metrics file (`metrics.json`) computed against `reference_points_sparse.ply`, with at minimum these keys:\n\n- `units` (must be `\"metres\"`) and `graded_artifact`;\n- `reference`: `n_points`, `true_bbox_extent_m`;\n- `reconstruction`: `n_vertices`, `n_triangles`, `bbox_extent_m`, `surface_area_m2`;\n- `agreement_to_reference`: point-to-mesh distance from every reference point, with `mean_m`, `median_m`, `rms_m`, `p95_m`, `max_m`, `within_1mm_pct`;\n- `scale`: `max_abs_extent_error_pct` against `true_bbox_extent_m`, and `centroid_offset_norm_m` against `true_surface_centroid_m`;\n- `topology`: `n_boundary_edges`, `n_nonmanifold_edges`, `n_connected_components`, `euler_poincare_characteristic`, `signed_volume_m3`, `n_degenerate_triangles`, `n_self_intersecting_triangles` (report a number, not null);\n- `uv`: `primvar_name`, `interpolation`, `faces_without_uv`;\n- `normals`: `interpolation`, `covers_all`.\n\nNormal consistency is deliberately absent from this list: the sparse reference ships without normals, so it is evaluated grader-side against the dense ground truth rather than asked of you. Every number in the list IS recomputed independently at grading time and must agree with the mesh you actually submitted. Compute the centroid in closed form (area-weighted over triangles) rather than by surface sampling -- the offset is smaller than the noise of a sampled estimate, and a sampled value will not reproduce.\n\n# Input Files\n\n- `images/*.png` (PNG, 60 files, ~136 MB): Multi-view captures of the target object used as raw input for dense reconstruction. 1600x1200, 8-bit RGB. The object is a relief-covered stone column roughly 0.12 x 0.125 x 0.30 m, standing on a textured floor, shot from three rings at ~14, ~33 and ~55 degrees elevation.\n- `cameras.txt` (TXT, COLMAP format, ~11 KB): Camera intrinsics and extrinsics per image, required to run posed multi-view stereo. One PINHOLE camera (fx = fy = 1866.6667 px, cx = 800, cy = 600) shared by all 60 images.\n- `reference_points_sparse.ply` (PLY, binary little-endian, 4,432 bytes): 300 points, `x y z` float32, no normals, ~16.6 mm spacing. A scale and placement reference. Header comments carry `median_point_spacing_m`, `true_bbox_min_m`, `true_bbox_max_m`, `true_bbox_extent_m` and `true_surface_centroid_m` -- exact values, so scale is checkable without any surface detail being disclosed.\n- `README.md`: the conventions above, restated alongside the data.\n\n# Output Files\n\n- `object_model.usdc` (USDC) [graded]: Final reconstructed, UV-unwrapped, watertight mesh exported in USD form representing the reconstructed object geometry.\n- `metrics.json` (JSON): the structured accuracy report described above.\n\n# Tools / Software Details\n\nIndustry domain: 3D Reconstruction / Computer Vision Graphics\nSoftware: COLMAP 3.9, Blender 4.1, OpenUSD 23.11, Python 3.11\nOperating system: Linux\nLicensing: Free / Open Source\n\n- Dense reconstruct mesh from posed images using COLMAP/MVS pipeline (Tools: COLMAP). `feature_extractor` -> `exhaustive_matcher` -> `point_triangulator` (poses fixed) -> `image_undistorter` -> `patch_match_stereo` (CUDA) -> `stereo_fusion`.\n- Clean, UV-unwrap, and export mesh as USD with metrics (Tools: Blender, OpenUSD). RANSAC floor segmentation, DBSCAN object isolation, screened Poisson surface reconstruction, non-manifold repair and hole closure, light decimation, trim back to the fitted support plane, Smart UV Project, USD export.\n\nExact builds used to produce the reference output: COLMAP 3.9.1 with CUDA, Blender 4.1.1, OpenUSD 23.11, Python 3.11.15, on Ubuntu 22.04.3 LTS x86_64 with a single NVIDIA RTX 6000 Ada (driver 550.127.05, CUDA 12.4).\n\nLicences: COLMAP BSD-3-Clause, Blender GPL-3.0, OpenUSD modified Apache 2.0, Python PSF. Every input asset is generated procedurally by the shipped script, so the whole task is redistributable with no third-party data licence attached.\n\nNote on versions: `usd-core` 23.11 publishes no CPython 3.11 wheel (cp36-cp310 only). Blender 4.1.1 bundles OpenUSD 23.11 (namespace `pxrInternal_v0_23`) and runs Python 3.11, so writing the USD through Blender satisfies the declared stack exactly; a pinned `usd-core==23.11` interpreter is used independently to read back and validate the artifact.\n\n# Environment and Resource Requirements\n\nGPU: required in practice, though only for one stage. COLMAP's `patch_match_stereo` is CUDA-only; everything else (Poisson, mesh repair, UV unwrap, USD export, scoring) is CPU. A COLMAP build without CUDA cannot run dense stereo at all, so plan for one CUDA device.\n\n  Measured on the reference run, 60 images at 1600x1200, single NVIDIA RTX 6000 Ada:\n      patch_match_stereo (photometric + geometric) : ~35 min, ~1.3 GB GPU memory\n      stereo_fusion                                : ~2 min\n      screened Poisson (depth 10, ~95k points)     : ~4 min, CPU\n      pymeshlab repair + decimation to 250k tris   : ~2 min, CPU\n      UV unwrap + USD export (Blender)             : ~2 min, CPU\n      grader-side scoring vs the dense ground truth: ~1 min, CPU\n\n  GPU memory is modest -- 1.3 GB -- so any CUDA card runs this. The constraint is having CUDA at all, not capacity. Reducing `--max_image_size` in `image_undistorter` trades accuracy for time roughly linearly.\n\n  Rendering the capture is itself GPU work (Cycles/OptiX, ~15 min for 60 frames), but that is generation, not the task: solvers receive the rendered PNGs.\n\nCPU / RAM: 16 GB RAM is comfortable; peak host RSS in the reference run was ~11 GB during Poisson. The COLMAP dense workspace (undistorted images plus depth and normal maps) is the disk driver.\n\nDisk: ~25 GB for the dense workspace and intermediates, plus ~10 GB if building the toolchain from scratch. The shipped input archive is 135.4 MiB (136 MiB unpacked) and the graded output 19.4 MiB.\n\nShared machines: benchmark and render on an idle device. During authoring, a render that enumerated every visible GPU allocated on cards other jobs were already using and ran them out of memory; the generator now restricts Cycles to a single device.\n\nReference hardware: NVIDIA RTX 6000 Ada (48 GB), driver 550.127.05, CUDA 12.4, Ubuntu 22.04.3 LTS, Linux x86_64, Python 3.11.15.\n\n# Expected Completion Time\n\n**14 hours** (range 10-20) for an engineer comfortable with photogrammetry who has used COLMAP before. Breakdown, so the figure is auditable:\n\n| hours | activity |\n|---|---|\n| 1.0 | read `cameras.txt` and `README.md`, work out the two format deviations, split it into a model COLMAP accepts |\n| 1.5 | drive the COLMAP chain with poses held fixed (`point_triangulator`, not `mapper`), confirm sub-pixel reprojection |\n| 1.0 | wait on dense stereo, then diagnose fusion parameters |\n| 2.0 | segment object from floor without leaning on the sparse reference (RANSAC plane + clustering) |\n| 2.5 | surface reconstruction and the watertight-manifold fight: repair non-manifold edges, close the unobserved base, decimate without reopening it |\n| 1.0 | notice the base cap bulges below the support plane, trim it back |\n| 1.5 | UV unwrap and USD export with the right primvar names, units and up-axis |\n| 2.5 | write the metrics: point-to-mesh agreement, scale, topology, UV and normals, all agreeing with the mesh actually exported |\n| 1.0 | debugging and iteration |\n\nThe topology work is the part most easily underestimated. Naive Poisson output is not a clean manifold -- the reference run's was 781 components with 284 non-manifold edges -- and the obvious repairs (density trimming, generic hole filling) either reopen boundaries or emit degenerate geometry. Producing a genuinely closed, single-component, correctly wound mesh is ~3.5 of the 14 hours. A \"run COLMAP and export a mesh\" reading finishes in 5-6 hours and fails the topology gates.\n\n# Evaluation Criterion\n\nMethod: script + rubric review\nMetric: primary reference-output comparison over structure, key values, consistency, and evidence grounding\nThreshold: pass when the primary reference output has no critical mismatch and supporting artifacts show no blocking inconsistency","software_licensing":"Free/Open Source","evaluation_criteria":null,"verification_method":"All lengths are in METRES. Tolerances below are absolute unless stated otherwise.\n\nTWO REFERENCE CLOUDS, and the distinction is the integrity boundary of this task:\n* reference_points_sparse.ply -- 300 points, no normals, SHIPPED to the solver. Used only to re-derive what the submission's own metrics.json claims (section D).\n* the dense ground truth -- 820,000 points with normals, GRADER-ONLY, in reference_output.zip under grader/. Used for the geometric gates (section C).\nIt must never be given to a solver: a cloud dense enough to score against is also dense enough to reconstruct from, and section C is what makes cloud-meshing fail.\n\n=== A. object_model.usdc -- parse / schema (hard gate, all must hold) ===\n\nA1. File opens with OpenUSD (Usd.Stage.Open) without error and is a binary crate (.usdc) file. Parse pass = true.\nA2. Stage contains exactly one UsdGeom.Mesh prim carrying the object. Records > 0: points > 0 and faceVertexIndices > 0.\nA3. Required fields present and non-empty = 100%: points, faceVertexCounts, faceVertexIndices, extent, normals, primvars:st.\nA4. Index integrity: min(faceVertexIndices) >= 0 and max(faceVertexIndices) < len(points); sum(faceVertexCounts) == len(faceVertexIndices); every vertex is referenced by at least one face (unreferenced vertices = 0). Violations = 0.\nA5. Stage metadata: metersPerUnit == 1.0 (exact) and upAxis == \"Z\".\nA6a. The UV primvar is named EXACTLY `primvars:st`. Any other name (`st0`, `UVMap`, `primvars:uv`) fails.\nA6b. Its interpolation is `faceVarying` with len == len(faceVertexIndices), or `vertex` with len == len(points). The declared interpolation and the array length must agree with each other.\nA6c. Every face carries UV and all values are finite. Faces with no UV = 0.\nA6d. Normals cover the mesh (len == len(faceVertexIndices) for faceVarying, or == len(points) for vertex) and are unit length to within 1e-3.\nA6e. UV charts do not overlap. GATED, and recomputed by the grader from the submitted mesh rather than read from metrics.json: bucket the UV triangles on a uniform grid, screen candidate pairs with a separating-axis test, and clip each surviving pair (Sutherland-Hodgman) for exact overlap area. Total overlap <= 0.10% of total UV area. Do not accept the submitter's own figure: a rasterised estimate at any practical resolution reports a flat 0.0 on meshes that do overlap -- on the reference itself it reported 0.0 where exact clipping finds 77 overlapping pairs (0.000012% of UV area, which passes, but only because it was measured).\nA7. No NaN or Inf in points, normals, or primvars:st. Count = 0.\n\n=== B. object_model.usdc -- topology (hard gate, all must hold) ===\n\nB1. Watertight: number of boundary edges (edges incident to exactly one face) == 0. Note this is the closed-surface definition, computed directly from the edge-face incidence. Do NOT use Open3D's `is_watertight()` as the gate: it additionally runs a self-intersection test, so a perfectly closed manifold reports False merely for having a few intersecting triangles. Self-intersections are gated separately and independently (B7).\nB2. Manifold: number of non-manifold edges (edges incident to >2 faces) == 0 and every vertex is manifold.\nB3. Exactly 1 connected component.\nB4. Consistent orientation: mesh is orientable with consistent winding; the divergence-theorem signed volume is > 0 (outward-facing normals, not inverted).\nB5. Triangle count within [50000, 600000]. Outside this band = topology-bound failure.\nB6. Degenerate triangles (zero area within 1e-12 m^2) = 0.\nB7. Self-intersecting triangles = 0, recomputed by the grader from the submitted mesh, not read from metrics.json: bucket triangle AABBs on a uniform grid, and for each candidate pair run a Moller-Trumbore segment-triangle test on all six edges, excluding pairs that share a vertex. The reference recomputes 0 from 110,383 candidate pairs.\nB8. The submitted `topology.n_self_intersecting_triangles` must be a genuine integer -- not null, not a bool, not a float, not a string -- AND equal the value recomputed in B7. This gate exists because the field was previously only checked for non-nullness, which a submission satisfies by writing any number at all.\nB9. Genus / Euler characteristic: reported, not gated. Poisson reconstruction of a real capture normally leaves a handful of small handles. Reference: euler = 2, genus = 0.\n\n=== C. object_model.usdc -- geometric agreement with the DENSE grader-only ground truth ===\n\nComputed against the DENSE GRADER-ONLY cloud (820,000 points with normals), not against the sparse reference the solver receives. This section is the anti-shortcut mechanism: it is the only place the true surface is used, and a submission built by meshing the shipped sparse points cannot pass it.\n\nC1. Scale (this is the \"exact match for key values\" check; scale is the one quantity that is objectively fixed by the supplied calibration): per-axis bounding-box extent of the mesh vs `true_bbox_extent_m` from the sparse reference header, max |ratio - 1| <= 3%. A model that is normalised, unit-scaled, or recentred fails here.\nC2. Completeness -- exact point-to-mesh distance from each reference point to the mesh: mean <= 1.0 mm AND >= 90% of reference points within 1 mm.\nC3. Accuracy -- distance from >= 500k points sampled on the mesh to the nearest reference point: mean <= 1.0 mm AND >= 90% of sampled points within 1 mm.\nC4. Chamfer (mean of C2 and C3 means) <= 1.0 mm.\nC5. Normal consistency -- mean |cos| between each reference normal and the normal of the closest triangle >= 0.95, and >= 95% of reference points within 30 degrees.\nC6. Position: offset between the mesh's CLOSED-FORM area-weighted surface centroid and `true_surface_centroid_m` <= 2 mm. Compute the mesh centroid analytically as sum(area_i * centroid_i) / sum(area_i) over triangles. Do NOT estimate either side by surface sampling: the quantity being measured is sub-millimetre, smaller than the noise of a sampled estimate, and two independently sampled centroids disagreed by 55% on this very asset. Do NOT use the mesh's vertex mean either -- decimation concentrates vertices in high-curvature regions, which alone reported a 25.8 mm offset where the true value was 2.2 mm.\n\nCalibration of these numbers: the capture resolves ~0.33 mm per pixel at the object surface, and the reference solution achieves accuracy 0.26 mm mean / 0.23 mm median (max 1.41 mm), completeness 0.14 mm mean (max 1.80 mm), 99.9% within 1 mm on both, normal consistency 0.997, scale error 0.43%, centroid offset 0.66 mm. The thresholds above sit roughly 4x looser than that, which leaves room for a competent pipeline with different parameter choices while still rejecting an over-smoothed, shrunken, mis-scaled or partially-missing reconstruction.\n\n=== D. metrics.json -- supporting artifact ===\n\nD1. Valid JSON; machine-readable = true.\nD2. Required fields present, 100% of them. Missing any key below is a blocking failure:\n      units (== \"metres\"), graded_artifact\n      reference.n_points, reference.true_bbox_extent_m\n      reconstruction.n_vertices, .n_triangles, .bbox_extent_m, .surface_area_m2\n      agreement_to_reference.mean_m, .median_m, .rms_m, .p95_m, .max_m, .within_1mm_pct\n      scale.max_abs_extent_error_pct, scale.centroid_offset_norm_m\n      topology.n_boundary_edges, .n_nonmanifold_edges, .n_connected_components,\n              .euler_poincare_characteristic, .signed_volume_m3,\n              .n_degenerate_triangles, .n_self_intersecting_triangles\n      uv.primvar_name, .interpolation, .faces_without_uv\n      normals.interpolation, .covers_all\nD3. Internal consistency -- EVERY published number is recomputed from the submitted\n    object_model.usdc and reference_points_sparse.ply, and must agree within 5% relative\n    (or 5e-5 m absolute for sub-millimetre distances, 0.5 percentage points for\n    percentages). Integer counts must match exactly. The 21 recomputed quantities are:\n      agreement mean / median / RMS / p95 / max / within_1mm_pct\n      scale extent-error and centroid-offset norm\n      reconstruction triangle count, vertex count, surface area\n      topology boundary edges, non-manifold edges, components, Euler characteristic,\n               signed volume, and n_self_intersecting_triangles -- which must be an\n               integer equal to the independently recomputed count (see B7/B8), not\n               merely non-null\n      uv primvar name, interpolation, and overlap_pct -- checked against the exact\n         clipped overlap area from A6e, to 0.05 percentage points\n      normals coverage\n    A metrics file that disagrees with its own mesh is a blocking inconsistency,\n    whatever the mesh scores.\nD4. Units declared as metres and consistent with the reported magnitudes.\n\n=== E. Cross-file / provenance checks ===\n\nE1. Outputs stay traceable to inputs: the mesh occupies the same world frame as cameras.txt. Verification -- project the mesh vertices into all 60 supplied camera poses with the supplied intrinsics; >= 95% of projected vertices must fall inside the 1600x1200 image bounds, in every view. Mismatch count = 0 views failing.\nE2. The reconstruction must not be a copy of the shipped reference: any submission whose vertex set is an exact subset of reference_points_sparse.ply (>= 99% exact coordinate matches) is rejected as not-a-reconstruction.\nE3. The reconstruction resolves detail the sparse reference cannot express: triangle count > 20x the sparse reference point count. This is a cheap structural guard; section C is the real one.\nE4. Formats remain comparable: submitted geometry is USDC, distances in metres, declared constraints unchanged. Constraint violations = 0.\n\n=== F. Overall ===\n\nPASS requires: every gate in A and B holds; every threshold in C holds; D1-D4 hold; E1-E4 hold. Blocking mismatches = 0.\n\nSections A, B, D1-D3, E2, E3 and E4 are fully scriptable and should be automated. C and D3 are scriptable given the reference cloud. Rubric review is only needed to judge whether the pipeline narrative and the artifacts are mutually consistent (for example, a mesh that passes C but whose metrics.json claims a different triangle count than the USD actually contains).\n\n=== G. Artifact provenance ===\n\nArchives as submitted:\n\n  upload/input_materials.zip     141,938,153 bytes (135.4 MiB)\n    sha256 f5e0687b05e93edb420ee97c5dc79b976430132e96afbeee134dd592f7bae2bb\n    images/view_000.png .. view_059.png   60 files, 1600x1200 8-bit RGB, ~136 MB\n    cameras.txt                           11 KB, one PINHOLE camera + 60 poses\n    reference_points_sparse.ply           300 points, no normals, exact scale anchors\n                                          in the header comments\n    README.md                             units, frames, cameras.txt deviations, and\n                                          what the sparse reference is and is not\n    MANIFEST.sha256                       per-member SHA-256 of all 63 members\n\n  upload/reference_output.zip     31,301,406 bytes (29.8 MiB)\n    sha256 ca8e3a9892d19e654ad0647d8d9427b2d3094843193b469c5bad0ac91dd11893\n    object_model.usdc                     [GRADED]\n    metrics.json                          the structured report, scored vs the sparse ref\n    usd_schema_dump.json                  parser-free view of the crate schema\n    validation_report.json                all 34 gates, plus a `measurements`\n                                          block with the grader-side numbers\n    README.md                             generated from the artifacts, not hand-written\n    solution/                             the pipeline in run order + run_manifest.json\n    grader/                               GRADER-ONLY: the dense ground truth, the\n                                          shortcut measurement, and the scripts for both\n    provenance/                           capture generator, pose check, visibility audit,\n                                          gt_mesh.ply, capture_meta.json\n    MANIFEST.sha256                       per-member SHA-256 of all 34 members\n\nNothing under `grader/` or `provenance/` may be shown to a solver. In particular `grader/reference_cloud_dense.ply` is the scoring ground truth and `provenance/gt_mesh.ply` is the true surface it was sampled from.\n\nBoth archives are built reproducibly, and both carry their own MANIFEST.sha256.\n\n  Reproducible. `70_package.sh` freezes every staged file's mtime to a fixed stamp, sorts\n  entry order under LC_ALL=C, and passes `zip -X` to drop uid/gid and high-precision-time\n  extras. Rebuilding from the same content yields byte-identical archives; the script\n  proves this rather than claiming it, rebuilding each archive a second time and aborting\n  the build if the two hashes differ. This is not cosmetic -- without it, `cp` restamps\n  the stage on every packaging run, so two builds of identical CONTENT produced archives\n  of identical SIZE with different SHA-256, and a published hash could describe a\n  different build than the file that was uploaded.\n\n  MANIFEST.sha256. Each archive contains a manifest of per-member SHA-256 hashes. If the\n  hosting platform ever recompresses or re-zips on upload, the container hash changes but\n  the per-member hashes do not, so the contents stay verifiable either way. Check with:\n\n    unzip -p input_materials.zip MANIFEST.sha256 > /tmp/m && \\\n      cd <extracted-dir> && sha256sum -c /tmp/m\n\n  `71_verify_archives.py` does this automatically, recomputing all 97 member hashes\n  (63 + 34) directly from the archive bytes rather than reconciling two written files.\n  Full output in archive_audit.txt: 47/47 checks pass.\n\nToolchain that produced the reference (also in solution/run_manifest.json): COLMAP 3.9.1 with CUDA, Blender 4.1.1, OpenUSD 23.11, Python 3.11.15, open3d 0.19.0, on Ubuntu 22.04.3 LTS with one NVIDIA RTX 6000 Ada (driver 550.127.05, CUDA 12.4).\n\n=== H. Difficulty calibration ===\n\nReference measurements, all recomputed from the submitted `object_model.usdc` rather than trusted from its metrics file:\n\n  accuracy      mean 0.2609 mm | median 0.2314 | RMS 0.2956 | p95 0.5410 | max 1.4071\n  completeness  mean 0.1446 mm | median 0.0925 | RMS 0.2127 | p95 0.5038 | max 1.7973\n  within 1 mm   accuracy 99.97% | completeness 99.84%\n  chamfer       0.2028 mm      F-score @1 mm 99.904%\n  normals       mean |cos| 0.9967 | 99.77% within 30 deg\n  scale         max per-axis extent error 0.427%\n  centroid      0.6605 mm (closed form, deterministic)\n  topology      249,820 tris | 0 boundary edges | 0 non-manifold edges\n                | 1 component | euler 2 (genus 0) | 0 self-intersections\n                | signed volume +0.002670 m^3\n  sparse agree  mean 0.1422 mm | within 1 mm 100.00%  (what metrics.json reports)\n  COLMAP        60/60 images registered, 0.233 px mean reprojection error, intrinsics\n                AND extrinsics held fixed (--Mapper.fix_existing_images 1, set explicitly\n                because it defaults to 0; solution/pose_drift.json measures the drift\n                under the default at 2.09e-06 deg / 0.0 mm, i.e. the flag is a guarantee\n                for the solver, not a change to this reference)\n\nWhere the thresholds come from. Section C's gates sit ~4x looser than the numbers above.\nThat gap is deliberate: it leaves room for a competent pipeline with different Poisson depth, fusion parameters or decimation target, while still rejecting an over-smoothed, shrunken, mis-scaled or partially-missing reconstruction.\n\nWhy the dense cloud is grader-only, measured rather than asserted. An earlier revision shipped the 820,000-point oriented ground truth to solvers as the scoring reference. At 0.3 mm spacing it is dense enough to reconstruct from directly, so a submission could mesh the scoring data and never touch the imagery. The shipped sparse reference was sized by mounting that attack at several densities and scoring each result against the dense ground truth:\n\n  points  spacing   shortcut acc / comp   within 1mm (acc/comp)   tris   C-gates\n     200  20.08mm   1.676 / 2.009 mm      38.9% / 36.9%           2924   0 of 4\n     250  17.79mm   1.436 / 1.756 mm      45.9% / 43.1%           2880   0 of 4\n     300  16.59mm   1.239 / 1.508 mm      51.6% / 49.0%           2826   0 of 4  <- SHIPPED\n     350  15.10mm   1.151 / 1.391 mm      54.7% / 51.5%           2765   0 of 4\n     400  14.26mm   1.037 / 1.250 mm      59.0% / 56.0%           2834   0 of 4\n     500  12.70mm   0.962 / 1.185 mm      64.9% / 61.3%           2746   1 of 4\n    1000   9.00mm   0.740 / 0.905 mm      75.2% / 71.4%           2706   2 of 4\n    1500   7.40mm   0.632 / 0.909 mm      83.6% / 77.2%           6049   2 of 4\n    3000   5.22mm   0.408 / 0.439 mm      97.1% / 93.2%          11236   4 of 4  <- unsafe\n    6000   3.69mm   0.354 / 0.409 mm      98.3% / 92.6%          20646   4 of 4  <- unsafe\n   12000   2.62mm   0.248 / 0.180 mm      99.8% / 97.3%          45158   4 of 4  <- unsafe\n\nThe cliff sits between 1,500 and 3,000 points. 300 was chosen as the size at which the shortcut fails EVERY gate with margin: its accuracy mean sits 24% above the 1.0 mm bar, and it reaches only 51.6% within 1 mm against a 90% requirement -- a gap no surface reconstructor closes from 16.6 mm point spacing. 400 also fails every gate but clears the accuracy mean by just 3.7%, too thin if a solver brings a better reconstructor than the one used here. Verified end to end: the attack was re-run on the exact reference_points_sparse.ply extracted from input_materials.zip and fails 5 of 5 gates (C2 mean, C2 percentage, C3 mean, C3 percentage, B5 triangle band). Full data in reference_output.zip under grader/sparse_design_report.json and grader/size_sweep.json.\n\nTwo further calibration points show the bands discriminate rather than rubber-stamp:\n\n  - leaving the Poisson base cap untrimmed (a plausible pipeline that skips one step) scores 0.68 mm accuracy and 1.73% scale error -- still passes, correctly, since it is a legitimate reconstruction, just a rougher one;\n  - an earlier version of the capture whose object had 23% unobservable undercut scored 2.17 mm accuracy with 80.4% within 1 mm, which fails C2/C3 outright.\n\nWhat is NOT measured. The difficulty self-test figure on the form (10-20%) is an ESTIMATE inherited from the submission template. Unlike the sibling tasks in this batch, no blind trial has been run for this task: no fresh agent has been given only the task statement and inputs and graded independently. Treat the band as unvalidated. The scriptable gates in sections A, B, D1-D3, E2, E3 and E4 are what the grade should rest on; `60_validate_reference.py` in `solution/` is the runnable grader and reports 34/34 on the reference.","software_and_version":"COLMAP 3.9, Blender 4.1, OpenUSD 23.11, Python 3.11","specific_requirements":null,"expected_completion_time":null},"files":[{"file_id":"c380a634-ace6-40e3-ba50-ff794db2fba0","filename":"reference_output.zip","category":"reference_output","content_type":"application/zip","size_bytes":31301406},{"file_id":"b77c9061-5106-46cc-a809-a41170da704e","filename":"selftest_evidence.txt","category":"difficulty_self_test_evidence","content_type":"text/plain","size_bytes":4474},{"file_id":"6c5b8fa6-24ef-4a2d-b324-62f8059eaf41","filename":"input_materials.zip","category":"input_materials","content_type":"application/zip","size_bytes":141938153}],"deep_review":{"overall_verdict":"Strong Accept","review_text":"**Overall Verdict:** Strong Accept — The submission is complete, professionally scoped, objectively evaluable, and supported by coherent, integrity-checked inputs and reference evidence.\n\n**Completeness Check:**\n- Instruction: Complete — Defines reconstruction constraints, coordinate conventions, deliverables, topology requirements, metrics, and solver-visible versus grader-only references precisely.\n- Inputs: Complete — Includes 60 valid 1600×1200 RGB views, 60 matching normalized camera poses, shared pinhole intrinsics, documentation, and a correctly structured 300-point binary PLY scale reference.\n- Toolchain: Complete — Provides a viable open-source Linux workflow using COLMAP, Blender, OpenUSD, and Python, with realistic CUDA, memory, disk, and runtime requirements.\n- Reference output: Complete — Includes a genuine binary USD crate, structured metrics, schema dump, validation report, production scripts, provenance, and dense grader-only geometry. Reported geometry and metric values are internally coherent.\n- Rubric: Complete — Supplies explicit hard gates, numerical tolerances, independent recomputation requirements, anti-shortcut controls, and clear pass criteria across schema, topology, geometry, metrics, and provenance.\n\n**File and Task Reachability:**\nAttachment classification: `reachable`. I inspected `input_materials.zip`, `reference_output.zip`, and `selftest_evidence.txt`. Both archives matched their declared sizes and published container hashes, passed compressed-data checks, contained no encrypted or unsafe-path members, and verified every member covered by their internal manifests. Relevant members inspected included both READMEs, all image metadata, representative images from each elevation ring, `cameras.txt`, the sparse and dense PLY headers, `object_model.usdc`, `metrics.json`, `usd_schema_dump.json`, `validation_report.json`, run metadata, grader reports, and the principal pipeline, export, metric, validation, and provenance sources. No attachment was left unreviewed at the inventory and format level; submitted programs were reviewed statically and not executed. An independent OpenUSD runtime was unavailable to reopen the crate semantically, but its crate signature and actual file type were confirmed and its included schema dump and validation evidence were consistent. This is a reviewer-tooling limitation, not a submission barrier.\n\nTask classification: `reachable`. A suitable single Linux workstation with a CUDA GPU can process the supplied images through fixed-pose MVS, isolate the object, construct and repair the mesh, unwrap UVs, export USDC, and generate the required metrics. The dense ground truth and true source mesh are confined to the reference/evaluator archive, while solver inputs expose only coarse scale and placement anchors. Evaluation is deterministic and covers the complete output contract. License keys, accounts, tokens, and other credentials are not required from the contributor. Confidential, proprietary, or internal material may be evaluated as submitted evidence without requiring additional disclosure.\n\n**Special Screening:**\nNone\n\n**Recommended Changes:**\nThe submission already provides unusually thorough task, provenance, anti-shortcut, and validation evidence. No changes are required.","reviewed_at":"2026-09-15T10:10:55.031153Z"},"claim":{"id":"8cbe7882-6216-4d54-a860-e251e77a822a","submission_id":"2b990d68-481c-45f3-9ff0-bc3a7bbe9749","submission_revision_id":"82c60163-2299-43ca-a665-f7ee68d57200","builder":"builder-01","status":"active","claimed_at":"2026-10-15T15:00:01.760304Z","delivered_at":null,"ended_at":null,"delivery_note":null,"end_reason":null}},"revision_is_current":true}