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-123The 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.shThe 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.txtThis 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:
| Language | Output |
|---|---|
| Python | artifacts/swe_tasks/py-cc |
| JavaScript | artifacts/swe_tasks/js-cc |
| TypeScript | artifacts/swe_tasks/ts-cc |
| Go | artifacts/swe_tasks/go-cc |
| C | artifacts/swe_tasks/c-cc |
| C++ | artifacts/swe_tasks/cpp-cc |
| Java | artifacts/swe_tasks/java-cc |
| Rust | artifacts/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.