# Cursor vs Windsurf: IBF editor task pack v1

Status: protocol and harness available; vendor comparison pending. No tool winner.

## Requirements and boundaries

Use Node.js 22 or later and Git. The pack uses Node built-ins only and makes no network requests. Your chosen editor may contact its own service. Only run trusted candidate code in a disposable workspace without credentials; grading executes that code in a child process. Its five-second process deadline is a harness limit, not an editor performance target or security sandbox.

Keep editor settings, model, context, rules and permissions equivalent where possible. If the same model is unavailable, label the result a product-plus-model comparison. Never impersonate a missing product with another agent or session. Record the actual installed product name: documentation and product branding can change.

## Prepare

Download editor-benchmark.mjs beside this document. Inspect it, then run:

```sh
node editor-benchmark.mjs init editor-trial
```

This creates identical `cursor/` and `windsurf/` working directories, each containing `orders.mjs` and `PROMPT.md`. The parent directory holds metadata templates and `status.json`. Initialization refuses an existing destination. The initial code deliberately has broken pagination and no status filter. Its failure is a baseline control, never a vendor result.

Keep the downloaded runner outside both editor folders. Give each editor only its own folder, using a fresh conversation. Paste the entire PROMPT.md verbatim. Do not feed it the other editor's solution. Record the exact prompt actually sent, editor version, model, mode, operating system, Node version, settings and start/end timestamps in your transcript. Start timing when you submit the prompt; stop when the agent declares its patch ready. Save every follow-up and command failure. Count each follow-up or manual code edit as an intervention; record the kind in the transcript.

The task is to fix one-based pagination and add filtering before pagination. Acceptance checks cover defaults, the next page, both status filters, input preservation, empty/out-of-range output and invalid options. Only orders.mjs may change; no dependencies or network features belong in the solution.

## Capture and grade

Fill the corresponding metadata JSON outside the candidate folder. Every null must become an observed value; zero reviewer minutes is allowed only when actually measured. `transcript_path` must point to a nonempty local transcript file. This path resolves from the shell's current directory; an absolute path avoids ambiguity. Use ISO timestamps with timezone, nonnegative reviewer minutes, and a nonnegative integer intervention count.

Review the patch separately after generation. Time that review until you accept it or reject it; do not silently repair it and report the repaired version as the agent's original output. Keep initial and revised receipts separately. Save the source and full transcript for each attempt.

```sh
node editor-benchmark.mjs grade editor-trial/cursor editor-trial/cursor-metadata.json > cursor-result.json
node editor-benchmark.mjs grade editor-trial/windsurf editor-trial/windsurf-metadata.json > windsurf-result.json
```

Exit 0 means the fixed acceptance cases passed. Exit 1 means a recorded acceptance failure. Exit 2 means invalid inputs or a harness failure; fix the harness/input issue before comparing. Shell redirection can produce an empty file on exit 2, so check the command exit and error output. Never treat an empty receipt as a pass.

The receipt contains per-check outcomes, source/prompt fingerprints, the module diff, elapsed generation seconds and operator-supplied review measurements. Git is used only to compute a local no-index diff; no repository commit or upload occurs. The runner records only the graded module's diff, so the reviewer must also inspect the entire candidate folder for out-of-scope files.

The grader does not authenticate a vendor execution. `vendor_execution_verified` deliberately remains false. A human must check the transcript, actual settings, timestamps, patch and scope. Candidate output is arbitrary code; the runner is not tamper-proof or a secure evaluation service. Its parent status file remains pending even after grading; no ranking is generated automatically.

## Interpret and publish

A passing synthetic task does not establish production readiness, multi-file refactor quality, UI quality, security or team fit. A fast patch requiring a long review can be worse for your workflow than a slower patch you can readily explain. Compare generation and review separately. Record subscription and usage charges only from dated receipts, with currency and billing basis; do not infer them from elapsed time.

For a broader study, repeat fresh trials, alternate editor order and publish all attempts. Declare the number of trials and time budget before starting. Missing runtime access is “not run,” never a zero score. Publish versions, model/mode, date, prompt, starting fingerprints, resulting source, checks, failures, transcript and review time together. Redact personal paths, credentials and private code before sharing any artifact. Do not attach raw client source to an enquiry.
