feat(edit): better hashline & benchmark prompts, re-ran codex
This commit is contained in:
@@ -1,81 +1,58 @@
|
||||
# Edit (Hash anchored)
|
||||
# Edit (Hash Anchored)
|
||||
|
||||
Line-addressed edits using hash-verified line references. Read file in hashline mode, then use the exact text before `|` as your anchor (for example, in `{{hashline 42 "const x = 1"}}|const x = 1`, anchor is `{{hashline 42 "const x = 1"}}`).
|
||||
Line-addressed edits using hash-verified line references. Read files in hashline mode, collect exact `LINE:HASH` references, and submit edits that change only the targeted token or expression.
|
||||
|
||||
<critical>
|
||||
- Copy `LINE:HASH` refs verbatim from read output — never fabricate or guess hashes
|
||||
- Anchors must be exactly `LINE:HASH` (for example `{{hashline 42 "const x = 1"}}`) — never `LINE:HASH|content`, never with trailing source text
|
||||
- `new_text` (set_line/replace_lines) or `text` (insert_after) contains plain replacement lines only — no `LINE:HASH` prefix, no diff `+` markers
|
||||
- On hash mismatch: use the updated `LINE:HASH` refs shown by `>>>` directly; only `read` again if you need additional lines/context
|
||||
- If you already edited a file in this turn, re-read that file before the next edit to it
|
||||
- For code-change requests, respond with tool calls, not prose
|
||||
- Edit only requested lines. Do not reformat unrelated code.
|
||||
- Direction-lock every mutation: replace the exact currently-present token/expression with the intended target token/expression; never reverse the change or "change something nearby".
|
||||
- `new_text` must differ from the current line content — sending identical content is rejected as a no-op
|
||||
- `set_line` with `new_text: ""` keeps the line but makes it blank. To actually delete lines, use `replace_lines` with `new_text: ""` over the target range.
|
||||
</critical>
|
||||
**CRITICAL: Copy `LINE:HASH` refs verbatim from read output. Use only the anchor prefix (e.g., `{{hashline 42 "const x = 1"}}`), never the trailing source text after `|`.**
|
||||
|
||||
<instruction>
|
||||
**Workflow:**
|
||||
1. Read target file (`read`)
|
||||
2. Collect the exact `LINE:HASH` refs you need
|
||||
3. Submit one `edit` call with all known operations for that file
|
||||
4. If another change on same file is needed later: re-read first, then edit
|
||||
5. Direction-lock each operation before submitting (`exact source token/expression on target line` → `intended replacement`) and keep the mutation to one logical locus. Do not output prose; submit only the tool call.
|
||||
6. When adding a field/argument/import near existing lines, prefer `insert_after` over replacing a neighboring line to avoid accidental deletion
|
||||
**Atomicity:** All edits in one call are validated against the file as last read — line numbers and hashes refer to the original state, not after earlier edits in the same array. The applicator sorts and applies bottom-up automatically.
|
||||
**Edit variants:**
|
||||
- `{ set_line: { anchor: "LINE:HASH", new_text: "..." } }`
|
||||
- `{ replace_lines: { start_anchor: "LINE:HASH", end_anchor: "LINE:HASH", new_text: "..." } }`
|
||||
- `{ insert_after: { anchor: "LINE:HASH", text: "..." } }`
|
||||
- `{ replace: { old_text: "...", new_text: "...", all?: boolean } }` — substr-style fuzzy replace (no LINE:HASH; use when line refs unavailable)
|
||||
<workflow>
|
||||
1. Read the target file (`read`) to obtain `LINE:HASH` references
|
||||
2. Collect the exact `LINE:HASH` refs for lines you will change
|
||||
3. Direction-lock each mutation: identify the exact current token/expression → the intended replacement
|
||||
4. Submit one `edit` call containing all operations for that file
|
||||
5. If another edit is needed on the same file: re-read first, then edit (hashes change after every edit)
|
||||
6. Respond with tool calls only — no prose
|
||||
</workflow>
|
||||
|
||||
`new_text: ""` on `replace_lines` deletes the selected range. On `set_line`, it leaves an empty line at that anchor.
|
||||
</instruction>
|
||||
<operations>
|
||||
Four edit variants are available:
|
||||
|
||||
<caution>
|
||||
**Preserve original formatting.** When writing `new_text`/`text`, copy each line's exact whitespace, braces, and style from the read output — then change *only* the targeted token/expression. Do not:
|
||||
- Restyle braces: `import { foo }` → `import {foo}`
|
||||
- Reflow arguments onto multiple lines or collapse them onto one line
|
||||
- Change indentation style, trailing commas, or semicolons on lines you replace
|
||||
- Do NOT use `replace_lines` over a wide span when multiple `set_line` ops would work — wide ranges tempt reformatting everything in between
|
||||
- **`set_line`**: Replace a single line
|
||||
`{ set_line: { anchor: "LINE:HASH", new_text: "..." } }`
|
||||
`new_text: ""` keeps the line but makes it blank.
|
||||
|
||||
**Common failure patterns to avoid:**
|
||||
- Replacing the wrong adjacent line when you meant to insert a new one
|
||||
- Copying anchors with extra text (`{{hashline 42 "const x = 1"}}|const x = 1`) instead of just `{{hashline 42 "const x = 1"}}`
|
||||
- Using wide `replace_lines` for a tiny change and unintentionally rewriting unrelated code
|
||||
If a change spans multiple non-adjacent lines, use separate `set_line` operations for each — not a single `replace_lines` that includes unchanged lines in `new_text`.
|
||||
- Each edit operation must target one logical change site with minimal scope. If a fix requires two locations, use two operations; never span unrelated lines in one `replace_lines`.
|
||||
- Self-check before submitting: if your edit touches lines unrelated to the stated fix, split or narrow it.
|
||||
- Do NOT reformat lines you are replacing — preserve exact whitespace, braces (`{ foo }` not `{foo}`), arrow style, and line breaks. Change ONLY the targeted token/expression. Reformatting causes hash verification failure even when the logic is correct.
|
||||
- For swaps (exchanging content between two locations), use two `set_line` operations in one call — the applicator handles ordering. Do not try to account for line number shifts between operations.
|
||||
</caution>
|
||||
<instruction>
|
||||
**Recovery:**
|
||||
- Hash mismatch (`>>>` error): copy the updated `LINE:HASH` refs from the error verbatim and retry with the same intended mutation. Do NOT re-read unless you need lines not shown in the error.
|
||||
- If hash mismatch repeats after applying updated refs, stop blind retries and re-read the relevant region before retrying.
|
||||
- After a successful edit, always re-read the file before making another edit to the same file (hashes have changed).
|
||||
- No-op error ("identical content"): your replacement text matches what the file already contains. STOP and re-read the file — you are likely targeting the wrong line or your replacement is not actually different. Do NOT retry with the same content. After 2 consecutive no-op errors on the same line, re-read the entire function/block to understand the current file state.
|
||||
</instruction>
|
||||
- **`replace_lines`**: Replace a contiguous range (use for deletions with `new_text: ""`)
|
||||
`{ replace_lines: { start_anchor: "LINE:HASH", end_anchor: "LINE:HASH", new_text: "..." } }`
|
||||
|
||||
<instruction>
|
||||
**Preflight schema and validation (required):**
|
||||
- Payload shape is `{"path": string, "edits": [operation, ...]}` with a non-empty `edits` array.
|
||||
- Each operation contains exactly one variant key: `set_line`, `replace_lines`, `insert_after`, or `replace`.
|
||||
- Required fields by variant:
|
||||
- `set_line`: `anchor`, `new_text`
|
||||
- `replace_lines`: `start_anchor`, `end_anchor`, `new_text`
|
||||
- `insert_after`: `anchor`, `text` (non-empty)
|
||||
- `replace`: `old_text`, `new_text` (fuzzy match; `all: true` for replace-all)
|
||||
- Each `anchor`/`start_anchor`/`end_anchor` ref must be copied exactly from the `LINE:HASH` prefix before `|` in read output (no spaces, no trailing source text).
|
||||
- `new_text`/`text` preserves original formatting and changes only the direction-locked target locus.
|
||||
</instruction>
|
||||
- **`insert_after`**: Add new content after an anchor line
|
||||
`{ insert_after: { anchor: "LINE:HASH", text: "..." } }`
|
||||
|
||||
<input>
|
||||
- `path`: File path
|
||||
- `edits`: Array of edit operations (one of the variants above)
|
||||
</input>
|
||||
- **`replace`**: Substring-style fuzzy match (when line refs are unavailable)
|
||||
`{ replace: { old_text: "...", new_text: "...", all?: boolean } }`
|
||||
|
||||
**Atomicity:** All edits in one call validate against the file as last read. Line numbers and hashes refer to the original state, not post-edit state. The applicator sorts and applies bottom-up automatically.
|
||||
</operations>
|
||||
|
||||
<rules>
|
||||
1. **Scope each operation minimally.** One logical change site per operation. Use separate `set_line` ops for non-adjacent lines instead of a wide `replace_lines` that spans unchanged code.
|
||||
2. **Preserve original formatting exactly.** Copy each line's whitespace, braces, semicolons, trailing commas, and style — then change only the targeted token/expression. Keep `import { foo }` as-is; keep indentation and line breaks as-is.
|
||||
3. **Use `insert_after` for additions.** When adding a field, argument, or import near existing lines, prefer `insert_after` over replacing a neighboring line.
|
||||
4. **Ensure `new_text` differs from current content.** Identical content is rejected as a no-op.
|
||||
5. **Edit only requested lines.** Leave unrelated code untouched.
|
||||
6. **Lock mutation direction.** Replace the exact currently-present token with the intended target. For swaps between two locations, use two `set_line` ops in one call.
|
||||
</rules>
|
||||
|
||||
<recovery>
|
||||
**Hash mismatch (`>>>` error):**
|
||||
→ Copy the updated `LINE:HASH` refs from the error output verbatim and retry with the same intended mutation.
|
||||
→ Re-read only if you need lines not shown in the error.
|
||||
→ If mismatch repeats after applying updated refs, stop and re-read the relevant region.
|
||||
|
||||
**No-op error ("identical content"):**
|
||||
→ Stop. Re-read the file — you are targeting the wrong line or your replacement is not different.
|
||||
→ After 2 consecutive no-op errors on the same line, re-read the entire function/block.
|
||||
</recovery>
|
||||
|
||||
<examples>
|
||||
<example name="replace single line">
|
||||
set_line: { anchor: "{{hashline 2 " x"}}", new_text: " x = 99" }
|
||||
</example>
|
||||
@@ -93,9 +70,24 @@ insert_after: { anchor: "{{hashline 3 "anchor line content"}}", text: " # new c
|
||||
</example>
|
||||
|
||||
<example name="multiple edits (bottom-up safe)">
|
||||
edits: [{ set_line: { anchor: "{{hashline 10 "old line 10"}}", new_text: " return False" } }, { set_line: { anchor: "{{hashline 3 "old line 3"}}", new_text: " x = 42" } }]
|
||||
set_line: { anchor: "{{hashline 10 "old line 10"}}", new_text: " return False" }
|
||||
set_line: { anchor: "{{hashline 3 "old line 3"}}", new_text: " x = 42" }
|
||||
</example>
|
||||
|
||||
<example name="content replace (substr-style, no hashes)">
|
||||
replace: { old_text: "x = 42", new_text: "x = 99" }
|
||||
</example>
|
||||
</example>
|
||||
</examples>
|
||||
|
||||
<validation>
|
||||
Before submitting, verify:
|
||||
- [ ] Payload shape: `{"path": string, "edits": [operation, ...]}` with non-empty `edits` array
|
||||
- [ ] Each operation has exactly one variant key: `set_line` | `replace_lines` | `insert_after` | `replace`
|
||||
- [ ] Each anchor is copied exactly from the `LINE:HASH` prefix (no spaces, no trailing source text)
|
||||
- [ ] `new_text`/`text` contains plain replacement lines only — no `LINE:HASH` prefixes, no diff `+` markers
|
||||
- [ ] Each replacement differs from the current line content
|
||||
- [ ] Each operation targets one logical change site with minimal scope
|
||||
- [ ] Formatting of replaced lines matches the original exactly, except for the targeted change
|
||||
</validation>
|
||||
|
||||
**REMINDER: Copy `LINE:HASH` refs verbatim. Anchors are `LINE:HASH` only — never `LINE:HASH|content`. Preserve exact formatting. Change only the targeted token.**
|
||||
|
||||
@@ -0,0 +1,474 @@
|
||||
# Edit Benchmark Report
|
||||
|
||||
## Configuration
|
||||
|
||||
| Setting | Value |
|
||||
|---------|-------|
|
||||
| Date | 2026-02-15T14:28:30.625Z |
|
||||
| Model | openai-codex/openai-codex/gpt-5.3-codex |
|
||||
| Thinking Level | default |
|
||||
| Runs per task | 1 |
|
||||
| Edit Variant | hashline |
|
||||
| Edit Fuzzy | auto |
|
||||
| Edit Fuzzy Threshold | auto |
|
||||
| Guided Mode | no |
|
||||
| Max Attempts | 1 |
|
||||
| No-op Retry Limit | 2 |
|
||||
| Mutation Scope Window | 20 |
|
||||
| Require Edit Tool | no |
|
||||
| Require Read Tool | no |
|
||||
| No-Edit Baseline | no |
|
||||
|
||||
## Summary
|
||||
|
||||
| Metric | Value |
|
||||
|--------|-------|
|
||||
| Total Tasks | 60 |
|
||||
| Total Runs | 60 |
|
||||
| Successful Runs | 52 |
|
||||
| **Task Success Rate** | **86.7% (52/60)** |
|
||||
| Verified Rate | 86.7% (52/60) |
|
||||
| Edit Tool Usage Rate | 100.0% (60/60) |
|
||||
| **Edit Success Rate** | **100.0%** |
|
||||
| Timeout Runs | 0 |
|
||||
| Mutation Intent Match Rate | 86.7% |
|
||||
| Patch Failure Rate | 0.0% (0/63) |
|
||||
| Tasks All Passing | 52 |
|
||||
| Tasks Flaky/Failing | 8 |
|
||||
|
||||
### Tool Calls
|
||||
|
||||
| Tool | Total | Avg/Run |
|
||||
|------|-------|---------|
|
||||
| Read | 173 | 2.9 |
|
||||
| Edit | 63 | 1.1 |
|
||||
| Write | 0 | 0.0 |
|
||||
| **Tool Input Chars** | 17,767 | 296 |
|
||||
|
||||
### Tokens & Time
|
||||
|
||||
| Metric | Total | Avg/Run |
|
||||
|--------|-------|---------|
|
||||
| Input Tokens | 641,452 | 10,691 |
|
||||
| Output Tokens | 79,450 | 1,324 |
|
||||
| Total Tokens | 2,557,190 | 42,620 |
|
||||
| Duration | 2204.3s | 36.7s |
|
||||
| **Avg Indent Score** | — | **2.28** |
|
||||
|
||||
### Hashline Edit Subtypes
|
||||
|
||||
| Operation | Count | % |
|
||||
|-----------|-------|---|
|
||||
| set_line | 63 | 87.5% |
|
||||
| replace_lines | 2 | 2.8% |
|
||||
| insert_after | 7 | 9.7% |
|
||||
| replace | 0 | 0.0% |
|
||||
| **Total** | **72** | 100% |
|
||||
|
||||
## Task Results
|
||||
|
||||
| Task | File | Success | Edit Hit | R/E/W | Tokens (In/Out) | Time | Indent |
|
||||
|------|------|---------|----------|-------|-----------------|------|--------|
|
||||
| Access Remove Optional Chain 001 | registerDevToolsEventLogger.js | 1/1 ✅ | 100.0% | 2/1/0 | 7,780/530 | 17.8s | 1.00 |
|
||||
| Access Remove Optional Chain 002 | TimelineContext.js | 1/1 ✅ | 100.0% | 3/1/0 | 10,213/412 | 19.4s | 1.29 |
|
||||
| Access Remove Optional Chain 003 | astUtils.js | 1/1 ✅ | 100.0% | 3/1/0 | 11,022/707 | 13.5s | 4.85 |
|
||||
| Call Swap Call Args 001 | testHelpers.js | 1/1 ✅ | 100.0% | 2/1/0 | 6,251/272 | 7.0s | 1.33 |
|
||||
| Call Swap Call Args 002 | FlamegraphChartBuilder.js | 1/1 ✅ | 100.0% | 2/1/0 | 7,930/357 | 11.5s | 3.79 |
|
||||
| Call Swap Call Args 003 | SyntheticEvent.js | 1/1 ✅ | 100.0% | 3/1/0 | 9,483/360 | 21.1s | 3.76 |
|
||||
| Duplicate Duplicate Line Flip 001 | index.js | 1/1 ✅ | 100.0% | 2/1/0 | 6,436/220 | 5.5s | 0.00 |
|
||||
| Duplicate Duplicate Line Flip 002 | ActivityList.js | 1/1 ✅ | 100.0% | 3/1/0 | 13,925/270 | 7.9s | 3.61 |
|
||||
| Duplicate Duplicate Line Flip 003 | SyntheticEvent.js | 1/1 ✅ | 100.0% | 2/1/0 | 28,220/1,307 | 37.2s | 1.02 |
|
||||
| Identifier Identifier Multi Edit 001 | TabBar.js | 1/1 ✅ | 100.0% | 2/1/0 | 8,488/677 | 15.2s | 3.33 |
|
||||
| Identifier Identifier Multi Edit 002 | EventPluginRegistry.js | 1/1 ✅ | 100.0% | 2/1/0 | 6,250/1,239 | 34.0s | 3.94 |
|
||||
| Identifier Identifier Multi Edit 003 | ReactPerformanceTrackProperties.js | 1/1 ✅ | 100.0% | 5/2/0 | 12,171/1,560 | 44.2s | 9.95 |
|
||||
| Import Swap Named Imports 001 | CommitFlamegraphListItem.js | 1/1 ✅ | 100.0% | 2/1/0 | 7,337/469 | 10.9s | 2.86 |
|
||||
| Import Swap Named Imports 002 | ReactDOMTextarea.js | 1/1 ✅ | 100.0% | 4/1/0 | 4,850/772 | 23.8s | 2.41 |
|
||||
| Import Swap Named Imports 003 | StyleEditor.js | 1/1 ✅ | 100.0% | 7/1/0 | 9,482/4,980 | 119.5s | 1.31 |
|
||||
| Literal Flip Boolean 001 | testHelpers.js | 1/1 ✅ | 100.0% | 2/1/0 | 6,141/231 | 7.4s | 1.33 |
|
||||
| Literal Flip Boolean 002 | ReactNoopFlightServer.js | 1/1 ✅ | 100.0% | 4/1/0 | 4,374/818 | 28.3s | 1.11 |
|
||||
| Literal Flip Boolean 003 | ReactFlightDOMClientEdge.js | 1/1 ✅ | 100.0% | 6/1/0 | 21,036/552 | 16.5s | 3.58 |
|
||||
| Literal Off By One 001 | githubAPI.js | 1/1 ✅ | 100.0% | 2/1/0 | 12,065/239 | 6.1s | 0.67 |
|
||||
| Literal Off By One 002 | code-path.js | 1/1 ✅ | 100.0% | 3/1/0 | 12,931/3,506 | 64.0s | 3.50 |
|
||||
| Literal Off By One 003 | InspectedElement.js | 1/1 ✅ | 100.0% | 2/1/0 | 14,587/341 | 9.4s | 3.60 |
|
||||
| Operator Remove Negation 001 | ReactDOMClient.js | 0/1 ❌ | 100.0% | 5/2/0 | 9,075/3,715 | 69.7s | 1.08 |
|
||||
| Operator Remove Negation 002 | NativeEventsView.js | 1/1 ✅ | 100.0% | 4/1/0 | 16,075/2,289 | 159.9s | 3.03 |
|
||||
| Operator Remove Negation 003 | ReactFlightUnbundledReferences.js | 0/1 ❌ | 100.0% | 1/1/0 | 1,435/7,319 | 147.8s | 2.00 |
|
||||
| Operator Swap Arithmetic 001 | fallbackEvalContext.js | 1/1 ✅ | 100.0% | 3/1/0 | 11,809/381 | 13.2s | 0.00 |
|
||||
| Operator Swap Arithmetic 002 | CSSShorthandProperty.js | 1/1 ✅ | 100.0% | 3/1/0 | 15,322/599 | 19.5s | 2.88 |
|
||||
| Operator Swap Arithmetic 003 | hooks.js | 0/1 ❌ | 100.0% | 4/1/0 | 10,988/4,588 | 117.4s | 2.25 |
|
||||
| Operator Swap Comparison 001 | index.js | 1/1 ✅ | 100.0% | 2/1/0 | 12,581/242 | 8.4s | 0.00 |
|
||||
| Operator Swap Comparison 002 | ReactFlightDOMServerBrowser.js | 1/1 ✅ | 100.0% | 3/1/0 | 13,739/388 | 11.1s | 1.57 |
|
||||
| Operator Swap Comparison 003 | ReactFlightDOMServerNode.js | 1/1 ✅ | 100.0% | 4/1/0 | 11,165/1,401 | 40.3s | 1.95 |
|
||||
| Operator Swap Equality 001 | readInputData.js | 1/1 ✅ | 100.0% | 2/1/0 | 11,539/236 | 9.3s | 0.00 |
|
||||
| Operator Swap Equality 002 | editor.js | 1/1 ✅ | 100.0% | 2/1/0 | 15,817/300 | 11.3s | 0.00 |
|
||||
| Operator Swap Equality 003 | hooks.js | 1/1 ✅ | 100.0% | 2/1/0 | 5,973/434 | 16.1s | 2.25 |
|
||||
| Operator Swap Increment Decrement 001 | ReactFlightDOMClientNode.js | 1/1 ✅ | 100.0% | 3/1/0 | 6,573/287 | 9.9s | 1.52 |
|
||||
| Operator Swap Increment Decrement 002 | ReactFlightDOMClientNode.js | 1/1 ✅ | 100.0% | 3/1/0 | 7,363/310 | 12.7s | 1.92 |
|
||||
| Operator Swap Increment Decrement 003 | loadSourceAndMetadata.js | 1/1 ✅ | 100.0% | 3/1/0 | 13,663/275 | 7.6s | 3.72 |
|
||||
| Operator Swap Logical 001 | profiling.js | 1/1 ✅ | 100.0% | 2/1/0 | 6,308/283 | 6.8s | 0.00 |
|
||||
| Operator Swap Logical 002 | SourceMapMetadataConsumer.js | 1/1 ✅ | 100.0% | 2/1/0 | 9,169/901 | 25.0s | 3.14 |
|
||||
| Operator Swap Logical 003 | DevToolsFiberComponentStack.js | 1/1 ✅ | 100.0% | 3/1/0 | 5,357/443 | 12.6s | 4.13 |
|
||||
| Operator Swap Nullish 001 | getBatchRange.js | 1/1 ✅ | 100.0% | 2/1/0 | 3,106/355 | 17.5s | 1.33 |
|
||||
| Operator Swap Nullish 002 | EnterLeaveEventPlugin.js | 1/1 ✅ | 100.0% | 2/1/0 | 12,622/914 | 23.5s | 1.56 |
|
||||
| Operator Swap Nullish 003 | backend.js | 0/1 ❌ | 100.0% | 2/1/0 | 15,551/1,107 | 21.2s | 3.15 |
|
||||
| Regex Swap Regex Quantifier 001 | githubAPI.js | 1/1 ✅ | 100.0% | 2/1/0 | 8,484/265 | 7.4s | 0.67 |
|
||||
| Regex Swap Regex Quantifier 002 | ReactFlightStackConfigV8.js | 1/1 ✅ | 100.0% | 3/1/0 | 14,799/4,207 | 108.2s | 3.06 |
|
||||
| Regex Swap Regex Quantifier 003 | utils.js | 1/1 ✅ | 100.0% | 6/1/0 | 30,650/894 | 22.7s | 2.00 |
|
||||
| Structural Delete Statement 001 | UnsupportedVersionDialog.js | 1/1 ✅ | 100.0% | 3/1/0 | 18,109/350 | 9.6s | 6.22 |
|
||||
| Structural Delete Statement 002 | getComponentNameFromFiber.js | 1/1 ✅ | 100.0% | 3/1/0 | 9,919/855 | 26.2s | 0.62 |
|
||||
| Structural Delete Statement 003 | simulateBrowserEventDispatch.js | 1/1 ✅ | 100.0% | 3/1/0 | 10,010/467 | 11.1s | 4.46 |
|
||||
| Structural Remove Early Return 001 | InspectedElementStateTree.js | 1/1 ✅ | 100.0% | 4/1/0 | 8,125/746 | 18.0s | 0.36 |
|
||||
| Structural Remove Early Return 002 | useCommitFilteringAndNavigation.js | 1/1 ✅ | 100.0% | 5/1/0 | 10,957/1,407 | 39.5s | 3.73 |
|
||||
| Structural Remove Early Return 003 | ReactFiberAsyncAction.js | 0/1 ❌ | 100.0% | 3/1/0 | 5,497/1,565 | 26.9s | 1.46 |
|
||||
| Structural Swap Adjacent Lines 001 | ReactServerConsoleConfigPlain.js | 1/1 ✅ | 100.0% | 2/1/0 | 11,464/257 | 7.8s | 1.00 |
|
||||
| Structural Swap Adjacent Lines 002 | ReactNoopFlightServer.js | 1/1 ✅ | 100.0% | 3/1/0 | 4,051/1,710 | 49.1s | 1.11 |
|
||||
| Structural Swap Adjacent Lines 003 | backend.js | 0/1 ❌ | 100.0% | 2/2/0 | 21,332/12,770 | 309.8s | 3.15 |
|
||||
| Structural Swap If Else 001 | importFile.js | 0/1 ❌ | 100.0% | 3/1/0 | 6,378/384 | 11.7s | 0.00 |
|
||||
| Structural Swap If Else 002 | ReactNativeFiberInspector.js | 0/1 ❌ | 100.0% | 2/1/0 | 13,839/1,185 | 23.7s | 3.18 |
|
||||
| Structural Swap If Else 003 | ReactDOMFizzStaticNode.js | 1/1 ✅ | 100.0% | 3/1/0 | 2,942/4,976 | 223.5s | 1.88 |
|
||||
| Unicode Unicode Hyphen 001 | Rectangle.js | 1/1 ✅ | 100.0% | 2/1/0 | 8,422/236 | 6.4s | 3.00 |
|
||||
| Unicode Unicode Hyphen 002 | UnsupportedBridgeProtocolDialog.js | 1/1 ✅ | 100.0% | 2/1/0 | 12,359/258 | 7.1s | 3.83 |
|
||||
| Unicode Unicode Hyphen 003 | ReactTypes.js | 1/1 ✅ | 100.0% | 2/1/0 | 7,913/332 | 14.3s | 1.24 |
|
||||
|
||||
## Category Summary
|
||||
|
||||
| Category | Runs | Verified | Edit Used | Success | Min/Avg/Max Difficulty |
|
||||
|----------|------|----------|-----------|---------|------------------------|
|
||||
| access | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) | 7 / 8.7 / 10 |
|
||||
| call | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) | 6 / 7.7 / 10 |
|
||||
| duplicate | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) | 7 / 9.7 / 12 |
|
||||
| identifier | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) | 6 / 9.3 / 14 |
|
||||
| import | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) | 2 / 4.7 / 6 |
|
||||
| literal | 6 | 100.0% (6/6) | 100.0% (6/6) | 100.0% (6/6) | 4 / 6.2 / 9 |
|
||||
| operator | 21 | 81.0% (17/21) | 100.0% (21/21) | 81.0% (17/21) | 1 / 6.5 / 13 |
|
||||
| regex | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) | 6 / 7.3 / 8 |
|
||||
| structural | 12 | 66.7% (8/12) | 100.0% (12/12) | 66.7% (8/12) | 4 / 7.6 / 15 |
|
||||
| unicode | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) | 1 / 3.0 / 6 |
|
||||
|
||||
## Mutation Summary
|
||||
|
||||
| Mutation | Category | Runs | Verified | Edit Used | Success |
|
||||
|----------|----------|------|----------|-----------|---------|
|
||||
| delete-statement | structural | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| duplicate-line-flip | duplicate | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| flip-boolean | literal | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| identifier-multi-edit | identifier | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| off-by-one | literal | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| remove-early-return | structural | 3 | 66.7% (2/3) | 100.0% (3/3) | 66.7% (2/3) |
|
||||
| remove-negation | operator | 3 | 33.3% (1/3) | 100.0% (3/3) | 33.3% (1/3) |
|
||||
| remove-optional-chain | access | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| swap-adjacent-lines | structural | 3 | 66.7% (2/3) | 100.0% (3/3) | 66.7% (2/3) |
|
||||
| swap-arithmetic | operator | 3 | 66.7% (2/3) | 100.0% (3/3) | 66.7% (2/3) |
|
||||
| swap-call-args | call | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| swap-comparison | operator | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| swap-equality | operator | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| swap-if-else | structural | 3 | 33.3% (1/3) | 100.0% (3/3) | 33.3% (1/3) |
|
||||
| swap-increment-decrement | operator | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| swap-logical | operator | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| swap-named-imports | import | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| swap-nullish | operator | 3 | 66.7% (2/3) | 100.0% (3/3) | 66.7% (2/3) |
|
||||
| swap-regex-quantifier | regex | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| unicode-hyphen | unicode | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
|
||||
## Difficulty Summary
|
||||
|
||||
| Difficulty Score | Runs | Verified | Edit Used | Success |
|
||||
|------------------|------|----------|-----------|---------|
|
||||
| 0-2 | 6 | 83.3% (5/6) | 100.0% (6/6) | 83.3% (5/6) |
|
||||
| 3-5 | 12 | 91.7% (11/12) | 100.0% (12/12) | 91.7% (11/12) |
|
||||
| 6-8 | 24 | 91.7% (22/24) | 100.0% (24/24) | 91.7% (22/24) |
|
||||
| 9+ | 18 | 77.8% (14/18) | 100.0% (18/18) | 77.8% (14/18) |
|
||||
|
||||
## Failed Tasks (0% passing)
|
||||
|
||||
### Operator Remove Negation 001 (ReactDOMClient.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for ReactDOMClient.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
Applied the line-anchored fix in `ReactDOMClient.js` at line 57 by removing the stray logical negation, then re-read the region to verify only the intended line is changed:
|
||||
|
||||
```js
|
||||
if (foundDevTools && canUseDOM && window.top === window.self) {
|
||||
```
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -49 @@
|
||||
const foundDevTools = injectIntoDevTools();
|
||||
|
||||
if (__DEV__) {
|
||||
- if (!foundDevTools && canUseDOM && window.top === window.self) {
|
||||
+ if (foundDevTools && canUseDOM && window.top === window.self) {
|
||||
// If we're in Chrome or Firefox, provide a download link if not installed.
|
||||
if (
|
||||
(navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1) ||
|
||||
```
|
||||
|
||||
### Operator Remove Negation 003 (ReactFlightUnbundledReferences.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for ReactFlightUnbundledReferences.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
Fixed `ReactFlightUnbundledReferences.js` with a single-token change to remove the accidental negation in the null check:
|
||||
|
||||
- Changed:
|
||||
- `if (thisBind != null) {`
|
||||
- To:
|
||||
- `if (thisBind == null) {`
|
||||
|
||||
I re-read the edited region to confirm only that intended line was modified.
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -64 @@
|
||||
if (this.$$typeof === SERVER_REFERENCE_TAG) {
|
||||
if (__DEV__) {
|
||||
const thisBind = arguments[0];
|
||||
- if (thisBind != null) {
|
||||
+ if (thisBind == null) {
|
||||
console.error(
|
||||
'Cannot bind "this" of a Server Action. Pass null or undefined as the first argument to .bind().',
|
||||
);
|
||||
@@ -247 @@
|
||||
// Use a cached value
|
||||
return target.then;
|
||||
}
|
||||
- if (!target.$$async) {
|
||||
+ if (target.$$async) {
|
||||
// If this module is expected to return a Promise (such as an AsyncModule) then
|
||||
// we should resolve that with a client reference that unwraps the Promise on
|
||||
// the client.
|
||||
```
|
||||
|
||||
### Operator Swap Arithmetic 003 (hooks.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for hooks.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
Fixed the overflow check in `useIsOverflowing` by correcting the swapped operator:
|
||||
|
||||
- `container.clientWidth <= totalChildWidth`
|
||||
- → `container.clientWidth < totalChildWidth`
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -2 @@
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
- * LICENSE file in the root directory of this source tree.
|
||||
+ / LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow
|
||||
*/
|
||||
@@ -118 @@
|
||||
|
||||
const container = ((containerRef.current: any): HTMLDivElement);
|
||||
|
||||
- const handleResize = () => setIsOverflowing(container.clientWidth <= totalChildWidth);
|
||||
+ const handleResize = () => setIsOverflowing(container.clientWidth < totalChildWidth);
|
||||
|
||||
handleResize();
|
||||
|
||||
```
|
||||
|
||||
### Operator Swap Nullish 003 (backend.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for backend.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
Fixed `backend.js` by changing the swapped operator on the resolver fallback:
|
||||
|
||||
- `resolveRNStyle || hook.resolveRNStyle`
|
||||
- → `resolveRNStyle ?? hook.resolveRNStyle`
|
||||
|
||||
Confirmed by re-reading the changed region; only that intended line was modified.
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -195 @@
|
||||
// $FlowFixMe[incompatible-call] found when upgrading Flow
|
||||
bridge,
|
||||
agent,
|
||||
- ((resolveRNStyle || hook.resolveRNStyle: any): ResolveNativeStyle),
|
||||
+ ((resolveRNStyle ?? hook.resolveRNStyle: any): ResolveNativeStyle),
|
||||
nativeStyleEditorValidAttributes || hook.nativeStyleEditorValidAttributes || null,
|
||||
);
|
||||
} else {
|
||||
@@ -378 @@
|
||||
|
||||
const unsubscribeBackend = initBackend(hook, agent, window, isReloadAndProfileSupported);
|
||||
|
||||
- const nativeStyleResolver: ResolveNativeStyle | void = resolveRNStyle || hook.resolveRNStyle;
|
||||
+ const nativeStyleResolver: ResolveNativeStyle | void = resolveRNStyle ?? hook.resolveRNStyle;
|
||||
|
||||
if (nativeStyleResolver != null) {
|
||||
const validAttributes =
|
||||
```
|
||||
|
||||
### Structural Remove Early Return 003 (ReactFiberAsyncAction.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for ReactFiberAsyncAction.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
Applied a minimal fix in `ReactFiberAsyncAction.js` by restoring the missing guard clause in `releaseIsomorphicIndicator`:
|
||||
|
||||
```js
|
||||
if (pendingEntangledRoots === 0) {
|
||||
return;
|
||||
}
|
||||
```
|
||||
|
||||
I re-read the changed region to confirm only this targeted mutation was made.
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -176 @@
|
||||
export function registerDefaultIndicator(
|
||||
onDefaultTransitionIndicator: () => void | (() => void),
|
||||
): void {
|
||||
- if (!enableDefaultTransitionIndicator) {
|
||||
- return;
|
||||
- }
|
||||
if (isomorphicDefaultTransitionIndicator === undefined) {
|
||||
isomorphicDefaultTransitionIndicator = onDefaultTransitionIndicator;
|
||||
} else if (isomorphicDefaultTransitionIndicator !== onDefaultTransitionIndicator) {
|
||||
@@ -217 @@
|
||||
}
|
||||
|
||||
function releaseIsomorphicIndicator() {
|
||||
+ if (pendingEntangledRoots === 0) {
|
||||
+ return;
|
||||
+ }
|
||||
if (--pendingEntangledRoots === 0) {
|
||||
stopIsomorphicDefaultIndicator();
|
||||
}
|
||||
```
|
||||
|
||||
### Structural Swap Adjacent Lines 003 (backend.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for backend.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
Fixed `backend.js` by swapping the order of the two adjacent statements in `connectWithCustomMessagingProtocol()` so `nativeStyleResolver` is computed before calling `initBackend()`.
|
||||
|
||||
Verified by re-reading the edited region (lines ~406–415) to ensure only that ordering changed.
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -77 @@
|
||||
useHttps = false,
|
||||
port = 8097,
|
||||
websocket,
|
||||
- resolveRNStyle = (null: $FlowFixMe),
|
||||
retryConnectionDelay = 2000,
|
||||
retryConnectionDelay = 2000,
|
||||
+ resolveRNStyle = (null: $FlowFixMe),
|
||||
isAppActive = () => true,
|
||||
onSettingsUpdated,
|
||||
isReloadAndProfileSupported = getIsReloadAndProfileSupported(),
|
||||
@@ -376 @@
|
||||
hook.emit('shutdown');
|
||||
});
|
||||
|
||||
- const unsubscribeBackend = initBackend(hook, agent, window, isReloadAndProfileSupported);
|
||||
-
|
||||
const nativeStyleResolver: ResolveNativeStyle | void = resolveRNStyle || hook.resolveRNStyle;
|
||||
|
||||
const nativeStyleResolver: ResolveNativeStyle | void = resolveRNStyle || hook.resolveRNStyle;
|
||||
|
||||
+ const unsubscribeBackend = initBackend(hook, agent, window, isReloadAndProfileSupported);
|
||||
+
|
||||
if (nativeStyleResolver != null) {
|
||||
const validAttributes =
|
||||
nativeStyleEditorValidAttributes || hook.nativeStyleEditorValidAttributes || null;
|
||||
```
|
||||
|
||||
### Structural Swap If Else 001 (importFile.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for importFile.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
Done. I made the minimum change in `importFile.js` at the buggy branch:
|
||||
|
||||
- Negated the condition at line 34:
|
||||
- `if (error instanceof InvalidProfileError) {`
|
||||
- → `if (!(error instanceof InvalidProfileError)) {`
|
||||
|
||||
No other files or lines were modified.
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -31 @@
|
||||
processedData,
|
||||
};
|
||||
} catch (error) {
|
||||
- if (error instanceof InvalidProfileError) {
|
||||
+ if (!(error instanceof InvalidProfileError)) {
|
||||
return {
|
||||
return {
|
||||
- status: 'INVALID_PROFILE_ERROR',
|
||||
+ status: 'UNEXPECTED_ERROR',
|
||||
error,
|
||||
};
|
||||
} else {
|
||||
@@ -38 @@
|
||||
};
|
||||
} else {
|
||||
return {
|
||||
- status: 'UNEXPECTED_ERROR',
|
||||
+ status: 'INVALID_PROFILE_ERROR',
|
||||
error,
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
### Structural Swap If Else 002 (ReactNativeFiberInspector.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for ReactNativeFiberInspector.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
Implemented the single intended fix in `ReactNativeFiberInspector.js` within `getInspectorDataForViewTag`:
|
||||
|
||||
- Negated the condition from `if (__DEV__)` to `if (!__DEV__)`.
|
||||
- Left branch bodies and formatting unchanged.
|
||||
|
||||
Confirmed by re-reading the changed region; only that one line was modified.
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -145 @@
|
||||
}
|
||||
|
||||
function getInspectorDataForViewTag(viewTag: number): InspectorData {
|
||||
- if (__DEV__) {
|
||||
+ if (!__DEV__) {
|
||||
+ throw new Error('getInspectorDataForViewTag() is not available in production');
|
||||
+ } else {
|
||||
const closestInstance = getClosestInstanceFromNode(viewTag);
|
||||
return getInspectorDataForInstance(closestInstance);
|
||||
const closestInstance = getClosestInstanceFromNode(viewTag);
|
||||
return getInspectorDataForInstance(closestInstance);
|
||||
- } else {
|
||||
- throw new Error('getInspectorDataForViewTag() is not available in production');
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
@@ -0,0 +1,535 @@
|
||||
# Edit Benchmark Report
|
||||
|
||||
## Configuration
|
||||
|
||||
| Setting | Value |
|
||||
|---------|-------|
|
||||
| Date | 2026-02-15T14:29:12.847Z |
|
||||
| Model | openai-codex/openai-codex/gpt-5.3-codex |
|
||||
| Thinking Level | default |
|
||||
| Runs per task | 1 |
|
||||
| Edit Variant | replace |
|
||||
| Edit Fuzzy | auto |
|
||||
| Edit Fuzzy Threshold | auto |
|
||||
| Guided Mode | no |
|
||||
| Max Attempts | 1 |
|
||||
| No-op Retry Limit | 2 |
|
||||
| Mutation Scope Window | 20 |
|
||||
| Require Edit Tool | no |
|
||||
| Require Read Tool | no |
|
||||
| No-Edit Baseline | no |
|
||||
|
||||
## Summary
|
||||
|
||||
| Metric | Value |
|
||||
|--------|-------|
|
||||
| Total Tasks | 60 |
|
||||
| Total Runs | 60 |
|
||||
| Successful Runs | 50 |
|
||||
| **Task Success Rate** | **83.3% (50/60)** |
|
||||
| Verified Rate | 83.3% (50/60) |
|
||||
| Edit Tool Usage Rate | 98.3% (59/60) |
|
||||
| **Edit Success Rate** | **98.5%** |
|
||||
| Timeout Runs | 0 |
|
||||
| Mutation Intent Match Rate | 84.7% |
|
||||
| Tasks All Passing | 50 |
|
||||
| Tasks Flaky/Failing | 10 |
|
||||
|
||||
### Tool Calls
|
||||
|
||||
| Tool | Total | Avg/Run |
|
||||
|------|-------|---------|
|
||||
| Read | 151 | 2.5 |
|
||||
| Edit | 66 | 1.1 |
|
||||
| Write | 0 | 0.0 |
|
||||
| **Tool Input Chars** | 21,176 | 353 |
|
||||
|
||||
### Tokens & Time
|
||||
|
||||
| Metric | Total | Avg/Run |
|
||||
|--------|-------|---------|
|
||||
| Input Tokens | 591,968 | 9,866 |
|
||||
| Output Tokens | 64,205 | 1,070 |
|
||||
| Total Tokens | 1,940,013 | 32,334 |
|
||||
| Duration | 2063.0s | 34.4s |
|
||||
| **Avg Indent Score** | — | **2.28** |
|
||||
|
||||
## Task Results
|
||||
|
||||
| Task | File | Success | Edit Hit | R/E/W | Tokens (In/Out) | Time | Indent |
|
||||
|------|------|---------|----------|-------|-----------------|------|--------|
|
||||
| Access Remove Optional Chain 001 | registerDevToolsEventLogger.js | 1/1 ✅ | 100.0% | 2/1/0 | 3,237/978 | 17.1s | 1.00 |
|
||||
| Access Remove Optional Chain 002 | TimelineContext.js | 1/1 ✅ | 100.0% | 2/1/0 | 6,670/267 | 6.9s | 1.29 |
|
||||
| Access Remove Optional Chain 003 | astUtils.js | 1/1 ✅ | 100.0% | 3/1/0 | 17,219/1,365 | 28.5s | 4.85 |
|
||||
| Call Swap Call Args 001 | testHelpers.js | 1/1 ✅ | 100.0% | 2/1/0 | 3,994/280 | 6.6s | 1.33 |
|
||||
| Call Swap Call Args 002 | FlamegraphChartBuilder.js | 1/1 ✅ | 100.0% | 2/1/0 | 6,924/314 | 6.2s | 3.79 |
|
||||
| Call Swap Call Args 003 | SyntheticEvent.js | 1/1 ✅ | 100.0% | 3/1/0 | 5,805/328 | 15.6s | 3.76 |
|
||||
| Duplicate Duplicate Line Flip 001 | index.js | 1/1 ✅ | 100.0% | 2/1/0 | 5,495/240 | 6.2s | 0.00 |
|
||||
| Duplicate Duplicate Line Flip 002 | ActivityList.js | 1/1 ✅ | 100.0% | 2/1/0 | 12,968/458 | 22.2s | 3.61 |
|
||||
| Duplicate Duplicate Line Flip 003 | SyntheticEvent.js | 1/1 ✅ | 100.0% | 3/1/0 | 12,269/517 | 14.0s | 1.02 |
|
||||
| Identifier Identifier Multi Edit 001 | TabBar.js | 1/1 ✅ | 100.0% | 2/3/0 | 10,678/639 | 12.1s | 3.33 |
|
||||
| Identifier Identifier Multi Edit 002 | EventPluginRegistry.js | 1/1 ✅ | 100.0% | 2/3/0 | 8,866/993 | 18.1s | 3.94 |
|
||||
| Identifier Identifier Multi Edit 003 | ReactPerformanceTrackProperties.js | 1/1 ✅ | 100.0% | 4/3/0 | 20,203/697 | 13.4s | 9.95 |
|
||||
| Import Swap Named Imports 001 | CommitFlamegraphListItem.js | 1/1 ✅ | 100.0% | 2/1/0 | 16,007/319 | 10.7s | 2.86 |
|
||||
| Import Swap Named Imports 002 | ReactDOMTextarea.js | 1/1 ✅ | 100.0% | 2/1/0 | 7,198/698 | 37.0s | 2.41 |
|
||||
| Import Swap Named Imports 003 | StyleEditor.js | 1/1 ✅ | 100.0% | 4/1/0 | 15,537/2,891 | 84.4s | 1.31 |
|
||||
| Literal Flip Boolean 001 | testHelpers.js | 1/1 ✅ | 100.0% | 2/1/0 | 1,828/227 | 12.9s | 1.33 |
|
||||
| Literal Flip Boolean 002 | ReactNoopFlightServer.js | 1/1 ✅ | 100.0% | 4/1/0 | 12,213/440 | 12.0s | 1.11 |
|
||||
| Literal Flip Boolean 003 | ReactFlightDOMClientEdge.js | 1/1 ✅ | 100.0% | 4/1/0 | 5,318/775 | 16.2s | 3.58 |
|
||||
| Literal Off By One 001 | githubAPI.js | 1/1 ✅ | 100.0% | 2/1/0 | 10,086/284 | 6.6s | 0.67 |
|
||||
| Literal Off By One 002 | code-path.js | 1/1 ✅ | 100.0% | 3/1/0 | 19,771/1,927 | 39.5s | 3.50 |
|
||||
| Literal Off By One 003 | InspectedElement.js | 1/1 ✅ | 100.0% | 2/1/0 | 6,494/640 | 20.2s | 3.60 |
|
||||
| Operator Remove Negation 001 | ReactDOMClient.js | 1/1 ✅ | 100.0% | 5/1/0 | 20,753/3,558 | 63.8s | 1.08 |
|
||||
| Operator Remove Negation 002 | NativeEventsView.js | 1/1 ✅ | 100.0% | 3/1/0 | 11,739/3,523 | 62.2s | 3.03 |
|
||||
| Operator Remove Negation 003 | ReactFlightUnbundledReferences.js | 0/1 ❌ | 100.0% | 1/1/0 | 1,309/5,706 | 138.7s | 2.00 |
|
||||
| Operator Swap Arithmetic 001 | fallbackEvalContext.js | 1/1 ✅ | 100.0% | 2/1/0 | 7,397/473 | 25.0s | 0.00 |
|
||||
| Operator Swap Arithmetic 002 | CSSShorthandProperty.js | 1/1 ✅ | 100.0% | 3/1/0 | 6,983/1,279 | 28.0s | 2.88 |
|
||||
| Operator Swap Arithmetic 003 | hooks.js | 0/1 ❌ | 100.0% | 4/1/0 | 9,963/3,645 | 91.7s | 2.25 |
|
||||
| Operator Swap Comparison 001 | index.js | 1/1 ✅ | 100.0% | 2/1/0 | 6,838/237 | 8.1s | 0.00 |
|
||||
| Operator Swap Comparison 002 | ReactFlightDOMServerBrowser.js | 1/1 ✅ | 100.0% | 2/1/0 | 7,705/384 | 9.3s | 1.57 |
|
||||
| Operator Swap Comparison 003 | ReactFlightDOMServerNode.js | 1/1 ✅ | 100.0% | 3/1/0 | 13,448/395 | 10.2s | 1.95 |
|
||||
| Operator Swap Equality 001 | readInputData.js | 1/1 ✅ | 100.0% | 2/1/0 | 5,111/259 | 6.7s | 0.00 |
|
||||
| Operator Swap Equality 002 | editor.js | 1/1 ✅ | 100.0% | 2/1/0 | 8,309/252 | 5.9s | 0.00 |
|
||||
| Operator Swap Equality 003 | hooks.js | 1/1 ✅ | 100.0% | 4/1/0 | 13,857/656 | 21.7s | 2.25 |
|
||||
| Operator Swap Increment Decrement 001 | ReactFlightDOMClientNode.js | 1/1 ✅ | 100.0% | 2/1/0 | 4,722/254 | 6.1s | 1.52 |
|
||||
| Operator Swap Increment Decrement 002 | ReactFlightDOMClientNode.js | 1/1 ✅ | 100.0% | 2/1/0 | 5,392/374 | 15.0s | 1.92 |
|
||||
| Operator Swap Increment Decrement 003 | loadSourceAndMetadata.js | 1/1 ✅ | 100.0% | 2/1/0 | 7,842/237 | 6.2s | 3.72 |
|
||||
| Operator Swap Logical 001 | profiling.js | 1/1 ✅ | 100.0% | 2/1/0 | 5,302/438 | 17.0s | 0.00 |
|
||||
| Operator Swap Logical 002 | SourceMapMetadataConsumer.js | 1/1 ✅ | 100.0% | 5/1/0 | 4,557/1,284 | 35.7s | 3.14 |
|
||||
| Operator Swap Logical 003 | DevToolsFiberComponentStack.js | 1/1 ✅ | 100.0% | 3/1/0 | 11,705/628 | 16.0s | 4.13 |
|
||||
| Operator Swap Nullish 001 | getBatchRange.js | 1/1 ✅ | 100.0% | 2/1/0 | 5,345/273 | 14.4s | 1.33 |
|
||||
| Operator Swap Nullish 002 | EnterLeaveEventPlugin.js | 1/1 ✅ | 100.0% | 2/1/0 | 6,914/374 | 7.9s | 1.56 |
|
||||
| Operator Swap Nullish 003 | backend.js | 0/1 ❌ | 100.0% | 3/1/0 | 9,803/779 | 18.3s | 3.15 |
|
||||
| Regex Swap Regex Quantifier 001 | githubAPI.js | 1/1 ✅ | 100.0% | 2/1/0 | 5,315/336 | 8.0s | 0.67 |
|
||||
| Regex Swap Regex Quantifier 002 | ReactFlightStackConfigV8.js | 1/1 ✅ | 100.0% | 3/1/0 | 8,175/2,130 | 43.1s | 3.06 |
|
||||
| Regex Swap Regex Quantifier 003 | utils.js | 1/1 ✅ | 100.0% | 5/1/0 | 25,548/2,412 | 82.0s | 2.00 |
|
||||
| Structural Delete Statement 001 | UnsupportedVersionDialog.js | 1/1 ✅ | 100.0% | 2/1/0 | 15,055/393 | 8.2s | 6.22 |
|
||||
| Structural Delete Statement 002 | getComponentNameFromFiber.js | 1/1 ✅ | 50.0% | 2/2/0 | 7,673/627 | 16.2s | 0.62 |
|
||||
| Structural Delete Statement 003 | simulateBrowserEventDispatch.js | 1/1 ✅ | 100.0% | 6/1/0 | 14,877/596 | 17.0s | 4.46 |
|
||||
| Structural Remove Early Return 001 | InspectedElementStateTree.js | 0/1 ❌ | 100.0% | 2/1/0 | 5,896/1,098 | 21.6s | 0.36 |
|
||||
| Structural Remove Early Return 002 | useCommitFilteringAndNavigation.js | 1/1 ✅ | 100.0% | 2/1/0 | 13,734/545 | 10.9s | 3.73 |
|
||||
| Structural Remove Early Return 003 | ReactFiberAsyncAction.js | 0/1 ❌ | 100.0% | 2/1/0 | 18,177/2,413 | 61.1s | 1.46 |
|
||||
| Structural Swap Adjacent Lines 001 | ReactServerConsoleConfigPlain.js | 1/1 ✅ | 100.0% | 2/1/0 | 5,463/293 | 11.2s | 1.00 |
|
||||
| Structural Swap Adjacent Lines 002 | ReactNoopFlightServer.js | 0/1 ❌ | 100.0% | 2/1/0 | 6,233/332 | 8.9s | 1.11 |
|
||||
| Structural Swap Adjacent Lines 003 | backend.js | 0/1 ❌ | 100.0% | 2/1/0 | 18,201/6,398 | 149.2s | 3.10 |
|
||||
| Structural Swap If Else 001 | importFile.js | 0/1 ❌ | 100.0% | 2/1/0 | 5,388/2,274 | 59.8s | 0.00 |
|
||||
| Structural Swap If Else 002 | ReactNativeFiberInspector.js | 0/1 ❌ | 100.0% | 1/1/0 | 19,115/2,024 | 135.4s | 3.18 |
|
||||
| Structural Swap If Else 003 | ReactDOMFizzStaticNode.js | 0/1 ❌ | 100.0% | 0/0/0 | 535/917 | 376.2s | 0.00 |
|
||||
| Unicode Unicode Hyphen 001 | Rectangle.js | 1/1 ✅ | 100.0% | 2/1/0 | 9,970/225 | 8.1s | 3.00 |
|
||||
| Unicode Unicode Hyphen 002 | UnsupportedBridgeProtocolDialog.js | 1/1 ✅ | 100.0% | 2/1/0 | 14,170/319 | 13.9s | 3.83 |
|
||||
| Unicode Unicode Hyphen 003 | ReactTypes.js | 1/1 ✅ | 100.0% | 2/1/0 | 14,669/588 | 18.1s | 1.24 |
|
||||
|
||||
## Category Summary
|
||||
|
||||
| Category | Runs | Verified | Edit Used | Success | Min/Avg/Max Difficulty |
|
||||
|----------|------|----------|-----------|---------|------------------------|
|
||||
| access | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) | 7 / 8.7 / 10 |
|
||||
| call | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) | 6 / 7.7 / 10 |
|
||||
| duplicate | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) | 7 / 9.7 / 12 |
|
||||
| identifier | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) | 6 / 9.3 / 14 |
|
||||
| import | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) | 2 / 4.7 / 6 |
|
||||
| literal | 6 | 100.0% (6/6) | 100.0% (6/6) | 100.0% (6/6) | 4 / 6.2 / 9 |
|
||||
| operator | 21 | 85.7% (18/21) | 100.0% (21/21) | 85.7% (18/21) | 1 / 6.5 / 13 |
|
||||
| regex | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) | 6 / 7.3 / 8 |
|
||||
| structural | 12 | 41.7% (5/12) | 91.7% (11/12) | 41.7% (5/12) | 4 / 7.6 / 15 |
|
||||
| unicode | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) | 1 / 3.0 / 6 |
|
||||
|
||||
## Mutation Summary
|
||||
|
||||
| Mutation | Category | Runs | Verified | Edit Used | Success |
|
||||
|----------|----------|------|----------|-----------|---------|
|
||||
| delete-statement | structural | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| duplicate-line-flip | duplicate | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| flip-boolean | literal | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| identifier-multi-edit | identifier | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| off-by-one | literal | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| remove-early-return | structural | 3 | 33.3% (1/3) | 100.0% (3/3) | 33.3% (1/3) |
|
||||
| remove-negation | operator | 3 | 66.7% (2/3) | 100.0% (3/3) | 66.7% (2/3) |
|
||||
| remove-optional-chain | access | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| swap-adjacent-lines | structural | 3 | 33.3% (1/3) | 100.0% (3/3) | 33.3% (1/3) |
|
||||
| swap-arithmetic | operator | 3 | 66.7% (2/3) | 100.0% (3/3) | 66.7% (2/3) |
|
||||
| swap-call-args | call | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| swap-comparison | operator | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| swap-equality | operator | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| swap-if-else | structural | 3 | 0.0% (0/3) | 66.7% (2/3) | 0.0% (0/3) |
|
||||
| swap-increment-decrement | operator | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| swap-logical | operator | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| swap-named-imports | import | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| swap-nullish | operator | 3 | 66.7% (2/3) | 100.0% (3/3) | 66.7% (2/3) |
|
||||
| swap-regex-quantifier | regex | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| unicode-hyphen | unicode | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
|
||||
## Difficulty Summary
|
||||
|
||||
| Difficulty Score | Runs | Verified | Edit Used | Success |
|
||||
|------------------|------|----------|-----------|---------|
|
||||
| 0-2 | 6 | 100.0% (6/6) | 100.0% (6/6) | 100.0% (6/6) |
|
||||
| 3-5 | 12 | 83.3% (10/12) | 100.0% (12/12) | 83.3% (10/12) |
|
||||
| 6-8 | 24 | 87.5% (21/24) | 100.0% (24/24) | 87.5% (21/24) |
|
||||
| 9+ | 18 | 72.2% (13/18) | 94.4% (17/18) | 72.2% (13/18) |
|
||||
|
||||
## Edit Tool Errors
|
||||
|
||||
Failures where the edit tool returned an error or failed to apply the patch.
|
||||
|
||||
### Structural Delete Statement 002 (getComponentNameFromFiber.js)
|
||||
|
||||
#### Run 1
|
||||
|
||||
##### Attempt 1
|
||||
|
||||
- Path: getComponentNameFromFiber.js
|
||||
- Operation: —
|
||||
|
||||
**Tool error**
|
||||
|
||||
```
|
||||
Validation failed for tool "edit":
|
||||
- old_text: must have required property 'old_text'
|
||||
|
||||
Received arguments:
|
||||
{
|
||||
"path": "getComponentNameFromFiber.js",
|
||||
"old_text ": "): string {\n return (\n (outerType: any).displayName ||\n (functionName !== '' ? `${wrapperName}(${functionName})` : wrapperName)\n );\n}",
|
||||
"new_text": "): string {\n const functionName = innerType.displayName || innerType.name || '';\n return (\n (outerType: any).displayName ||\n (functionName !== '' ? `${wrapperName}(${functionName})` : wrapperName)\n );\n}"
|
||||
}
|
||||
```
|
||||
|
||||
**Patch args**
|
||||
|
||||
```diff
|
||||
{
|
||||
"path": "getComponentNameFromFiber.js",
|
||||
"old_text ": "): string {\n return (\n (outerType: any).displayName ||\n (functionName !== '' ? `${wrapperName}(${functionName})` : wrapperName)\n );\n}",
|
||||
"new_text": "): string {\n const functionName = innerType.displayName || innerType.name || '';\n return (\n (outerType: any).displayName ||\n (functionName !== '' ? `${wrapperName}(${functionName})` : wrapperName)\n );\n}"
|
||||
}
|
||||
```
|
||||
|
||||
## Failed Tasks (0% passing)
|
||||
|
||||
### Operator Remove Negation 003 (ReactFlightUnbundledReferences.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for ReactFlightUnbundledReferences.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
Fixed `ReactFlightUnbundledReferences.js` by removing the accidental negation in the cache check:
|
||||
|
||||
- Changed:
|
||||
- `if (!cachedReference) {`
|
||||
- To:
|
||||
- `if (cachedReference) {`
|
||||
|
||||
Re-read the changed region to confirm only that intended line was modified.
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -247 @@
|
||||
// Use a cached value
|
||||
return target.then;
|
||||
}
|
||||
- if (!target.$$async) {
|
||||
+ if (target.$$async) {
|
||||
// If this module is expected to return a Promise (such as an AsyncModule) then
|
||||
// we should resolve that with a client reference that unwraps the Promise on
|
||||
// the client.
|
||||
@@ -288 @@
|
||||
);
|
||||
}
|
||||
let cachedReference = target[name];
|
||||
- if (!cachedReference) {
|
||||
+ if (cachedReference) {
|
||||
const reference: ClientReference<any> = registerClientReferenceImpl(
|
||||
(function () {
|
||||
throw new Error(
|
||||
```
|
||||
|
||||
### Operator Swap Arithmetic 003 (hooks.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for hooks.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
Fixed the swapped operator in `hooks.js` by changing the overflow check to use a strict comparison:
|
||||
|
||||
- `container.clientWidth <= totalChildWidth`
|
||||
- → `container.clientWidth < totalChildWidth`
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -2 @@
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
- * LICENSE file in the root directory of this source tree.
|
||||
+ / LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow
|
||||
*/
|
||||
@@ -118 @@
|
||||
|
||||
const container = ((containerRef.current: any): HTMLDivElement);
|
||||
|
||||
- const handleResize = () => setIsOverflowing(container.clientWidth <= totalChildWidth);
|
||||
+ const handleResize = () => setIsOverflowing(container.clientWidth < totalChildWidth);
|
||||
|
||||
handleResize();
|
||||
|
||||
```
|
||||
|
||||
### Operator Swap Nullish 003 (backend.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for backend.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
Fixed `backend.js` by changing the swapped operator at the buggy line:
|
||||
|
||||
- `resolveRNStyle || hook.resolveRNStyle`
|
||||
- → `resolveRNStyle ?? hook.resolveRNStyle`
|
||||
|
||||
Confirmed via re-read that only this intended line was modified.
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -195 @@
|
||||
// $FlowFixMe[incompatible-call] found when upgrading Flow
|
||||
bridge,
|
||||
agent,
|
||||
- ((resolveRNStyle || hook.resolveRNStyle: any): ResolveNativeStyle),
|
||||
+ ((resolveRNStyle ?? hook.resolveRNStyle: any): ResolveNativeStyle),
|
||||
nativeStyleEditorValidAttributes || hook.nativeStyleEditorValidAttributes || null,
|
||||
);
|
||||
} else {
|
||||
@@ -378 @@
|
||||
|
||||
const unsubscribeBackend = initBackend(hook, agent, window, isReloadAndProfileSupported);
|
||||
|
||||
- const nativeStyleResolver: ResolveNativeStyle | void = resolveRNStyle || hook.resolveRNStyle;
|
||||
+ const nativeStyleResolver: ResolveNativeStyle | void = resolveRNStyle ?? hook.resolveRNStyle;
|
||||
|
||||
if (nativeStyleResolver != null) {
|
||||
const validAttributes =
|
||||
```
|
||||
|
||||
### Structural Remove Early Return 001 (InspectedElementStateTree.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for InspectedElementStateTree.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
Fixed `InspectedElementStateTree.js` by restoring the missing 3-line guard clause near line 39:
|
||||
|
||||
```js
|
||||
if (state == null) {
|
||||
return null;
|
||||
}
|
||||
```
|
||||
|
||||
I only modified this file and re-read the changed region to confirm the edit is isolated.
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -36 @@
|
||||
store,
|
||||
}: Props): React.Node {
|
||||
const { state, type } = inspectedElement;
|
||||
+
|
||||
if (state == null) {
|
||||
return null;
|
||||
}
|
||||
```
|
||||
|
||||
### Structural Remove Early Return 003 (ReactFiberAsyncAction.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for ReactFiberAsyncAction.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
Restored the missing guard clause in `ReactFiberAsyncAction.js` by adding an early return at the start of `pingEngtangledActionScope()` to avoid decrementing `currentEntangledPendingCount` when it’s already `0` (prevents underflow/negative counts if the ping fires after completion or more than once).
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -85 @@
|
||||
}
|
||||
|
||||
function pingEngtangledActionScope() {
|
||||
+ if (currentEntangledPendingCount === 0) {
|
||||
+ return;
|
||||
+ }
|
||||
if (--currentEntangledPendingCount === 0) {
|
||||
if (enableProfilerTimer && enableComponentPerformanceTrack) {
|
||||
if (!hasScheduledTransitionWork()) {
|
||||
@@ -176 @@
|
||||
export function registerDefaultIndicator(
|
||||
onDefaultTransitionIndicator: () => void | (() => void),
|
||||
): void {
|
||||
- if (!enableDefaultTransitionIndicator) {
|
||||
- return;
|
||||
- }
|
||||
if (isomorphicDefaultTransitionIndicator === undefined) {
|
||||
isomorphicDefaultTransitionIndicator = onDefaultTransitionIndicator;
|
||||
} else if (isomorphicDefaultTransitionIndicator !== onDefaultTransitionIndicator) {
|
||||
```
|
||||
|
||||
### Structural Swap Adjacent Lines 002 (ReactNoopFlightServer.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for ReactNoopFlightServer.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
Done. I swapped the one buggy adjacent pair in `ReactNoopFlightServer.js` and verified the region:
|
||||
|
||||
- `stringToChunk(...)` now returns the encoded content
|
||||
- `flushBuffered(...)` is back on the following line
|
||||
|
||||
No other files or lines were modified.
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -42 @@
|
||||
completeWriting(destination: Destination): void {},
|
||||
close(destination: Destination): void {},
|
||||
closeWithError(destination: Destination, error: mixed): void {},
|
||||
- flushBuffered(destination: Destination): void {},
|
||||
stringToChunk(content: string): Uint8Array {
|
||||
return textEncoder.encode(content);
|
||||
},
|
||||
stringToChunk(content: string): Uint8Array {
|
||||
return textEncoder.encode(content);
|
||||
},
|
||||
+ flushBuffered(destination: Destination): void {},
|
||||
stringToPrecomputedChunk(content: string): Uint8Array {
|
||||
return textEncoder.encode(content);
|
||||
},
|
||||
```
|
||||
|
||||
### Structural Swap Adjacent Lines 003 (backend.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for backend.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
Fixed the retry logic in `backend.js` by resetting `retryTimeoutID` to `null` *before* invoking `connectToDevTools(options)` inside the scheduled retry callback, so subsequent retries can be scheduled correctly.
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -77 @@
|
||||
useHttps = false,
|
||||
port = 8097,
|
||||
websocket,
|
||||
- resolveRNStyle = (null: $FlowFixMe),
|
||||
retryConnectionDelay = 2000,
|
||||
retryConnectionDelay = 2000,
|
||||
+ resolveRNStyle = (null: $FlowFixMe),
|
||||
isAppActive = () => true,
|
||||
onSettingsUpdated,
|
||||
isReloadAndProfileSupported = getIsReloadAndProfileSupported(),
|
||||
@@ -93 @@
|
||||
function scheduleRetry() {
|
||||
if (retryTimeoutID === null) {
|
||||
// Two seconds because RN had issues with quick retries.
|
||||
- retryTimeoutID = setTimeout(() => connectToDevTools(options), retryConnectionDelay);
|
||||
+ retryTimeoutID = setTimeout(() => {
|
||||
+ retryTimeoutID = null;
|
||||
+ connectToDevTools(options);
|
||||
+ }, retryConnectionDelay);
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
### Structural Swap If Else 001 (importFile.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for importFile.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
Fixed `importFile.js` by negating the `InvalidProfileError` check so the existing `if`/`else` bodies map to the correct statuses:
|
||||
|
||||
- `if (error instanceof InvalidProfileError)` → `if (!(error instanceof InvalidProfileError))` (around line 34)
|
||||
|
||||
Re-read confirmed only that single line was changed.
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -31 @@
|
||||
processedData,
|
||||
};
|
||||
} catch (error) {
|
||||
- if (error instanceof InvalidProfileError) {
|
||||
+ if (!(error instanceof InvalidProfileError)) {
|
||||
return {
|
||||
return {
|
||||
- status: 'INVALID_PROFILE_ERROR',
|
||||
+ status: 'UNEXPECTED_ERROR',
|
||||
error,
|
||||
};
|
||||
} else {
|
||||
@@ -38 @@
|
||||
};
|
||||
} else {
|
||||
return {
|
||||
- status: 'UNEXPECTED_ERROR',
|
||||
+ status: 'INVALID_PROFILE_ERROR',
|
||||
error,
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
### Structural Swap If Else 002 (ReactNativeFiberInspector.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for ReactNativeFiberInspector.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
In `ReactNativeFiberInspector.js`, inside `getInspectorDataForViewTag`, I negated the `__DEV__` condition:
|
||||
|
||||
- Changed `if (__DEV__) {` → `if (!__DEV__) {`
|
||||
|
||||
This restores the correct behavior (throw in production, run inspector lookup in dev) with a single-token edit and no other code movement.
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -145 @@
|
||||
}
|
||||
|
||||
function getInspectorDataForViewTag(viewTag: number): InspectorData {
|
||||
- if (__DEV__) {
|
||||
+ if (!__DEV__) {
|
||||
+ throw new Error('getInspectorDataForViewTag() is not available in production');
|
||||
+ } else {
|
||||
const closestInstance = getClosestInstanceFromNode(viewTag);
|
||||
return getInspectorDataForInstance(closestInstance);
|
||||
const closestInstance = getClosestInstanceFromNode(viewTag);
|
||||
return getInspectorDataForInstance(closestInstance);
|
||||
- } else {
|
||||
- throw new Error('getInspectorDataForViewTag() is not available in production');
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
### Structural Swap If Else 003 (ReactDOMFizzStaticNode.js) — 0/1
|
||||
|
||||
| Run | Status | Error | Tokens (in/out) | Time |
|
||||
|-----|--------|-------|-----------------|------|
|
||||
| 1 | ❌ | — | 535 / 917 | 376.2s |
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
Applied the minimal fix in `ReactDOMFizzStaticNode.js` by negating the swapped `if` condition:
|
||||
|
||||
- Changed `if (options && options.signal) {` to `if (!(options && options.signal)) {`
|
||||
|
||||
Re-read the edited region to confirm only that intended line was modified.
|
||||
```
|
||||
@@ -0,0 +1,812 @@
|
||||
# Edit Benchmark Report
|
||||
|
||||
## Configuration
|
||||
|
||||
| Setting | Value |
|
||||
|---------|-------|
|
||||
| Date | 2026-02-15T14:29:20.601Z |
|
||||
| Model | xai/xai/grok-4-1-fast |
|
||||
| Thinking Level | default |
|
||||
| Runs per task | 1 |
|
||||
| Edit Variant | hashline |
|
||||
| Edit Fuzzy | auto |
|
||||
| Edit Fuzzy Threshold | auto |
|
||||
| Guided Mode | no |
|
||||
| Max Attempts | 1 |
|
||||
| No-op Retry Limit | 2 |
|
||||
| Mutation Scope Window | 20 |
|
||||
| Require Edit Tool | no |
|
||||
| Require Read Tool | no |
|
||||
| No-Edit Baseline | no |
|
||||
|
||||
## Summary
|
||||
|
||||
| Metric | Value |
|
||||
|--------|-------|
|
||||
| Total Tasks | 60 |
|
||||
| Total Runs | 60 |
|
||||
| Successful Runs | 46 |
|
||||
| **Task Success Rate** | **76.7% (46/60)** |
|
||||
| Verified Rate | 76.7% (46/60) |
|
||||
| Edit Tool Usage Rate | 98.3% (59/60) |
|
||||
| **Edit Success Rate** | **96.9%** |
|
||||
| Timeout Runs | 0 |
|
||||
| Mutation Intent Match Rate | 78.3% |
|
||||
| Patch Failure Rate | 3.1% (2/64) |
|
||||
| Tasks All Passing | 46 |
|
||||
| Tasks Flaky/Failing | 14 |
|
||||
|
||||
### Tool Calls
|
||||
|
||||
| Tool | Total | Avg/Run |
|
||||
|------|-------|---------|
|
||||
| Read | 138 | 2.3 |
|
||||
| Edit | 64 | 1.1 |
|
||||
| Write | 0 | 0.0 |
|
||||
| **Tool Input Chars** | 15,937 | 266 |
|
||||
|
||||
### Tokens & Time
|
||||
|
||||
| Metric | Total | Avg/Run |
|
||||
|--------|-------|---------|
|
||||
| Input Tokens | 460,218 | 7,670 |
|
||||
| Output Tokens | 246,833 | 4,114 |
|
||||
| Total Tokens | 2,771,682 | 46,195 |
|
||||
| Duration | 2343.3s | 39.1s |
|
||||
| **Avg Indent Score** | — | **2.24** |
|
||||
|
||||
### Hashline Edit Subtypes
|
||||
|
||||
| Operation | Count | % |
|
||||
|-----------|-------|---|
|
||||
| set_line | 65 | 89.0% |
|
||||
| replace_lines | 2 | 2.7% |
|
||||
| insert_after | 5 | 6.8% |
|
||||
| replace | 1 | 1.4% |
|
||||
| **Total** | **73** | 100% |
|
||||
|
||||
## Task Results
|
||||
|
||||
| Task | File | Success | Edit Hit | R/E/W | Tokens (In/Out) | Time | Indent |
|
||||
|------|------|---------|----------|-------|-----------------|------|--------|
|
||||
| Access Remove Optional Chain 001 | registerDevToolsEventLogger.js | 0/1 ❌ | 100.0% | 3/1/0 | 17,601/11,111 | 95.8s | 0.00 |
|
||||
| Access Remove Optional Chain 002 | TimelineContext.js | 1/1 ✅ | 100.0% | 2/1/0 | 0/1,856 | 17.5s | 1.29 |
|
||||
| Access Remove Optional Chain 003 | astUtils.js | 1/1 ✅ | 100.0% | 2/1/0 | 16,313/2,982 | 25.0s | 4.85 |
|
||||
| Call Swap Call Args 001 | testHelpers.js | 1/1 ✅ | 100.0% | 2/1/0 | 9,026/4,671 | 36.2s | 1.33 |
|
||||
| Call Swap Call Args 002 | FlamegraphChartBuilder.js | 1/1 ✅ | 100.0% | 2/1/0 | 9,698/1,972 | 17.9s | 3.79 |
|
||||
| Call Swap Call Args 003 | SyntheticEvent.js | 1/1 ✅ | 100.0% | 2/1/0 | 0/3,286 | 29.8s | 3.76 |
|
||||
| Duplicate Duplicate Line Flip 001 | index.js | 1/1 ✅ | 100.0% | 2/1/0 | 12,444/725 | 10.2s | 0.00 |
|
||||
| Duplicate Duplicate Line Flip 002 | ActivityList.js | 1/1 ✅ | 100.0% | 2/1/0 | 8,430/1,621 | 19.6s | 3.61 |
|
||||
| Duplicate Duplicate Line Flip 003 | SyntheticEvent.js | 1/1 ✅ | 100.0% | 2/1/0 | 23,157/10,573 | 63.2s | 1.02 |
|
||||
| Identifier Identifier Multi Edit 001 | TabBar.js | 1/1 ✅ | 100.0% | 7/2/0 | 0/2,765 | 23.1s | 3.33 |
|
||||
| Identifier Identifier Multi Edit 002 | EventPluginRegistry.js | 1/1 ✅ | 100.0% | 4/2/0 | 35,270/3,848 | 35.1s | 3.94 |
|
||||
| Identifier Identifier Multi Edit 003 | ReactPerformanceTrackProperties.js | 0/1 ❌ | 100.0% | 5/1/0 | 9,731/3,601 | 24.4s | 9.95 |
|
||||
| Import Swap Named Imports 001 | CommitFlamegraphListItem.js | 1/1 ✅ | 100.0% | 2/1/0 | 0/3,143 | 27.2s | 2.86 |
|
||||
| Import Swap Named Imports 002 | ReactDOMTextarea.js | 1/1 ✅ | 100.0% | 4/1/0 | 10,743/4,975 | 51.9s | 2.41 |
|
||||
| Import Swap Named Imports 003 | StyleEditor.js | 1/1 ✅ | 100.0% | 6/1/0 | 0/6,274 | 52.4s | 1.31 |
|
||||
| Literal Flip Boolean 001 | testHelpers.js | 1/1 ✅ | 100.0% | 2/1/0 | 14,287/1,460 | 14.6s | 1.33 |
|
||||
| Literal Flip Boolean 002 | ReactNoopFlightServer.js | 1/1 ✅ | 100.0% | 1/1/0 | 6,170/1,287 | 14.2s | 1.11 |
|
||||
| Literal Flip Boolean 003 | ReactFlightDOMClientEdge.js | 1/1 ✅ | 100.0% | 2/1/0 | 12,047/3,908 | 28.6s | 3.58 |
|
||||
| Literal Off By One 001 | githubAPI.js | 1/1 ✅ | 100.0% | 2/1/0 | 0/825 | 10.4s | 0.67 |
|
||||
| Literal Off By One 002 | code-path.js | 1/1 ✅ | 100.0% | 2/1/0 | 9,986/2,029 | 18.7s | 3.50 |
|
||||
| Literal Off By One 003 | InspectedElement.js | 1/1 ✅ | 100.0% | 3/1/0 | 0/3,946 | 27.8s | 3.60 |
|
||||
| Operator Remove Negation 001 | ReactDOMClient.js | 0/1 ❌ | 0.0% | 2/1/0 | 0/13,731 | 83.7s | 1.08 |
|
||||
| Operator Remove Negation 002 | NativeEventsView.js | 1/1 ✅ | 100.0% | 2/1/0 | 0/5,994 | 39.3s | 3.03 |
|
||||
| Operator Remove Negation 003 | ReactFlightUnbundledReferences.js | 0/1 ❌ | 100.0% | 2/1/0 | 0/18,060 | 167.7s | 2.00 |
|
||||
| Operator Swap Arithmetic 001 | fallbackEvalContext.js | 1/1 ✅ | 100.0% | 2/1/0 | 0/1,770 | 16.1s | 0.00 |
|
||||
| Operator Swap Arithmetic 002 | CSSShorthandProperty.js | 0/1 ❌ | 100.0% | 2/0/0 | 17,220/9,647 | 85.4s | 2.88 |
|
||||
| Operator Swap Arithmetic 003 | hooks.js | 0/1 ❌ | 100.0% | 2/1/0 | 12,900/4,697 | 40.6s | 2.25 |
|
||||
| Operator Swap Comparison 001 | index.js | 1/1 ✅ | 100.0% | 1/1/0 | 5,586/1,190 | 11.5s | 0.00 |
|
||||
| Operator Swap Comparison 002 | ReactFlightDOMServerBrowser.js | 1/1 ✅ | 100.0% | 2/1/0 | 8,700/2,123 | 21.2s | 1.57 |
|
||||
| Operator Swap Comparison 003 | ReactFlightDOMServerNode.js | 1/1 ✅ | 100.0% | 2/1/0 | 0/2,128 | 16.3s | 1.95 |
|
||||
| Operator Swap Equality 001 | readInputData.js | 1/1 ✅ | 100.0% | 2/1/0 | 12,630/1,119 | 13.6s | 0.00 |
|
||||
| Operator Swap Equality 002 | editor.js | 1/1 ✅ | 100.0% | 1/1/0 | 0/1,052 | 10.0s | 0.00 |
|
||||
| Operator Swap Equality 003 | hooks.js | 1/1 ✅ | 100.0% | 2/1/0 | 11,469/1,433 | 17.2s | 2.25 |
|
||||
| Operator Swap Increment Decrement 001 | ReactFlightDOMClientNode.js | 1/1 ✅ | 100.0% | 2/1/0 | 8,106/1,394 | 15.5s | 1.52 |
|
||||
| Operator Swap Increment Decrement 002 | ReactFlightDOMClientNode.js | 1/1 ✅ | 100.0% | 1/1/0 | 7,926/1,151 | 14.5s | 1.92 |
|
||||
| Operator Swap Increment Decrement 003 | loadSourceAndMetadata.js | 1/1 ✅ | 100.0% | 2/1/0 | 11,335/1,105 | 13.4s | 3.72 |
|
||||
| Operator Swap Logical 001 | profiling.js | 1/1 ✅ | 100.0% | 2/1/0 | 6,927/978 | 13.5s | 0.00 |
|
||||
| Operator Swap Logical 002 | SourceMapMetadataConsumer.js | 1/1 ✅ | 100.0% | 2/1/0 | 0/4,323 | 28.6s | 3.14 |
|
||||
| Operator Swap Logical 003 | DevToolsFiberComponentStack.js | 1/1 ✅ | 100.0% | 2/1/0 | 14,121/3,355 | 33.1s | 4.13 |
|
||||
| Operator Swap Nullish 001 | getBatchRange.js | 1/1 ✅ | 100.0% | 2/1/0 | 12,093/1,701 | 21.2s | 1.33 |
|
||||
| Operator Swap Nullish 002 | EnterLeaveEventPlugin.js | 1/1 ✅ | 100.0% | 2/1/0 | 10,327/2,655 | 24.2s | 1.57 |
|
||||
| Operator Swap Nullish 003 | backend.js | 0/1 ❌ | 100.0% | 2/1/0 | 0/3,539 | 24.9s | 3.15 |
|
||||
| Regex Swap Regex Quantifier 001 | githubAPI.js | 1/1 ✅ | 66.7% | 3/3/0 | 4,597/3,620 | 343.3s | 0.67 |
|
||||
| Regex Swap Regex Quantifier 002 | ReactFlightStackConfigV8.js | 1/1 ✅ | 100.0% | 2/1/0 | 158/3,263 | 24.7s | 3.06 |
|
||||
| Regex Swap Regex Quantifier 003 | utils.js | 1/1 ✅ | 100.0% | 2/1/0 | 16,132/7,950 | 77.7s | 2.00 |
|
||||
| Structural Delete Statement 001 | UnsupportedVersionDialog.js | 0/1 ❌ | 100.0% | 2/1/0 | 6,332/2,016 | 20.9s | 5.89 |
|
||||
| Structural Delete Statement 002 | getComponentNameFromFiber.js | 0/1 ❌ | 100.0% | 3/1/0 | 8,589/3,284 | 30.9s | 0.62 |
|
||||
| Structural Delete Statement 003 | simulateBrowserEventDispatch.js | 0/1 ❌ | 100.0% | 2/1/0 | 0/10,218 | 64.6s | 4.46 |
|
||||
| Structural Remove Early Return 001 | InspectedElementStateTree.js | 1/1 ✅ | 100.0% | 2/1/0 | 11,368/5,122 | 40.0s | 0.33 |
|
||||
| Structural Remove Early Return 002 | useCommitFilteringAndNavigation.js | 1/1 ✅ | 100.0% | 2/1/0 | 12,829/5,195 | 39.8s | 3.73 |
|
||||
| Structural Remove Early Return 003 | ReactFiberAsyncAction.js | 0/1 ❌ | 100.0% | 2/1/0 | 0/11,813 | 68.9s | 1.46 |
|
||||
| Structural Swap Adjacent Lines 001 | ReactServerConsoleConfigPlain.js | 1/1 ✅ | 100.0% | 2/1/0 | 813/1,740 | 13.1s | 1.00 |
|
||||
| Structural Swap Adjacent Lines 002 | ReactNoopFlightServer.js | 0/1 ❌ | 100.0% | 3/2/0 | 8,720/3,456 | 27.7s | 0.00 |
|
||||
| Structural Swap Adjacent Lines 003 | backend.js | 0/1 ❌ | 100.0% | 3/1/0 | 37,288/9,515 | 80.6s | 3.15 |
|
||||
| Structural Swap If Else 001 | importFile.js | 1/1 ✅ | 100.0% | 2/1/0 | 9,194/3,300 | 44.0s | 0.00 |
|
||||
| Structural Swap If Else 002 | ReactNativeFiberInspector.js | 0/1 ❌ | 100.0% | 2/1/0 | 0/1,492 | 14.2s | 3.18 |
|
||||
| Structural Swap If Else 003 | ReactDOMFizzStaticNode.js | 1/1 ✅ | 100.0% | 2/1/0 | 0/11,169 | 56.9s | 1.88 |
|
||||
| Unicode Unicode Hyphen 001 | Rectangle.js | 1/1 ✅ | 100.0% | 2/1/0 | 0/1,014 | 12.5s | 3.00 |
|
||||
| Unicode Unicode Hyphen 002 | UnsupportedBridgeProtocolDialog.js | 1/1 ✅ | 100.0% | 2/1/0 | 0/950 | 14.9s | 3.83 |
|
||||
| Unicode Unicode Hyphen 003 | ReactTypes.js | 1/1 ✅ | 100.0% | 2/1/0 | 9,955/1,713 | 13.7s | 1.24 |
|
||||
|
||||
## Category Summary
|
||||
|
||||
| Category | Runs | Verified | Edit Used | Success | Min/Avg/Max Difficulty |
|
||||
|----------|------|----------|-----------|---------|------------------------|
|
||||
| access | 3 | 66.7% (2/3) | 100.0% (3/3) | 66.7% (2/3) | 7 / 8.7 / 10 |
|
||||
| call | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) | 6 / 7.7 / 10 |
|
||||
| duplicate | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) | 7 / 9.7 / 12 |
|
||||
| identifier | 3 | 66.7% (2/3) | 100.0% (3/3) | 66.7% (2/3) | 6 / 9.3 / 14 |
|
||||
| import | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) | 2 / 4.7 / 6 |
|
||||
| literal | 6 | 100.0% (6/6) | 100.0% (6/6) | 100.0% (6/6) | 4 / 6.2 / 9 |
|
||||
| operator | 21 | 76.2% (16/21) | 95.2% (20/21) | 76.2% (16/21) | 1 / 6.5 / 13 |
|
||||
| regex | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) | 6 / 7.3 / 8 |
|
||||
| structural | 12 | 41.7% (5/12) | 100.0% (12/12) | 41.7% (5/12) | 4 / 7.6 / 15 |
|
||||
| unicode | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) | 1 / 3.0 / 6 |
|
||||
|
||||
## Mutation Summary
|
||||
|
||||
| Mutation | Category | Runs | Verified | Edit Used | Success |
|
||||
|----------|----------|------|----------|-----------|---------|
|
||||
| delete-statement | structural | 3 | 0.0% (0/3) | 100.0% (3/3) | 0.0% (0/3) |
|
||||
| duplicate-line-flip | duplicate | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| flip-boolean | literal | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| identifier-multi-edit | identifier | 3 | 66.7% (2/3) | 100.0% (3/3) | 66.7% (2/3) |
|
||||
| off-by-one | literal | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| remove-early-return | structural | 3 | 66.7% (2/3) | 100.0% (3/3) | 66.7% (2/3) |
|
||||
| remove-negation | operator | 3 | 33.3% (1/3) | 100.0% (3/3) | 33.3% (1/3) |
|
||||
| remove-optional-chain | access | 3 | 66.7% (2/3) | 100.0% (3/3) | 66.7% (2/3) |
|
||||
| swap-adjacent-lines | structural | 3 | 33.3% (1/3) | 100.0% (3/3) | 33.3% (1/3) |
|
||||
| swap-arithmetic | operator | 3 | 33.3% (1/3) | 66.7% (2/3) | 33.3% (1/3) |
|
||||
| swap-call-args | call | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| swap-comparison | operator | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| swap-equality | operator | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| swap-if-else | structural | 3 | 66.7% (2/3) | 100.0% (3/3) | 66.7% (2/3) |
|
||||
| swap-increment-decrement | operator | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| swap-logical | operator | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| swap-named-imports | import | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| swap-nullish | operator | 3 | 66.7% (2/3) | 100.0% (3/3) | 66.7% (2/3) |
|
||||
| swap-regex-quantifier | regex | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
| unicode-hyphen | unicode | 3 | 100.0% (3/3) | 100.0% (3/3) | 100.0% (3/3) |
|
||||
|
||||
## Difficulty Summary
|
||||
|
||||
| Difficulty Score | Runs | Verified | Edit Used | Success |
|
||||
|------------------|------|----------|-----------|---------|
|
||||
| 0-2 | 6 | 83.3% (5/6) | 100.0% (6/6) | 83.3% (5/6) |
|
||||
| 3-5 | 12 | 66.7% (8/12) | 91.7% (11/12) | 66.7% (8/12) |
|
||||
| 6-8 | 24 | 83.3% (20/24) | 100.0% (24/24) | 83.3% (20/24) |
|
||||
| 9+ | 18 | 72.2% (13/18) | 100.0% (18/18) | 72.2% (13/18) |
|
||||
|
||||
## Edit Tool Errors
|
||||
|
||||
Failures where the edit tool returned an error or failed to apply the patch.
|
||||
|
||||
### Operator Remove Negation 001 (ReactDOMClient.js)
|
||||
|
||||
#### Run 1
|
||||
|
||||
##### Attempt 1
|
||||
|
||||
- Path: ReactDOMClient.js
|
||||
- Operation: —
|
||||
|
||||
**Tool error**
|
||||
|
||||
```
|
||||
No changes made to ReactDOMClient.js. The edits produced identical content.
|
||||
Edit 0: replacement for 57:ea is identical to current content:
|
||||
57:ea| if (foundDevTools && canUseDOM && window.top === window.self) {
|
||||
Your content must differ from what the file already contains. Re-read the file to see the current state.
|
||||
```
|
||||
|
||||
**Patch args**
|
||||
|
||||
```diff
|
||||
{
|
||||
"path": "ReactDOMClient.js",
|
||||
"edits": [
|
||||
{
|
||||
"set_line": {
|
||||
"anchor": "57:ea",
|
||||
"new_text": " if (foundDevTools && canUseDOM && window.top === window.self) {"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Regex Swap Regex Quantifier 001 (githubAPI.js)
|
||||
|
||||
#### Run 1
|
||||
|
||||
##### Attempt 1
|
||||
|
||||
- Path: githubAPI.js
|
||||
- Operation: —
|
||||
|
||||
**Tool error**
|
||||
|
||||
```
|
||||
No changes made to githubAPI.js. The edits produced identical content.
|
||||
Edit 0: replacement for 19:fc is identical to current content:
|
||||
19:fc| message = message.replace(/
|
||||
Your content must differ from what the file already contains. Re-read the file to see the current state.
|
||||
The file differs from the original fixture at these lines:
|
||||
19:86 - message = message.replace(/"[0-9]*"/g, '');
|
||||
20:f2 + message = message.replace(/"[0-9]+"/g, '');
|
||||
```
|
||||
|
||||
**Patch args**
|
||||
|
||||
```diff
|
||||
{
|
||||
"path": "githubAPI.js",
|
||||
"edits": [
|
||||
{
|
||||
"set_line": {
|
||||
"anchor": "19:fc",
|
||||
"new_text": " message = message.replace(/"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Failed Tasks (0% passing)
|
||||
|
||||
### Access Remove Optional Chain 001 (registerDevToolsEventLogger.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for registerDevToolsEventLogger.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
**Fixed.** Line 36 now uses `currentLoggingIFrame.contentWindow?.postMessage(` (hash `36:c5`). Confirmed via re-read; no other changes.
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -7 @@
|
||||
* @flow strict-local
|
||||
*/
|
||||
|
||||
-import type { LoggerEvent } from 'react-devtools-shared/src/Logger';
|
||||
+import type {LoggerEvent} from 'react-devtools-shared/src/Logger';
|
||||
|
||||
|
||||
-import { registerEventLogger } from 'react-devtools-shared/src/Logger';
|
||||
-import { enableLogger } from 'react-devtools-feature-flags';
|
||||
+import {registerEventLogger} from 'react-devtools-shared/src/Logger';
|
||||
+import {enableLogger} from 'react-devtools-feature-flags';
|
||||
|
||||
let currentLoggingIFrame = null;
|
||||
let currentSessionId = null;
|
||||
@@ -22 @@
|
||||
|
||||
export function registerDevToolsEventLogger(
|
||||
surface: string,
|
||||
- fetchAdditionalContext?: (() => LoggerContext) | (() => Promise<LoggerContext>),
|
||||
+ fetchAdditionalContext?:
|
||||
+ | (() => LoggerContext)
|
||||
+ | (() => Promise<LoggerContext>),
|
||||
): void {
|
||||
async function logEvent(event: LoggerEvent) {
|
||||
if (enableLogger) {
|
||||
@@ -27 @@
|
||||
async function logEvent(event: LoggerEvent) {
|
||||
if (enableLogger) {
|
||||
if (currentLoggingIFrame != null && currentSessionId != null) {
|
||||
- const { metadata, ...eventWithoutMetadata } = event;
|
||||
+ const {metadata, ...eventWithoutMetadata} = event;
|
||||
const additionalContext: LoggerContext | {} =
|
||||
fetchAdditionalContext != null ? await fetchAdditionalContext() : {};
|
||||
|
||||
const additionalContext: LoggerContext | {} =
|
||||
fetchAdditionalContext != null ? await fetchAdditionalContext() : {};
|
||||
|
||||
- currentLoggingIFrame?.contentWindow?.postMessage(
|
||||
+ currentLoggingIFrame.contentWindow?.postMessage
|
||||
{
|
||||
source: 'react-devtools-logging',
|
||||
event: eventWithoutMetadata,
|
||||
@@ -55 @@
|
||||
currentLoggingIFrame = iframe;
|
||||
|
||||
if (missedEvents.length > 0) {
|
||||
- missedEvents.forEach((event) => logEvent(event));
|
||||
+ missedEvents.forEach(event => logEvent(event));
|
||||
missedEvents = [];
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Identifier Identifier Multi Edit 003 (ReactPerformanceTrackProperties.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for ReactPerformanceTrackProperties.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
Bug fixed: `DADED` → `ADDED` in definition (line 281) and usages (lines 336, 361, 431). Confirmed via re-read: all four instances corrected; line 427 already correct; no other changes.
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -229 @@
|
||||
}
|
||||
|
||||
const REMOVED = '\u2013\xa0';
|
||||
-const ADDED = '+\xa0';
|
||||
+const ADDED = '+ ';
|
||||
const UNCHANGED = '\u2007\xa0';
|
||||
|
||||
export function addObjectDiffToProperties(
|
||||
@@ -284 @@
|
||||
// with any change to children of the component and their props will be logged
|
||||
// elsewhere but still mark it as a cause of render.
|
||||
const line = '\xa0\xa0'.repeat(indent) + key;
|
||||
- properties.push([REMOVED + line, '\u2026'], [ADDED + line, '\u2026']);
|
||||
+ properties.push([REMOVED + line, '…'], [ADDED + line, '…']);
|
||||
isDeeplyEqual = false;
|
||||
continue;
|
||||
}
|
||||
@@ -373 @@
|
||||
isDeeplyEqual = false;
|
||||
}
|
||||
} else {
|
||||
- properties.push([ADDED + '\xa0\xa0'.repeat(indent) + key, '\u2026']);
|
||||
+ properties.push([ADDED + ' '.repeat(indent) + key, '…']);
|
||||
isDeeplyEqual = false;
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
### Operator Remove Negation 001 (ReactDOMClient.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for ReactDOMClient.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
No `!` operator on line 57: `57:ea| if (foundDevTools && canUseDOM && window.top === window.self) {`
|
||||
|
||||
Edit attempted; rejected as identical (no-op error confirms no `!` present).
|
||||
|
||||
No logical negation operator (`!`) anywhere in file.
|
||||
|
||||
Cannot remove absent token without fabricating change, violating contract (touch only requested; no incidental changes).
|
||||
|
||||
Downside of forced mutation: introduces unrelated bug, fails fixture diff.
|
||||
|
||||
Propose: clarify task (e.g., intended location/token, or confirm...
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -49 @@
|
||||
const foundDevTools = injectIntoDevTools();
|
||||
|
||||
if (__DEV__) {
|
||||
- if (!foundDevTools && canUseDOM && window.top === window.self) {
|
||||
+ if (foundDevTools && canUseDOM && window.top === window.self) {
|
||||
// If we're in Chrome or Firefox, provide a download link if not installed.
|
||||
if (
|
||||
(navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1) ||
|
||||
```
|
||||
|
||||
### Operator Remove Negation 003 (ReactFlightUnbundledReferences.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for ReactFlightUnbundledReferences.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
The negation operator (`!`) on line 330 accidentally caused `getOwnPropertyDescriptor` to create and define a property descriptor for missing properties, potentially polluting the internal target object with non-enumerable properties.
|
||||
|
||||
**Fix:** Removed the `!`, now `if (descriptor)` standardizes attributes only for existing properties (e.g., overriding defaults from `get` trap) and returns `undefined` for missing ones (no pollution).
|
||||
|
||||
Verified: Changed region re-read; only line 330 modified (...
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -247 @@
|
||||
// Use a cached value
|
||||
return target.then;
|
||||
}
|
||||
- if (!target.$$async) {
|
||||
+ if (target.$$async) {
|
||||
// If this module is expected to return a Promise (such as an AsyncModule) then
|
||||
// we should resolve that with a client reference that unwraps the Promise on
|
||||
// the client.
|
||||
@@ -315 @@
|
||||
},
|
||||
getOwnPropertyDescriptor: function (target: Function, name: string | symbol): $FlowFixMe {
|
||||
let descriptor = Object.getOwnPropertyDescriptor(target, name);
|
||||
- if (!descriptor) {
|
||||
+ if (descriptor) {
|
||||
descriptor = {
|
||||
value: getReference(target, name),
|
||||
writable: false,
|
||||
```
|
||||
|
||||
### Operator Swap Arithmetic 002 (CSSShorthandProperty.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for CSSShorthandProperty.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
No arithmetic operators in `CSSShorthandProperty.js`. Comment paths use `/` (lines 1: /**, 5: / LICENSE, 6: */, 9: // https://.../layout/...); these are literals, not executable operators. No expressions, calculations, or swappable arithmetic near top (lines 1–20) or full file. Edit impossible without fabrication. Verify externally:
|
||||
```bash
|
||||
head -20 CSSShorthandProperty.js | grep -E '[+\-*/%^]' || echo "No matches"
|
||||
cat CSSShorthandProperty.js | wc -l # expect ~193
|
||||
```
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -2 @@
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
- * LICENSE file in the root directory of this source tree.
|
||||
+ / LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
// List derived from Gecko source code:
|
||||
```
|
||||
|
||||
### Operator Swap Arithmetic 003 (hooks.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for hooks.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
**Fix applied.**
|
||||
|
||||
- Changed `container.clientWidth <= totalChildWidth` to `container.clientWidth < totalChildWidth` in `useIsOverflowing` (line 129).
|
||||
- This corrects the overflow detection: overflowing only when child width strictly exceeds container width (equal fits exactly).
|
||||
- Verified: single-line change, formatting preserved, no other modifications.
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -2 @@
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
- * LICENSE file in the root directory of this source tree.
|
||||
+ / LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow
|
||||
*/
|
||||
@@ -118 @@
|
||||
|
||||
const container = ((containerRef.current: any): HTMLDivElement);
|
||||
|
||||
- const handleResize = () => setIsOverflowing(container.clientWidth <= totalChildWidth);
|
||||
+ const handleResize = () => setIsOverflowing(container.clientWidth < totalChildWidth);
|
||||
|
||||
handleResize();
|
||||
|
||||
```
|
||||
|
||||
### Operator Swap Nullish 003 (backend.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for backend.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
**Fixed.** Changed `||` to `??` on line 414 in `backend.js` to correct the swapped nullish coalescing operator.
|
||||
|
||||
Confirmed via re-read: only the targeted line updated; structure, whitespace, and surrounding code preserved.
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -195 @@
|
||||
// $FlowFixMe[incompatible-call] found when upgrading Flow
|
||||
bridge,
|
||||
agent,
|
||||
- ((resolveRNStyle || hook.resolveRNStyle: any): ResolveNativeStyle),
|
||||
+ ((resolveRNStyle ?? hook.resolveRNStyle: any): ResolveNativeStyle),
|
||||
nativeStyleEditorValidAttributes || hook.nativeStyleEditorValidAttributes || null,
|
||||
);
|
||||
} else {
|
||||
@@ -378 @@
|
||||
|
||||
const unsubscribeBackend = initBackend(hook, agent, window, isReloadAndProfileSupported);
|
||||
|
||||
- const nativeStyleResolver: ResolveNativeStyle | void = resolveRNStyle || hook.resolveRNStyle;
|
||||
+ const nativeStyleResolver: ResolveNativeStyle | void = resolveRNStyle ?? hook.resolveRNStyle;
|
||||
|
||||
if (nativeStyleResolver != null) {
|
||||
const validAttributes =
|
||||
```
|
||||
|
||||
### Structural Delete Statement 001 (UnsupportedVersionDialog.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for UnsupportedVersionDialog.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
Fixed: Restored `const {store} = useContext(StoreContext);` after dispatch extraction (new line 22).
|
||||
|
||||
Verified region:
|
||||
```
|
||||
21:99| const {dispatch} = useContext(ModalDialogContext);
|
||||
22:07| const {store} = useContext(StoreContext);
|
||||
23:05|
|
||||
24:8a| const [state, setState] = useState<DAILOG_STATE>('dialog-not-shown');
|
||||
```
|
||||
|
||||
No other changes.
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -19 @@
|
||||
|
||||
export default function UnsupportedVersionDialog(_: {}): null {
|
||||
const { dispatch } = useContext(ModalDialogContext);
|
||||
- const store = useContext(StoreContext);
|
||||
+ const { store } = useContext(StoreContext);
|
||||
+
|
||||
const [state, setState] = useState<DAILOG_STATE>('dialog-not-shown');
|
||||
|
||||
useEffect(() => {
|
||||
```
|
||||
|
||||
### Structural Delete Statement 002 (getComponentNameFromFiber.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for getComponentNameFromFiber.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
getComponentNameFromFiber.js fixed: restored `const functionName = getComponentNameFromType(innerType) || '';` in `getWrappedName`. Verified post-edit.
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -54 @@
|
||||
|
||||
// Keep in sync with shared/getComponentNameFromType
|
||||
function getWrappedName(outerType: mixed, innerType: any, wrapperName: string): string {
|
||||
- const functionName = innerType.displayName || innerType.name || '';
|
||||
+ const functionName = getComponentNameFromType(innerType) || '';
|
||||
+
|
||||
return (
|
||||
(outerType: any).displayName ||
|
||||
(functionName !== '' ? `${wrapperName}(${functionName})` : wrapperName)
|
||||
```
|
||||
|
||||
### Structural Delete Statement 003 (simulateBrowserEventDispatch.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for simulateBrowserEventDispatch.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
**Fixed:** Added `return` to line 59 of `simulateBrowserEventDispatch.js`.
|
||||
The function now returns `!event._canceledFlag` (as `_dispatch` does), matching `dispatchEvent` API. Verified via re-read (line 59 hash: `2d`).
|
||||
No other changes.
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -56 @@
|
||||
|
||||
eventImpl.isTrusted = false;
|
||||
|
||||
- await _dispatch.call(this, eventImpl);
|
||||
+ return await _dispatch.call(this, eventImpl);
|
||||
}
|
||||
|
||||
async function _dispatch(eventImpl, legacyTargetOverrideFlag) {
|
||||
@@ -82 @@
|
||||
const isActivationEvent = false; // TODO Not ported in fork.
|
||||
|
||||
if (isActivationEvent && targetImpl._hasActivationBehavior) {
|
||||
- activationTarget = targetImpl;
|
||||
}
|
||||
|
||||
let slotInClosedTree = false;
|
||||
```
|
||||
|
||||
### Structural Remove Early Return 003 (ReactFiberAsyncAction.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for ReactFiberAsyncAction.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
Fix applied to `ReactFiberAsyncAction.js`: restored guard clause `if (currentEntangledPendingCount === 0) { return; }` in `pingEngtangledActionScope` before decrement (lines 104–106 post-edit).
|
||||
|
||||
Verified: only targeted insertion (3 lines added, no other content changes, no reformatting). Line anchors shifted as expected. Similar pattern in `releaseIsomorphicIndicator` untouched per instructions.
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -85 @@
|
||||
}
|
||||
|
||||
function pingEngtangledActionScope() {
|
||||
+ if (currentEntangledPendingCount === 0) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
if (--currentEntangledPendingCount === 0) {
|
||||
if (enableProfilerTimer && enableComponentPerformanceTrack) {
|
||||
if (!hasScheduledTransitionWork()) {
|
||||
@@ -176 @@
|
||||
export function registerDefaultIndicator(
|
||||
onDefaultTransitionIndicator: () => void | (() => void),
|
||||
): void {
|
||||
- if (!enableDefaultTransitionIndicator) {
|
||||
- return;
|
||||
- }
|
||||
if (isomorphicDefaultTransitionIndicator === undefined) {
|
||||
isomorphicDefaultTransitionIndicator = onDefaultTransitionIndicator;
|
||||
} else if (isomorphicDefaultTransitionIndicator !== onDefaultTransitionIndicator) {
|
||||
```
|
||||
|
||||
### Structural Swap Adjacent Lines 002 (ReactNoopFlightServer.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for ReactNoopFlightServer.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
**Fixed.** Swapped lines 46–47 in `ReactNoopFlightServer.js` (added missing comma on re-edit).
|
||||
|
||||
**Verification:**
|
||||
```
|
||||
44: closeWithError(destination: Destination, error: mixed): void {},
|
||||
45: stringToChunk(content: string): Uint8Array {
|
||||
46: return textEncoder.encode(content);
|
||||
47: flushBuffered(destination: Destination): void {},
|
||||
48: },
|
||||
```
|
||||
Only intended lines touched.
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -14 @@
|
||||
* environment.
|
||||
*/
|
||||
|
||||
-import type { ReactClientValue } from 'react-server/src/ReactFlightServer';
|
||||
+import type {ReactClientValue} from 'react-server/src/ReactFlightServer';
|
||||
|
||||
|
||||
-import { saveModule } from 'react-noop-renderer/flight-modules';
|
||||
+import {saveModule} from 'react-noop-renderer/flight-modules';
|
||||
|
||||
import ReactFlightServer from 'react-server/flight';
|
||||
|
||||
@@ -42 @@
|
||||
completeWriting(destination: Destination): void {},
|
||||
close(destination: Destination): void {},
|
||||
closeWithError(destination: Destination, error: mixed): void {},
|
||||
- flushBuffered(destination: Destination): void {},
|
||||
stringToChunk(content: string): Uint8Array {
|
||||
return textEncoder.encode(content);
|
||||
stringToChunk(content: string): Uint8Array {
|
||||
return textEncoder.encode(content);
|
||||
+ flushBuffered(destination: Destination): void {},
|
||||
},
|
||||
stringToPrecomputedChunk(content: string): Uint8Array {
|
||||
return textEncoder.encode(content);
|
||||
@@ -58 @@
|
||||
getClientReferenceKey(reference: Object): Object {
|
||||
return reference;
|
||||
},
|
||||
- resolveClientReferenceMetadata(config: void, reference: { $$typeof: symbol, value: any }) {
|
||||
+ resolveClientReferenceMetadata(
|
||||
+ config: void,
|
||||
+ reference: {$$typeof: symbol, value: any},
|
||||
+ ) {
|
||||
return saveModule(reference.value);
|
||||
},
|
||||
});
|
||||
@@ -68 @@
|
||||
filterStackFrame?: (url: string, functionName: string) => boolean,
|
||||
identifierPrefix?: string,
|
||||
signal?: AbortSignal,
|
||||
- debugChannel?: { onMessage?: (message: string) => void },
|
||||
+ debugChannel?: {onMessage?: (message: string) => void},
|
||||
onError?: (error: mixed) => void,
|
||||
};
|
||||
|
||||
@@ -98 @@
|
||||
}
|
||||
}
|
||||
if (__DEV__ && options && options.debugChannel !== undefined) {
|
||||
- options.debugChannel.onMessage = (message) => {
|
||||
+ options.debugChannel.onMessage = message => {
|
||||
ReactNoopFlightServer.resolveDebugMessage(request, message);
|
||||
};
|
||||
}
|
||||
@@ -107 @@
|
||||
return destination;
|
||||
}
|
||||
|
||||
-export { render };
|
||||
+export {render};
|
||||
```
|
||||
|
||||
### Structural Swap Adjacent Lines 003 (backend.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for backend.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
**Fixed.** Swapped the adjacent `const agent = ...;` declaration (line 192) and the `if (typeof onReloadAndProfileFlagsReset === 'function') { ... }` block (lines 193–195) in `connectToDevTools()`.
|
||||
|
||||
**Verification:**
|
||||
- Confirmed via re-read: new order is `if` block → `agent` declaration.
|
||||
- Only those lines changed; hashes updated (192:6b, 193:89, 194:18, 195:0a).
|
||||
- No other mutations (e.g., second instance in `connectWithCustomMessagingProtocol` untouched per "only one intended mutation...
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -77 @@
|
||||
useHttps = false,
|
||||
port = 8097,
|
||||
websocket,
|
||||
- resolveRNStyle = (null: $FlowFixMe),
|
||||
retryConnectionDelay = 2000,
|
||||
retryConnectionDelay = 2000,
|
||||
+ resolveRNStyle = (null: $FlowFixMe),
|
||||
isAppActive = () => true,
|
||||
onSettingsUpdated,
|
||||
isReloadAndProfileSupported = getIsReloadAndProfileSupported(),
|
||||
@@ -169 @@
|
||||
|
||||
// TODO (npm-packages) Warn if "isBackendStorageAPISupported"
|
||||
// $FlowFixMe[incompatible-call] found when upgrading Flow
|
||||
- const agent = new Agent(bridge, isProfiling, onReloadAndProfile);
|
||||
if (typeof onReloadAndProfileFlagsReset === 'function') {
|
||||
onReloadAndProfileFlagsReset();
|
||||
}
|
||||
if (typeof onReloadAndProfileFlagsReset === 'function') {
|
||||
onReloadAndProfileFlagsReset();
|
||||
}
|
||||
+ const agent = new Agent(bridge, isProfiling, onReloadAndProfile);
|
||||
|
||||
if (onSettingsUpdated != null) {
|
||||
agent.addListener('updateHookSettings', onSettingsUpdated);
|
||||
```
|
||||
|
||||
### Structural Swap If Else 002 (ReactNativeFiberInspector.js) — 0/1
|
||||
|
||||
**All runs failed with same error:** File mismatch for ReactNativeFiberInspector.js
|
||||
|
||||
**Sample agent response (run 1):**
|
||||
```
|
||||
Fixed. Only line 160 changed: `if (__DEV__)` → `if (!__DEV__)`.
|
||||
|
||||
Logic now correct:
|
||||
|
||||
- `__DEV__` (true): executes `else` branch (work).
|
||||
|
||||
- Prod (false): executes `if` branch (throw).
|
||||
```
|
||||
|
||||
**Diff (expected vs actual):**
|
||||
```diff
|
||||
@@ -145 @@
|
||||
}
|
||||
|
||||
function getInspectorDataForViewTag(viewTag: number): InspectorData {
|
||||
- if (__DEV__) {
|
||||
+ if (!__DEV__) {
|
||||
+ throw new Error('getInspectorDataForViewTag() is not available in production');
|
||||
+ } else {
|
||||
const closestInstance = getClosestInstanceFromNode(viewTag);
|
||||
return getInspectorDataForInstance(closestInstance);
|
||||
const closestInstance = getClosestInstanceFromNode(viewTag);
|
||||
return getInspectorDataForInstance(closestInstance);
|
||||
- } else {
|
||||
- throw new Error('getInspectorDataForViewTag() is not available in production');
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
@@ -16,8 +16,12 @@ You are working in a repository with {{#if multiFile}}multiple unrelated files{{
|
||||
|
||||
## Important constraints
|
||||
- Make the minimum change necessary. Do not refactor, improve, or "clean up" other code.
|
||||
- If you see multiple similar patterns, only change the ONE that is buggy.
|
||||
- If you see multiple similar patterns, only change the ONE that is buggy (there is only one intended mutation).
|
||||
- Preserve exact code structure. Do not rearrange statements or change formatting.
|
||||
- Your output is verified by exact text diff against an expected fixture. “Equivalent” code, reordered imports, reordered object keys, or formatting changes will fail.
|
||||
- Prefer copying the original line(s) and changing only the specific token(s) required. Do not rewrite whole statements.
|
||||
- Never modify comments/license headers unless the task explicitly asks.
|
||||
- After applying the fix, re-read the changed region to confirm you only touched the intended line(s).
|
||||
{{#if multiFile}}- Only modify the file(s) referenced by this request. Leave all other files unchanged.
|
||||
{{/if}}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user