{"claim":{"id":"16958bdf-08a7-45c8-8ae1-c88a7727615e","submission_id":"1476c38a-10dd-48b1-8a16-1989d5a89682","submission_revision_id":"1ff58883-9d58-4159-b640-f522a3a2d201","builder":"builder-01","status":"active","claimed_at":"2026-10-15T16:21:20.899554Z","delivered_at":null,"ended_at":null,"delivery_note":null,"end_reason":null},"task":{"submission_id":"1476c38a-10dd-48b1-8a16-1989d5a89682","submission_revision_id":"1ff58883-9d58-4159-b640-f522a3a2d201","revision_version":1,"submission_status":"under_review","submitted_at":"2026-10-12T16:36:41.957545Z","submitter_name":"Ziao Yang","submitter_email":"ziaoyang@brandeis.edu","task":{"status":"submitted","version":1,"extra_fields":{},"submitted_at":"2026-10-12T16:36:41.957545+00:00","industry_domain":"Manufacturing Engineering (composite tooling, segmented mandrel design)","task_short_name":"composite_duct_mandrel_extraction_1","operating_system":"Linux","task_description":"# MANDREL\n\n## Objective\n\nA composite duct is made by laying prepreg over a reusable aluminium mandrel and curing it in an autoclave. The duct has constant depth, a closed end and one opening. Design the mandrel as separate rigid pieces that can be removed through that opening after curing. Each piece spans the full depth; motion is confined to the supplied two-dimensional plane, and consumable inserts are not permitted.\n\nWrite a reusable program that determines the piece boundaries, removal order and extraction paths for a supplied cavity.\n\n## Inputs\n\nEach instance consists of two JSON files. Coordinates and translations are in millimetres; areas are in square millimetres.\n\n- `cavity.json`: `polygon` is the cavity boundary as an ordered, clockwise list of `[x, y]` vertices forming a valid simple polygon without holes; the first vertex is not repeated at the end. `port` contains the two endpoints of its open edge, which coincide with two consecutive polygon vertices to within 1e-6 mm, with all other edges treated as walls; `sweep_path` is the design centreline from the closed end to the opening, sampled at approximately 2 mm intervals; `units` is `\"mm\"`.\n- `params.json`: `delta` is the geometric allowance used by the motion checks below, fixed at 1.0 mm; `A_min` is the minimum piece area, fixed at 10000 mm²; `N_max` is the instance-specific maximum number of pieces.\n\nThe exterior is the half-plane on the outward side of the line through `port`, as defined by `check.py`. Public examples E1–E3 and the exact checker used for scoring are provided in `input_materials/examples/`.\n\n## Deliverable and execution\n\nSave your program as `base/output/mandrel/solve.py`. For each evaluation instance, it will be invoked from its own program directory as:\n\n```text\npython3 solve.py --cavity <absolute-path-to-cavity.json> --params <absolute-path-to-params.json> --out <absolute-output-directory>\n```\n\nThe input files are supplied in a fresh temporary directory. The output directory already exists. Write `plan.json` there as a regular file, not a symbolic link, and exit with code 0. When the program runs, only the files saved in `base/output/mandrel/` are available to it; other workspace files, including `input_materials/examples/`, are not.\n\nEach invocation runs on Linux as the unprivileged user `nobody`, with two CPU cores, 8 GB of memory, a 300-second wall-clock limit and no network access. The environment is cleared except for `PATH=/usr/local/bin:/usr/bin:/bin`, `HOME=/tmp`, `PYTHONDONTWRITEBYTECODE=1` and `OMP_NUM_THREADS=2`.\n\nUse Python 3.11 and the preinstalled packages only: numpy 2.4.6, scipy 1.17.1, shapely 2.1.2, trimesh 5.1.0, manifold3d 3.5.3, networkx 3.6.1 and mapbox-earcut 2.1.0. The supplied `runtime_env/requirements.lock` specifies the dependencies.\n\n## Output format\n\n`plan.json` must contain a nonempty `pieces` array. Its order is the removal order. Each entry describes one piece:\n\n- `id`: a unique string identifier. If omitted, the checker uses the array index; identifiers must remain unique after conversion to strings.\n- `outer`: at least three `[x, y]` vertices defining a valid simple polygon without holes, in its initial position in cavity coordinates.\n- `path`: at least two poses `[tx, ty, theta_deg]`. All coordinates and pose values must be finite. The first pose must be `[0, 0, 0]`, within an absolute tolerance of `1e-9` in each component.\n\nA pose maps each original vertex `p` to `R(theta_deg) p + [tx, ty]`. Angles are in degrees, positive counterclockwise, and rotation is about the coordinate origin. Between consecutive poses, all three pose components are linearly interpolated. Pieces awaiting removal remain at their initial positions; removed pieces no longer obstruct subsequent pieces.\n\n## Acceptance rules\n\nAn instance passes only if the output satisfies every check in the supplied `check.py`.\n\n1. **Piece count and area.** The number of pieces must not exceed `N_max`. Every piece must have area at least `A_min`, with no area tolerance on this minimum.\n\n2. **Initial placement.** Each piece may have at most 0.25 mm² outside the cavity buffered outward by 0.25 mm. For overlap and coverage, the checker snaps the piece and cavity geometries to a `1e-6` mm grid. The sum of the snapped piece areas minus their union area must be at most 12.5 mm². The area of the snapped cavity left uncovered by that union must be at most 0.5% of the original cavity area.\n\n3. **Motion.** At every checked pose, at most 0.25 mm² of the moving piece may lie outside the union of the cavity buffered outward by `delta` and the exterior half-plane. Its intersection with the union of all remaining pieces buffered inward by `delta` must also have area at most 0.25 mm². Buffering and geometric operations use the supplied checker's Shapely definitions.\n\n4. **Path sampling.** For each pair of consecutive poses, the checker computes the largest Euclidean displacement of any piece vertex between the two endpoint poses, `d`. It sets `n = max(1, ceil(d / 0.5 mm))` and checks the linearly interpolated poses at fractions `1/n, 2/n, ..., 1` of that segment.\n\n5. **Completed extraction.** At the final pose, the entire piece must be contained in the exterior half-plane offset outward by 1 mm from the opening line, using the containment test in `check.py`.\n\n## Scoring\n\nThe program is evaluated independently on ten hidden instances. They use the same input format, `delta` and `A_min` as the public examples, have coordinates within ±5000 mm, and supply their own `N_max`. Their cavity shapes differ and are not variants of the public examples. Every hidden instance has a feasible solution.\n\nThe score is the number of hidden instances passed divided by ten. Public examples do not contribute to the score. A missing program, nonzero exit code, timeout, missing or malformed output, or any failed check makes that instance fail. Full credit requires all ten hidden instances to pass.\n","software_licensing":"Free/Open Source","evaluation_criteria":null,"verification_method":"The deliverable is a reusable program, base/output/mandrel/solve.py. It is evaluated on the ten hidden cavities in reference_and_eval/hidden_instances/ (H01-H10), which must not be shown to the agent. The three public examples are for development only and are not scored.\n\nFor each hidden instance, independently:\n1. Create a fresh temporary directory containing only that instance's cavity.json and params.json, and an empty output directory writable by the unprivileged user.\n2. Run, from the program directory, as the unprivileged user nobody with the environment cleared except PATH=/usr/local/bin:/usr/bin:/bin, HOME=/tmp, PYTHONDONTWRITEBYTECODE=1 and OMP_NUM_THREADS=2, pinned to two CPU cores, with no network access and a 300 s wall-clock limit:\n   python3 solve.py --cavity <abs path> --params <abs path> --out <abs output dir>\n   Only the files in base/output/mandrel/ are available to the program.\n3. The instance passes only if the program exits with code 0 within the time limit, writes plan.json as a regular file, and the plan passes every check in grader/check.py (the same file as input_materials/examples/check.py): python3 check.py <instance directory containing cavity.json and params.json> <plan.json> must report \"pass\": true.\n\nScore = number of hidden instances passed / 10. A missing program, nonzero exit, timeout, missing or malformed plan.json, or any failed check fails that instance.\n\ngrader/test_outputs.py and grader/test.sh implement exactly this procedure; grader/Dockerfile and grader/requirements.lock give the evaluation environment (Python 3.11, numpy 2.4.6, shapely 2.1.2). reference_outputs/ holds the plans produced by a real run of reference_program/solve.py under this procedure (10/10 pass); they are evidence of feasibility only and are not compared against the agent's output, because many different plans are valid.\n\nRequests for implementation:\n- Keep hidden_instances/, reference_outputs/ and reference_program/ out of the agent's environment during the agent run; the task is only meaningful if the program must work on cavities it has not seen.\n- Run the evaluation without network access.\n- Provide Python 3.11 with the packages in input_materials/runtime_env/requirements.lock both during the agent run and for evaluation, and make the relative paths in the task description (base/output/mandrel/, input_materials/examples/, runtime_env/requirements.lock) valid relative to the agent's working directory.\n- Allow an agent time limit of 14400 s.","software_and_version":"Python 3.11 with numpy 2.4.6, scipy 1.17.1, shapely 2.1.2, trimesh 5.1.0, manifold3d 3.5.3, networkx 3.6.1, mapbox-earcut 2.1.0 (pinned in input_materials/runtime_env/requirements.lock)","specific_requirements":null,"expected_completion_time":null},"files":[{"file_id":"f20c443e-79d3-409e-9fe3-46a3d504e7ce","filename":"input_materials.zip","category":"input_materials","content_type":"application/zip","size_bytes":135204},{"file_id":"c3a823c0-9561-4478-a79c-8779c973d7c0","filename":"reference_and_eval.zip","category":"reference_output","content_type":"application/zip","size_bytes":1950840}],"deep_review":{"overall_verdict":"Accept","review_text":"**Overall Verdict:** Accept — The submission is complete and objectively evaluable, with coherent inputs, matching checkers, and supplied evidence of feasible solutions for all ten hidden instances.\n\n**Completeness Check:**\n\n- Instruction: Complete — Defines the geometry, rigid-piece constraints, program interface, output schema, tolerances, and execution limits.\n- Inputs: Complete — All three public and ten hidden input pairs parse successfully; units, clockwise boundaries, port adjacency, sampling, and parameters match the specification.\n- Toolchain: Complete — Python 3.11, pinned open-source dependencies, matching dependency locks, and environment definitions are supplied.\n- Reference output: Complete — Ten reference plans, result reports, execution logs, and reusable solver source are included. Independent structural checks found no inconsistencies.\n- Rubric: Complete — Identical public and grading checkers implement the stated placement, motion, extraction, and area rules; scoring awards credit independently across ten cases.\n\n**File and Task Reachability:**\n\nAttachments: `reachable`. Both `input_materials.zip` and `reference_and_eval.zip` match their manifest byte counts and pass archive integrity checks. No encryption, unsafe paths, links, or excessive expansion were found. All 66 contained files are readable UTF-8 text.\n\nInspected content includes every `cavity.json`, `params.json`, `plan.json`, `result.json`, and `solve.log`, both `check.py` copies, both `requirements.lock` files, the Dockerfiles, `test_outputs.py`, `test.sh`, and reference `solve.py` and `solve.sh`. No relevant attachment content remains unreviewed.\n\nTask: `reachable`. Public inputs support development; the packaged program is evaluated independently on protected hidden inputs using objective geometric checks. The required separation of hidden inputs and reference assets is explicit. Supplied reports record ten passes and solver runtimes below 15 seconds. Container builds and full motion-check results were not independently reproduced; uploaded code was inspected without execution.\n\nLicense 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:**\n\nNone. No affirmative evidence supports a policy screening label. Public-benchmark provenance could not be independently checked because approved search was unavailable.\n\n**Recommended Changes:**\n\nThe precise output contract, matching checkers, protected evaluation assets, and complete reference evidence support readiness. No contributor changes are required.","reviewed_at":"2026-10-12T16:43:59.538960Z"},"claim":{"id":"16958bdf-08a7-45c8-8ae1-c88a7727615e","submission_id":"1476c38a-10dd-48b1-8a16-1989d5a89682","submission_revision_id":"1ff58883-9d58-4159-b640-f522a3a2d201","builder":"builder-01","status":"active","claimed_at":"2026-10-15T16:21:20.899554Z","delivered_at":null,"ended_at":null,"delivery_note":null,"end_reason":null}},"revision_is_current":true}