LegoFlow

Blockscurator

Core Concepts

Curator has the following core concepts.

PR pool

A PR pool is a language-specific input file containing GitHub pull requests in the form:

owner/repo:pr-123

The block stores PR pools under artifacts/collected_prs/, and the production create scripts read those fixed paths (not pr_collection.output_dir) via swegen create --input-ids-file. Because swegen create parses the file once at startup, collection and generation are run as separate stages — see Run Generation.

Task skeleton

A task skeleton is the Harbor task directory that Curator builds from a PR. It contains the problem instruction, Docker environment, bug patch, solution patch, and verification tests.

The stable structure is:

task_id/
├── task.toml
├── instruction.md
├── environment/
│   ├── Dockerfile
│   └── bug.patch
├── solution/
│   ├── fix.patch
│   └── solve.sh
└── tests/
    └── test.sh

The task ID is derived from the repository and PR number, for example owner__repo-123.

NOP and Oracle validation

Curator does not expose every generated skeleton downstream. It validates a candidate task with two checks:

  • NOP - the unmodified buggy environment should fail the task test.
  • Oracle - applying the ground-truth solution should pass the task test.

Only tasks that pass validation are considered verified.

Verified task manifest

Each language output directory has a manifest:

artifacts/swe_tasks/<lang>-cc/verifiable_tasks.txt

This file is the authoritative downstream contract: a task ID is only safe for tracer or other consumers once it appears here, regardless of what exists on disk.

Batch state

Long runs resume through per-output batch state under artifacts/swe_tasks/<lang>-cc/.swegen-create-batch/<hash>.json, keyed by the resolved absolute path of the input PR file. See Outputs for what it records and how to move it between clones.

Language outputs

Curator uses one output directory per language:

LanguageOutput
Pythonartifacts/swe_tasks/py-cc
JavaScriptartifacts/swe_tasks/js-cc
TypeScriptartifacts/swe_tasks/ts-cc
Goartifacts/swe_tasks/go-cc
Cartifacts/swe_tasks/c-cc
C++artifacts/swe_tasks/cpp-cc
Javaartifacts/swe_tasks/java-cc
Rustartifacts/swe_tasks/rust-cc

Difficulty scoring

Curator adds static difficulty metadata to task.toml (difficulty_score, difficulty_label, difficulty, category, tags) for dataset analysis and sampling. The scoring and tagging method is documented on the Dashboard page.

On this page