Skip to content
Benchmark run luna-medium-staged-prewarm-r10-20260929

Benchmark run luna-medium-staged-prewarm-r10-20260929

This page contains exactly the publishable benchmark observations recorded in run luna-medium-staged-prewarm-r10-20260929; it does not select or aggregate them. Return to the run index or view aggregate metrics.

Interactive browser

Rows are pre-aggregated by task, target, prompt variant, MCP-instruction mode, context, arm, and restriction. Numeric values show median (p50), IQR, p90, maximum, and sample count. Boolean checks show pass counts and success rates. Filters apply to these summary groups; per-run observations remain available on their run pages.

Loading benchmark results…

Baseline vs semedit

Comparison evaluates baseline and semedit values within each restriction policy, target, and context group. Negative changes mark improvements for these lower-is-better metrics; positive changes mark degradations.

Detailed observations

Empirical telemetry measuring wall-clock latency, token usage, tool turns, and compiler correctness when AI coding agents perform code modifications.

Every benchmark pairs Vanilla LLM (standard file editing tools) against Semedit MCP (deterministic AST compiler operations).

Benchmark Methodology & Transparency

  • Reproducibility & Provenance: Self-contained txtar archives define test scenarios. Links below resolve to commit-anchored GitHub source files for published commits, or cryptographic SHA-256 fingerprints for uncommitted local fixtures.
  • Model Cost: Tables report model-specific credit consumption where a target model has a declared schedule: (uncached input × input credits + cached input × cached credits + (reasoning + visible output) × output credits) / 1,000,000. Thinking tokens use the output rate. ADR-0043 defines the per-million-token credit rates.
  • Multi-Level Correctness Oracle: Four validation levels evaluate each trial:
    1. Level 1 (Mutation Policy): Restricts file modifications strictly to authorized paths.
    2. Level 2 (AST Invariants): Compiler AST verification of required symbols, imports, and relative declaration ordering.
    3. Level 3 (Clean Build): Strict compilation validation with zero compiler or typecheck errors.
    4. Level 4 (Test Suite): Unit and integration test suite execution.
  • Isolated Sandboxing: Each trial executes in an ephemeral directory with pristine git and module state.

Test case: task-13-rename-followup-scale

Target: codex/gpt-6-luna/medium

default prompt · prescriptive MCP instructions · write semedit restriction

SettingValue
Test casetask-13-rename-followup-scale
Targetcodex/gpt-6-luna/medium
Prompt variantdefault
MCP server instructionsprescriptive
Semedit arm restrictionwrite
Fixturetestdata/bench/task_13_rename_followup_scale.txtar

Vanilla LLM Prompt:

Do not edit tests. You are forbidden to modify protected files: “go.mod”, “rename-plan.md”.

Apply only row 1 of rename-plan.md. Rename that Processor method and update its call sites. Leave rows 2 through 16 unchanged. Run go test ./… before finishing. Do not use semantic editing MCP tools; use standard file editing. When done, output DONE.

Semedit MCP Prompt:

Do not edit tests. You are forbidden to modify protected files: “go.mod”, “rename-plan.md”.

Apply only row 1 of rename-plan.md. Rename that Processor method and update its call sites. Leave rows 2 through 16 unchanged. Run go test ./… before finishing. Use semedit semantic tools for supported source code modifications. Shell commands for builds and tests are allowed. When done, output DONE.

Initial Workspace State (Before Edit)
// Package pipeline provides independent processing stages for the rename scale benchmark.
package pipeline

type Processor struct{}

func (Processor) LoadInput(value int) int { return value + 1 }
func (Processor) CheckInput(value int) int { return value + 2 }
func (Processor) NormalizeValue(value int) int { return value + 3 }
func (Processor) MapFields(value int) int { return value + 4 }
func (Processor) RouteValue(value int) int { return value + 5 }
func (Processor) StampEvent(value int) int { return value + 6 }
func (Processor) CountItems(value int) int { return value + 7 }
func (Processor) MergeParts(value int) int { return value + 8 }
func (Processor) FilterNoise(value int) int { return value + 9 }
func (Processor) SortRecords(value int) int { return value + 10 }
func (Processor) EncodePayload(value int) int { return value + 11 }
func (Processor) DecodeReply(value int) int { return value + 12 }
func (Processor) OpenChannel(value int) int { return value + 13 }
func (Processor) CloseChannel(value int) int { return value + 14 }
func (Processor) FlushBuffer(value int) int { return value + 15 }
func (Processor) SaveResult(value int) int { return value + 16 }

func Run(processor Processor, value int) int {
	value = processor.LoadInput(value)
	value = processor.CheckInput(value)
	value = processor.NormalizeValue(value)
	value = processor.MapFields(value)
	value = processor.RouteValue(value)
	value = processor.StampEvent(value)
	value = processor.CountItems(value)
	value = processor.MergeParts(value)
	value = processor.FilterNoise(value)
	value = processor.SortRecords(value)
	value = processor.EncodePayload(value)
	value = processor.DecodeReply(value)
	value = processor.OpenChannel(value)
	value = processor.CloseChannel(value)
	value = processor.FlushBuffer(value)
	value = processor.SaveResult(value)
	return value
}
MetricVanilla (Small)MCP (Small)Δ (Small)Vanilla (Large)MCP (Large)Δ (Large)
Wall-Clock Latency108.13s229.42s+112.2%———
Process Start → First Event0.83s0.14s————
First Event → First Tool Call10.24s5.10s————
MCP Initialize → First Semantic Call——————
MCP Server Start → Initialize——————
Top-Level User Turns550%———
Internal Tool Cycles1641+156.2%———
Initial Load / Discovery Turns20-100.0%———
MCP Discovery / Schema Turns00————
Tool Invocations (per run)1641+156.2%———
Output Tokens51328159+59.0%———
Reasoning / Thinking Tokens722949+3995.8%———
Total Input Tokens14274702314395+62.1%———
Cached Input Tokens13381122174976+62.5%———
Uncached Input Tokens89358139419+56.0%———
Cost0.62301.0311+65.5%———
Cached vs Uncached Token Ratio14.97:115.60:1+4.2%———
Oracle L1: Mutation PolicyPASSPASS————
Oracle L2: AST InvariantsPASSPASS————
Oracle L3: Clean BuildPASSPASS————
Oracle L4: Verification TestPASSPASS————
Semantic Tool Invocation Verified (per run)N/APASS————
Baseline vs Semedit Agentic in Small Context
  • Vanilla (Baseline vs Semedit Agentic in Small Context) Edit: File pipeline/workflow.go modified (41 lines -> 41 lines)
  • Semedit MCP (Baseline vs Semedit Agentic in Small Context) Edit: File pipeline/workflow.go modified (41 lines -> 41 lines)
#VanillaSemedit MCP
1✓ ✓
/bin/zsh -lc "cat rename-plan.md && \
rg -n \"Processor|row 1\" --glob '*.go' ."
✓ ✓
/bin/zsh -lc "pwd && \
rg --files -g 'AGENTS.md' -g 'PROJECT_BRIEF.md' -g 'rename-plan.md' -g 'go.mod' -g '*.go' | head -80"
2✓ ✓
/bin/zsh -lc 'cat pipeline/workflow.go && \
rg -n "LoadInput" .'
? ✗
/bin/zsh -lc "cat rename-plan.md && \
rg --files -g 'PROJECT_BRIEF.md' -g 'AGENTS.md'"
3file_change (✓ ✓)semedit/semantic_lookup (✓ ✓)
{
  "symbol": "LoadInput"
}
4✓ ✓
/bin/zsh -lc 'go test ./...'
semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.LoadInput",
  "to": "ReadRequest"
}
5✓ ✓
/bin/zsh -lc "rg -n \"CheckInput|ValidateRequest\" --glob '*.go' ."
✓ ✓
/bin/zsh -lc 'git status --short && \
git diff -- pipeline/workflow.go rename-plan.md go.mod && \
go test ./...'
6file_change (✓ ✓)semedit/semantic_inspect_symbol (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "symbol": "Processor.ReadRequest"
}
7✓ ✓
/bin/zsh -lc 'go test ./...'
✓ ✓
/bin/zsh -lc "git status --short --untracked-files=all -- pipeline/workflow.go && \
git diff --no-ext-diff -- pipeline/workflow.go && \
rg -n 'LoadInput|ReadRequest' pipeline"
8✓ ✓
/bin/zsh -lc "rg -n \"NormalizeValue|MapFields|CanonicalizeValue|ProjectFields\" --glob '*.go' ."
semedit/semantic_lookup (✓ ✓)
{
  "symbol": "CheckInput"
}
9file_change (✓ ✓)semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.CheckInput",
  "to": "ValidateRequest"
}
10✓ ✓
/bin/zsh -lc 'go test ./...'
✓ ✓
/bin/zsh -lc "rg -n 'CheckInput|ValidateRequest|LoadInput|ReadRequest' pipeline && \
git diff -- go.mod rename-plan.md && \
go test ./..."
11✓ ✓
/bin/zsh -lc "rg -n \"RouteValue|StampEvent|CountItems|MergeParts|DispatchValue|AnnotateEvent|TallyItems|CombineParts\" --glob '*.go' ."
semedit/semantic_lookup (✓ ✓)
{
  "symbol": "NormalizeValue"
}
12file_change (✓ ✓)semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.NormalizeValue",
  "to": "CanonicalizeValue"
}
13✓ ✓
/bin/zsh -lc 'go test ./...'
semedit/semantic_lookup (✓ ✓)
{
  "symbol": "MapFields"
}
14✓ ✓
/bin/zsh -lc "cat rename-plan.md && \
rg -n \"FilterNoise|SortRecords|EncodePayload|DecodeReply|OpenChannel|CloseChannel|FlushBuffer|SaveResult|PruneNoise|OrderRecords|MarshalPayload|ParseReply|ConnectChannel|ReleaseChannel|DrainBuffer|PersistResult\" --glob '*.go' ."
semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.MapFields",
  "to": "ProjectFields"
}
15file_change (✓ ✓)✓ ✓
/bin/zsh -lc "rg -n 'NormalizeValue|CanonicalizeValue|MapFields|ProjectFields|RouteValue|StampEvent' pipeline && \
git diff -- go.mod rename-plan.md && \
go test ./..."
16✓ ✓
/bin/zsh -lc 'go test ./...'
semedit/semantic_lookup (✓ ✓)
{
  "symbol": "RouteValue"
}
17—semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.RouteValue",
  "to": "DispatchValue"
}
18—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "StampEvent"
}
19—semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.StampEvent",
  "to": "AnnotateEvent"
}
20—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "CountItems"
}
21—semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.CountItems",
  "to": "TallyItems"
}
22—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "MergeParts"
}
23—semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.MergeParts",
  "to": "CombineParts"
}
24—✓ ✓
/bin/zsh -lc "rg -n 'RouteValue|DispatchValue|StampEvent|AnnotateEvent|CountItems|TallyItems|MergeParts|CombineParts|FilterNoise|SortRecords' pipeline && \
git diff -- go.mod rename-plan.md && \
go test ./..."
25—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "FilterNoise"
}
26—semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.FilterNoise",
  "to": "PruneNoise"
}
27—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "SortRecords"
}
28—semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.SortRecords",
  "to": "OrderRecords"
}
29—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "EncodePayload"
}
30—semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.EncodePayload",
  "to": "MarshalPayload"
}
31—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "DecodeReply"
}
32—semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.DecodeReply",
  "to": "ParseReply"
}
33—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "OpenChannel"
}
34—semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.OpenChannel",
  "to": "ConnectChannel"
}
35—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "CloseChannel"
}
36—semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.CloseChannel",
  "to": "ReleaseChannel"
}
37—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "FlushBuffer"
}
38—semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.FlushBuffer",
  "to": "DrainBuffer"
}
39—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "SaveResult"
}
40—semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.SaveResult",
  "to": "PersistResult"
}
41—✓ ✓
/bin/zsh -lc "rg -n 'FilterNoise|PruneNoise|SortRecords|OrderRecords|EncodePayload|MarshalPayload|DecodeReply|ParseReply|OpenChannel|ConnectChannel|CloseChannel|ReleaseChannel|FlushBuffer|DrainBuffer|SaveResult|PersistResult' pipeline && \
git diff -- go.mod rename-plan.md && \
go test ./..."
Baseline vs Semedit Agentic in Large Context
#VanillaSemedit MCP
1not publishednot published

default prompt · prescriptive MCP instructions · write semedit restriction

SettingValue
Test casetask-13-rename-followup-scale
Targetcodex/gpt-6-luna/medium
Prompt variantdefault
MCP server instructionsprescriptive
Semedit arm restrictionwrite
Fixturetestdata/bench/task_13_rename_followup_scale.txtar

Vanilla LLM Prompt:

Do not edit tests. You are forbidden to modify protected files: “go.mod”, “rename-plan.md”.

Apply only row 1 of rename-plan.md. Rename that Processor method and update its call sites. Leave rows 2 through 16 unchanged. Run go test ./… before finishing. Do not use semantic editing MCP tools; use standard file editing. When done, output DONE.

Semedit MCP Prompt:

Do not edit tests. You are forbidden to modify protected files: “go.mod”, “rename-plan.md”.

Apply only row 1 of rename-plan.md. Rename that Processor method and update its call sites. Leave rows 2 through 16 unchanged. Run go test ./… before finishing. Use semedit semantic tools for supported source code modifications. Shell commands for builds and tests are allowed. When done, output DONE.

Initial Workspace State (Before Edit)
// Package pipeline provides independent processing stages for the rename scale benchmark.
package pipeline

type Processor struct{}

func (Processor) LoadInput(value int) int { return value + 1 }
func (Processor) CheckInput(value int) int { return value + 2 }
func (Processor) NormalizeValue(value int) int { return value + 3 }
func (Processor) MapFields(value int) int { return value + 4 }
func (Processor) RouteValue(value int) int { return value + 5 }
func (Processor) StampEvent(value int) int { return value + 6 }
func (Processor) CountItems(value int) int { return value + 7 }
func (Processor) MergeParts(value int) int { return value + 8 }
func (Processor) FilterNoise(value int) int { return value + 9 }
func (Processor) SortRecords(value int) int { return value + 10 }
func (Processor) EncodePayload(value int) int { return value + 11 }
func (Processor) DecodeReply(value int) int { return value + 12 }
func (Processor) OpenChannel(value int) int { return value + 13 }
func (Processor) CloseChannel(value int) int { return value + 14 }
func (Processor) FlushBuffer(value int) int { return value + 15 }
func (Processor) SaveResult(value int) int { return value + 16 }

func Run(processor Processor, value int) int {
	value = processor.LoadInput(value)
	value = processor.CheckInput(value)
	value = processor.NormalizeValue(value)
	value = processor.MapFields(value)
	value = processor.RouteValue(value)
	value = processor.StampEvent(value)
	value = processor.CountItems(value)
	value = processor.MergeParts(value)
	value = processor.FilterNoise(value)
	value = processor.SortRecords(value)
	value = processor.EncodePayload(value)
	value = processor.DecodeReply(value)
	value = processor.OpenChannel(value)
	value = processor.CloseChannel(value)
	value = processor.FlushBuffer(value)
	value = processor.SaveResult(value)
	return value
}

default prompt · prescriptive MCP instructions · write semedit restriction

SettingValue
Test casetask-13-rename-followup-scale
Targetcodex/gpt-6-luna/medium
Prompt variantdefault
MCP server instructionsprescriptive
Semedit arm restrictionwrite
Fixturetestdata/bench/task_13_rename_followup_scale.txtar

Vanilla LLM Prompt:

Do not edit tests. You are forbidden to modify protected files: “go.mod”, “rename-plan.md”.

Apply only row 1 of rename-plan.md. Rename that Processor method and update its call sites. Leave rows 2 through 16 unchanged. Run go test ./… before finishing. Do not use semantic editing MCP tools; use standard file editing. When done, output DONE.

Semedit MCP Prompt:

Do not edit tests. You are forbidden to modify protected files: “go.mod”, “rename-plan.md”.

Apply only row 1 of rename-plan.md. Rename that Processor method and update its call sites. Leave rows 2 through 16 unchanged. Run go test ./… before finishing. Use semedit semantic tools for supported source code modifications. Shell commands for builds and tests are allowed. When done, output DONE.

Initial Workspace State (Before Edit)
// Package pipeline provides independent processing stages for the rename scale benchmark.
package pipeline

type Processor struct{}

func (Processor) LoadInput(value int) int { return value + 1 }
func (Processor) CheckInput(value int) int { return value + 2 }
func (Processor) NormalizeValue(value int) int { return value + 3 }
func (Processor) MapFields(value int) int { return value + 4 }
func (Processor) RouteValue(value int) int { return value + 5 }
func (Processor) StampEvent(value int) int { return value + 6 }
func (Processor) CountItems(value int) int { return value + 7 }
func (Processor) MergeParts(value int) int { return value + 8 }
func (Processor) FilterNoise(value int) int { return value + 9 }
func (Processor) SortRecords(value int) int { return value + 10 }
func (Processor) EncodePayload(value int) int { return value + 11 }
func (Processor) DecodeReply(value int) int { return value + 12 }
func (Processor) OpenChannel(value int) int { return value + 13 }
func (Processor) CloseChannel(value int) int { return value + 14 }
func (Processor) FlushBuffer(value int) int { return value + 15 }
func (Processor) SaveResult(value int) int { return value + 16 }

func Run(processor Processor, value int) int {
	value = processor.LoadInput(value)
	value = processor.CheckInput(value)
	value = processor.NormalizeValue(value)
	value = processor.MapFields(value)
	value = processor.RouteValue(value)
	value = processor.StampEvent(value)
	value = processor.CountItems(value)
	value = processor.MergeParts(value)
	value = processor.FilterNoise(value)
	value = processor.SortRecords(value)
	value = processor.EncodePayload(value)
	value = processor.DecodeReply(value)
	value = processor.OpenChannel(value)
	value = processor.CloseChannel(value)
	value = processor.FlushBuffer(value)
	value = processor.SaveResult(value)
	return value
}
MetricVanilla (Small)MCP (Small)Δ (Small)Vanilla (Large)MCP (Large)Δ (Large)
Wall-Clock Latency60.32s272.15s+351.2%———
Process Start → First Event0.83s0.14s————
First Event → First Tool Call6.00s4.79s————
MCP Initialize → First Semantic Call——————
MCP Server Start → Initialize——————
Top-Level User Turns550%———
Internal Tool Cycles740+471.4%———
Initial Load / Discovery Turns00————
MCP Discovery / Schema Turns00————
Tool Invocations (per run)740+471.4%———
Output Tokens38976700+71.9%———
Reasoning / Thinking Tokens0770————
Total Input Tokens8578163615888+321.5%———
Cached Input Tokens7813123439360+340.2%———
Uncached Input Tokens76504176528+130.7%———
Cost0.43531.3945+220.4%———
Cached vs Uncached Token Ratio10.21:119.48:1+90.8%———
Oracle L1: Mutation PolicyPASSPASS————
Oracle L2: AST InvariantsPASSPASS————
Oracle L3: Clean BuildPASSPASS————
Oracle L4: Verification TestPASSPASS————
Semantic Tool Invocation Verified (per run)N/APASS————
Baseline vs Semedit Agentic in Small Context
  • Vanilla (Baseline vs Semedit Agentic in Small Context) Edit: File pipeline/workflow.go modified (41 lines -> 41 lines)
  • Semedit MCP (Baseline vs Semedit Agentic in Small Context) Edit: File pipeline/workflow.go modified (41 lines -> 41 lines)
#VanillaSemedit MCP
1✓ ✓
/bin/zsh -lc "cat rename-plan.md && \
rg -n \"Processor|method\" --glob '*.go' ."
✓ ✓
/bin/zsh -lc "pwd && \
rg --files -g 'PROJECT_BRIEF.md' -g 'rename-plan.md' -g 'AGENTS.md' -g 'AGENTS.override.md' -g 'go.mod' -g '*.go' | head -80"
2✓ ✓
/bin/zsh -lc 'cat pipeline/workflow.go && \
cat pipeline/workflow_test.go && \
rg -n "LoadInput" .'
✓ ✓
/bin/zsh -lc 'cat rename-plan.md && \
git status --short && \
cat AGENTS.override.md'
3✓ ✓
/bin/zsh -lc "python3 -c 'from pathlib import Path; p=Path(\"pipeline/workflow.go\"); s=p.read_text(); s=s.replace(\"LoadInput\", \"ReadRequest\"); t=p.with_suffix(\".go.tmp\"); t.write_text(s); t.replace(p)' && \
go test ./..."
semedit/semantic_lookup (✓ ✓)
{
  "symbol": "LoadInput"
}
4✓ ✓
/bin/zsh -lc "python3 -c 'from pathlib import Path; p=Path(\"pipeline/workflow.go\"); s=p.read_text(); s=s.replace(\"CheckInput\", \"ValidateRequest\"); t=p.with_suffix(\".go.tmp\"); t.write_text(s); t.replace(p)' && \
go test ./..."
semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.LoadInput",
  "to": "ReadRequest"
}
5✓ ✓
/bin/zsh -lc "python3 -c 'from pathlib import Path; p=Path(\"pipeline/workflow.go\"); s=p.read_text().replace(\"NormalizeValue\", \"CanonicalizeValue\").replace(\"MapFields\", \"ProjectFields\"); t=p.with_suffix(\".go.tmp\"); t.write_text(s); t.replace(p)' && \
go test ./..."
✓ ✓
/bin/zsh -lc 'git diff -- pipeline/workflow.go rename-plan.md go.mod && \
go test ./...'
6✓ ✓
/bin/zsh -lc "python3 -c 'from pathlib import Path; p=Path(\"pipeline/workflow.go\"); s=p.read_text(); names={\"RouteValue\":\"DispatchValue\",\"StampEvent\":\"AnnotateEvent\",\"CountItems\":\"TallyItems\",\"MergeParts\":\"CombineParts\"};
for old,new in names.items(): s=s.replace(old,new)
t=p.with_suffix(\".go.tmp\"); t.write_text(s); t.replace(p)' && \
go test ./..."
✓ ✓
/bin/zsh -lc "sed -n '1,120p' pipeline/workflow.go && \
git status --short -- pipeline/workflow.go rename-plan.md go.mod"
7✓ ✓
/bin/zsh -lc "python3 -c 'from pathlib import Path; p=Path(\"pipeline/workflow.go\"); s=p.read_text(); names={\"FilterNoise\":\"PruneNoise\",\"SortRecords\":\"OrderRecords\",\"EncodePayload\":\"MarshalPayload\",\"DecodeReply\":\"ParseReply\",\"OpenChannel\":\"ConnectChannel\",\"CloseChannel\":\"ReleaseChannel\",\"FlushBuffer\":\"DrainBuffer\",\"SaveResult\":\"PersistResult\"};
for old,new in names.items(): s=s.replace(old,new)
t=p.with_suffix(\".go.tmp\"); t.write_text(s); t.replace(p)' && \
go test ./..."
semedit/semantic_lookup (✓ ✓)
{
  "symbol": "CheckInput"
}
8—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.CheckInput",
  "to": "ValidateRequest"
}
9—✓ ✓
/bin/zsh -lc 'git diff -- pipeline/workflow.go rename-plan.md go.mod && \
go test ./...'
10—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "NormalizeValue"
}
11—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.NormalizeValue",
  "to": "CanonicalizeValue"
}
12—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "MapFields"
}
13—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.MapFields",
  "to": "ProjectFields"
}
14—✓ ✓
/bin/zsh -lc 'git diff -- pipeline/workflow.go rename-plan.md go.mod && \
go test ./...'
15—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "RouteValue"
}
16—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.RouteValue",
  "to": "DispatchValue"
}
17—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "StampEvent"
}
18—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.StampEvent",
  "to": "AnnotateEvent"
}
19—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "CountItems"
}
20—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.CountItems",
  "to": "TallyItems"
}
21—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "MergeParts"
}
22—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.MergeParts",
  "to": "CombineParts"
}
23—✓ ✓
/bin/zsh -lc 'git diff -- pipeline/workflow.go rename-plan.md go.mod && \
go test ./...'
24—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "FilterNoise"
}
25—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.FilterNoise",
  "to": "PruneNoise"
}
26—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "SortRecords"
}
27—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.SortRecords",
  "to": "OrderRecords"
}
28—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "EncodePayload"
}
29—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.EncodePayload",
  "to": "MarshalPayload"
}
30—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "DecodeReply"
}
31—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.DecodeReply",
  "to": "ParseReply"
}
32—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "OpenChannel"
}
33—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.OpenChannel",
  "to": "ConnectChannel"
}
34—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "CloseChannel"
}
35—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.CloseChannel",
  "to": "ReleaseChannel"
}
36—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "FlushBuffer"
}
37—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.FlushBuffer",
  "to": "DrainBuffer"
}
38—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "SaveResult"
}
39—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.SaveResult",
  "to": "PersistResult"
}
40—✓ ✓
/bin/zsh -lc 'git diff -- pipeline/workflow.go rename-plan.md go.mod && \
go test ./...'
Baseline vs Semedit Agentic in Large Context
#VanillaSemedit MCP
1not publishednot published

default prompt · prescriptive MCP instructions · write semedit restriction

SettingValue
Test casetask-13-rename-followup-scale
Targetcodex/gpt-6-luna/medium
Prompt variantdefault
MCP server instructionsprescriptive
Semedit arm restrictionwrite
Fixturetestdata/bench/task_13_rename_followup_scale.txtar

Vanilla LLM Prompt:

Do not edit tests. You are forbidden to modify protected files: “go.mod”, “rename-plan.md”.

Apply only row 1 of rename-plan.md. Rename that Processor method and update its call sites. Leave rows 2 through 16 unchanged. Run go test ./… before finishing. Do not use semantic editing MCP tools; use standard file editing. When done, output DONE.

Semedit MCP Prompt:

Do not edit tests. You are forbidden to modify protected files: “go.mod”, “rename-plan.md”.

Apply only row 1 of rename-plan.md. Rename that Processor method and update its call sites. Leave rows 2 through 16 unchanged. Run go test ./… before finishing. Use semedit semantic tools for supported source code modifications. Shell commands for builds and tests are allowed. When done, output DONE.

Initial Workspace State (Before Edit)
// Package pipeline provides independent processing stages for the rename scale benchmark.
package pipeline

type Processor struct{}

func (Processor) LoadInput(value int) int { return value + 1 }
func (Processor) CheckInput(value int) int { return value + 2 }
func (Processor) NormalizeValue(value int) int { return value + 3 }
func (Processor) MapFields(value int) int { return value + 4 }
func (Processor) RouteValue(value int) int { return value + 5 }
func (Processor) StampEvent(value int) int { return value + 6 }
func (Processor) CountItems(value int) int { return value + 7 }
func (Processor) MergeParts(value int) int { return value + 8 }
func (Processor) FilterNoise(value int) int { return value + 9 }
func (Processor) SortRecords(value int) int { return value + 10 }
func (Processor) EncodePayload(value int) int { return value + 11 }
func (Processor) DecodeReply(value int) int { return value + 12 }
func (Processor) OpenChannel(value int) int { return value + 13 }
func (Processor) CloseChannel(value int) int { return value + 14 }
func (Processor) FlushBuffer(value int) int { return value + 15 }
func (Processor) SaveResult(value int) int { return value + 16 }

func Run(processor Processor, value int) int {
	value = processor.LoadInput(value)
	value = processor.CheckInput(value)
	value = processor.NormalizeValue(value)
	value = processor.MapFields(value)
	value = processor.RouteValue(value)
	value = processor.StampEvent(value)
	value = processor.CountItems(value)
	value = processor.MergeParts(value)
	value = processor.FilterNoise(value)
	value = processor.SortRecords(value)
	value = processor.EncodePayload(value)
	value = processor.DecodeReply(value)
	value = processor.OpenChannel(value)
	value = processor.CloseChannel(value)
	value = processor.FlushBuffer(value)
	value = processor.SaveResult(value)
	return value
}
MetricVanilla (Small)MCP (Small)Δ (Small)Vanilla (Large)MCP (Large)Δ (Large)
Wall-Clock Latency106.41s279.25s+162.4%———
Process Start → First Event0.83s0.13s————
First Event → First Tool Call6.00s4.75s————
MCP Initialize → First Semantic Call——————
MCP Server Start → Initialize——————
Top-Level User Turns550%———
Internal Tool Cycles1851+183.3%———
Initial Load / Discovery Turns00————
MCP Discovery / Schema Turns00————
Tool Invocations (per run)1851+183.3%———
Output Tokens89506006-32.9%———
Reasoning / Thinking Tokens1222950-22.3%———
Total Input Tokens17236532918419+69.3%———
Cached Input Tokens16130562734592+69.5%———
Uncached Input Tokens110597183827+66.2%———
Cost0.80691.2302+52.5%———
Cached vs Uncached Token Ratio14.58:114.88:1+2.0%———
Oracle L1: Mutation PolicyPASSPASS————
Oracle L2: AST InvariantsPASSPASS————
Oracle L3: Clean BuildPASSPASS————
Oracle L4: Verification TestPASSPASS————
Semantic Tool Invocation Verified (per run)N/APASS————
Baseline vs Semedit Agentic in Small Context
  • Vanilla (Baseline vs Semedit Agentic in Small Context) Edit: File pipeline/workflow.go modified (41 lines -> 41 lines)
  • Semedit MCP (Baseline vs Semedit Agentic in Small Context) Edit: File pipeline/workflow.go modified (41 lines -> 41 lines)
#VanillaSemedit MCP
1✓ ✓
/bin/zsh -lc "cat rename-plan.md && \
rg --files -g '*.go'"
✓ ✓
/bin/zsh -lc "pwd && \
rg -n \"\" rename-plan.md && \
rg --files -g 'AGENTS.md' -g 'PROJECT_BRIEF.md' -g '*.go' | head -80"
2✓ ✓
/bin/zsh -lc "rg -n '\\bLoadInput\\b|\\b(ReadRequest)\\b' . --glob '"'!rename-plan.md'"' --glob '"'!go.mod'"'"
semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.LoadInput"
}
3✓ ✓
/bin/zsh -lc "python3 -c 'from pathlib import Path; p=Path(\"pipeline/workflow.go\"); s=p.read_text(); old=s; s=s.replace(\"LoadInput\", \"ReadRequest\"); assert s "'!= old and old.count("LoadInput") == 2; p.write_text(s)'"'"
semedit/semantic_find_references (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.LoadInput"
}
4✓ ✓
/bin/zsh -lc 'go test ./...'
semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.LoadInput",
  "to": "ReadRequest"
}
5✓ ✓
/bin/zsh -lc 'git diff -- pipeline/workflow.go && \
git status --short'
✓ ✓
/bin/zsh -lc 'git diff -- pipeline/workflow.go pipeline/workflow_test.go rename-plan.md && \
go test ./...'
6✓ ✓
/bin/zsh -lc "sed -n '1,35p' pipeline/workflow.go && \
git status --short --untracked-files=all -- pipeline/workflow.go pipeline/workflow_test.go go.mod rename-plan.md && \
rg -n '\\bLoadInput\\b|\\bReadRequest\\b' pipeline"
semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.CheckInput"
}
7✓ ✓
/bin/zsh -lc "rg -n '\\bCheckInput\\b|\\bValidateRequest\\b' . --glob '"'!rename-plan.md'"' --glob '"'!go.mod'"' && \
sed -n '1,50p' pipeline/workflow.go"
semedit/semantic_find_references (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.CheckInput"
}
8✓ ✓
/bin/zsh -lc "python3 -c 'from pathlib import Path; p=Path(\"pipeline/workflow.go\"); s=p.read_text(); assert s.count(\"CheckInput\") == 2; p.write_text(s.replace(\"CheckInput\", \"ValidateRequest\"))'"
semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.CheckInput",
  "to": "ValidateRequest"
}
9✓ ✓
/bin/zsh -lc 'go test ./...'
✓ ✓
/bin/zsh -lc 'git diff -- pipeline/workflow.go pipeline/workflow_test.go rename-plan.md && \
go test ./...'
10✓ ✓
/bin/zsh -lc "rg -n '\\b(NormalizeValue|CanonicalizeValue|MapFields|ProjectFields)\\b' . --glob '"'!rename-plan.md'"' --glob '"'!go.mod'"'"
semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.NormalizeValue"
}
11✓ ✓
/bin/zsh -lc "python3 -c 'from pathlib import Path; p=Path(\"pipeline/workflow.go\"); s=p.read_text(); assert s.count(\"NormalizeValue\") == 2 and s.count(\"MapFields\") == 2; s=s.replace(\"NormalizeValue\", \"CanonicalizeValue\").replace(\"MapFields\", \"ProjectFields\"); p.write_text(s)'"
semedit/semantic_find_references (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.NormalizeValue"
}
12✓ ✓
/bin/zsh -lc 'go test ./...'
semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.NormalizeValue",
  "to": "CanonicalizeValue"
}
13✓ ✓
/bin/zsh -lc "rg -n '\\b(RouteValue|DispatchValue|StampEvent|AnnotateEvent|CountItems|TallyItems|MergeParts|CombineParts)\\b' . --glob '"'!rename-plan.md'"' --glob '"'!go.mod'"'"
semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.MapFields"
}
14✓ ✓
/bin/zsh -lc "python3 -c 'from pathlib import Path; p=Path(\"pipeline/workflow.go\"); s=p.read_text(); pairs=((\"RouteValue\",\"DispatchValue\"),(\"StampEvent\",\"AnnotateEvent\"),(\"CountItems\",\"TallyItems\"),(\"MergeParts\",\"CombineParts\")); assert all(s.count(a)==2 for a,b in pairs); [None for a,b in pairs];
for a,b in pairs: s=s.replace(a,b)
p.write_text(s)'"
semedit/semantic_find_references (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.MapFields"
}
15✓ ✓
/bin/zsh -lc 'go test ./...'
semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.MapFields",
  "to": "ProjectFields"
}
16✓ ✓
/bin/zsh -lc "cat rename-plan.md && \
rg -n '\\b(FilterNoise|PruneNoise|SortRecords|OrderRecords|EncodePayload|MarshalPayload|DecodeReply|ParseReply|OpenChannel|ConnectChannel|CloseChannel|ReleaseChannel|FlushBuffer|DrainBuffer|SaveResult|PersistResult)\\b' . --glob '"'!rename-plan.md'"' --glob '"'!go.mod'"'"
✓ ✓
/bin/zsh -lc 'git diff -- pipeline/workflow.go pipeline/workflow_test.go rename-plan.md && \
go test ./...'
17✓ ✓
/bin/zsh -lc "python3 -c 'from pathlib import Path; p=Path(\"pipeline/workflow.go\"); s=p.read_text(); pairs=((\"FilterNoise\",\"PruneNoise\"),(\"SortRecords\",\"OrderRecords\"),(\"EncodePayload\",\"MarshalPayload\"),(\"DecodeReply\",\"ParseReply\"),(\"OpenChannel\",\"ConnectChannel\"),(\"CloseChannel\",\"ReleaseChannel\"),(\"FlushBuffer\",\"DrainBuffer\"),(\"SaveResult\",\"PersistResult\")); assert all(s.count(a)==2 for a,b in pairs);
for a,b in pairs: s=s.replace(a,b)
p.write_text(s)'"
semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.RouteValue"
}
18✓ ✓
/bin/zsh -lc 'go test ./...'
semedit/semantic_find_references (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.RouteValue"
}
19—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.RouteValue",
  "to": "DispatchValue"
}
20—semedit/semantic_find_references (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.StampEvent"
}
21—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.StampEvent",
  "to": "AnnotateEvent"
}
22—semedit/semantic_find_references (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.CountItems"
}
23—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.CountItems",
  "to": "TallyItems"
}
24—semedit/semantic_find_references (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.MergeParts"
}
25—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.MergeParts",
  "to": "CombineParts"
}
26—✓ ✓
/bin/zsh -lc 'git diff -- pipeline/workflow.go pipeline/workflow_test.go rename-plan.md && \
go test ./...'
27—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.FilterNoise"
}
28—semedit/semantic_find_references (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.FilterNoise"
}
29—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.FilterNoise",
  "to": "PruneNoise"
}
30—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.SortRecords"
}
31—semedit/semantic_find_references (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.SortRecords"
}
32—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.SortRecords",
  "to": "OrderRecords"
}
33—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.EncodePayload"
}
34—semedit/semantic_find_references (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.EncodePayload"
}
35—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.EncodePayload",
  "to": "MarshalPayload"
}
36—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.DecodeReply"
}
37—semedit/semantic_find_references (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.DecodeReply"
}
38—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.DecodeReply",
  "to": "ParseReply"
}
39—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.OpenChannel"
}
40—semedit/semantic_find_references (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.OpenChannel"
}
41—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.OpenChannel",
  "to": "ConnectChannel"
}
42—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.CloseChannel"
}
43—semedit/semantic_find_references (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.CloseChannel"
}
44—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.CloseChannel",
  "to": "ReleaseChannel"
}
45—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.FlushBuffer"
}
46—semedit/semantic_find_references (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.FlushBuffer"
}
47—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.FlushBuffer",
  "to": "DrainBuffer"
}
48—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.SaveResult"
}
49—semedit/semantic_find_references (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.SaveResult"
}
50—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.SaveResult",
  "to": "PersistResult"
}
51—✓ ✓
/bin/zsh -lc 'git diff -- pipeline/workflow.go pipeline/workflow_test.go rename-plan.md && \
go test ./...'
Baseline vs Semedit Agentic in Large Context
#VanillaSemedit MCP
1not publishednot published

default prompt · prescriptive MCP instructions · write semedit restriction

SettingValue
Test casetask-13-rename-followup-scale
Targetcodex/gpt-6-luna/medium
Prompt variantdefault
MCP server instructionsprescriptive
Semedit arm restrictionwrite
Fixturetestdata/bench/task_13_rename_followup_scale.txtar

Vanilla LLM Prompt:

Do not edit tests. You are forbidden to modify protected files: “go.mod”, “rename-plan.md”.

Apply only row 1 of rename-plan.md. Rename that Processor method and update its call sites. Leave rows 2 through 16 unchanged. Run go test ./… before finishing. Do not use semantic editing MCP tools; use standard file editing. When done, output DONE.

Semedit MCP Prompt:

Do not edit tests. You are forbidden to modify protected files: “go.mod”, “rename-plan.md”.

Apply only row 1 of rename-plan.md. Rename that Processor method and update its call sites. Leave rows 2 through 16 unchanged. Run go test ./… before finishing. Use semedit semantic tools for supported source code modifications. Shell commands for builds and tests are allowed. When done, output DONE.

Initial Workspace State (Before Edit)
// Package pipeline provides independent processing stages for the rename scale benchmark.
package pipeline

type Processor struct{}

func (Processor) LoadInput(value int) int { return value + 1 }
func (Processor) CheckInput(value int) int { return value + 2 }
func (Processor) NormalizeValue(value int) int { return value + 3 }
func (Processor) MapFields(value int) int { return value + 4 }
func (Processor) RouteValue(value int) int { return value + 5 }
func (Processor) StampEvent(value int) int { return value + 6 }
func (Processor) CountItems(value int) int { return value + 7 }
func (Processor) MergeParts(value int) int { return value + 8 }
func (Processor) FilterNoise(value int) int { return value + 9 }
func (Processor) SortRecords(value int) int { return value + 10 }
func (Processor) EncodePayload(value int) int { return value + 11 }
func (Processor) DecodeReply(value int) int { return value + 12 }
func (Processor) OpenChannel(value int) int { return value + 13 }
func (Processor) CloseChannel(value int) int { return value + 14 }
func (Processor) FlushBuffer(value int) int { return value + 15 }
func (Processor) SaveResult(value int) int { return value + 16 }

func Run(processor Processor, value int) int {
	value = processor.LoadInput(value)
	value = processor.CheckInput(value)
	value = processor.NormalizeValue(value)
	value = processor.MapFields(value)
	value = processor.RouteValue(value)
	value = processor.StampEvent(value)
	value = processor.CountItems(value)
	value = processor.MergeParts(value)
	value = processor.FilterNoise(value)
	value = processor.SortRecords(value)
	value = processor.EncodePayload(value)
	value = processor.DecodeReply(value)
	value = processor.OpenChannel(value)
	value = processor.CloseChannel(value)
	value = processor.FlushBuffer(value)
	value = processor.SaveResult(value)
	return value
}
MetricVanilla (Small)MCP (Small)Δ (Small)Vanilla (Large)MCP (Large)Δ (Large)
Wall-Clock Latency66.90s226.08s+237.9%———
Process Start → First Event0.13s0.14s————
First Event → First Tool Call7.19s5.62s————
MCP Initialize → First Semantic Call——————
MCP Server Start → Initialize——————
Top-Level User Turns550%———
Internal Tool Cycles1338+192.3%———
Initial Load / Discovery Turns30-100.0%———
MCP Discovery / Schema Turns00————
Tool Invocations (per run)1338+192.3%———
Output Tokens41383551-14.2%———
Reasoning / Thinking Tokens2750-100.0%———
Total Input Tokens12142861722184+41.8%———
Cached Input Tokens11335681609984+42.0%———
Uncached Input Tokens80718112200+39.0%———
Cost0.54030.7274+34.6%———
Cached vs Uncached Token Ratio14.04:114.35:1+2.2%———
Oracle L1: Mutation PolicyPASSPASS————
Oracle L2: AST InvariantsPASSPASS————
Oracle L3: Clean BuildPASSPASS————
Oracle L4: Verification TestPASSPASS————
Semantic Tool Invocation Verified (per run)N/APASS————
Baseline vs Semedit Agentic in Small Context
  • Vanilla (Baseline vs Semedit Agentic in Small Context) Edit: File pipeline/workflow.go modified (41 lines -> 41 lines)
  • Semedit MCP (Baseline vs Semedit Agentic in Small Context) Edit: File pipeline/workflow.go modified (41 lines -> 41 lines)
#VanillaSemedit MCP
1✓ ✓
/bin/zsh -lc "pwd && \
rg --files -g 'AGENTS*' -g 'PROJECT_BRIEF.md' -g 'rename-plan.md' -g '*.go' | head -80"
✓ ✓
/bin/zsh -lc 'cat rename-plan.md'
2✓ ✓
/bin/zsh -lc 'cat rename-plan.md && \
cat AGENTS.override.md && \
cat pipeline/workflow.go'
semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.LoadInput"
}
3✓ ✓
/bin/zsh -lc "rg -n '\\bLoadInput\\b' ."
semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.LoadInput",
  "to": "ReadRequest"
}
4✓ ✓
/bin/zsh -lc "python3 -c 'from pathlib import Path; p=Path(\"pipeline/workflow.go\"); s=p.read_text(); s=s.replace(\"LoadInput\", \"ReadRequest\"); p.write_text(s)' && \
git diff -- pipeline/workflow.go rename-plan.md go.mod"
✓ ✓
/bin/zsh -lc 'go test ./...'
5✓ ✓
/bin/zsh -lc "rg -n '\\b(ReadRequest|LoadInput)\\b' pipeline/workflow.go && \
go test ./..."
semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.CheckInput"
}
6✓ ✓
/bin/zsh -lc "rg -n '\\b(CheckInput|ValidateRequest)\\b' ."
semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.CheckInput",
  "to": "ValidateRequest"
}
7✓ ✓
/bin/zsh -lc "python3 -c 'from pathlib import Path; p=Path(\"pipeline/workflow.go\"); s=p.read_text(); s=s.replace(\"CheckInput\", \"ValidateRequest\"); p.write_text(s)' && \
go test ./..."
✓ ✓
/bin/zsh -lc 'go test ./...'
8✓ ✓
/bin/zsh -lc "rg -n '\\b(NormalizeValue|MapFields|CanonicalizeValue|ProjectFields)\\b' ."
semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.NormalizeValue"
}
9✓ ✓
/bin/zsh -lc "python3 -c 'from pathlib import Path; p=Path(\"pipeline/workflow.go\"); s=p.read_text(); s=s.replace(\"NormalizeValue\", \"CanonicalizeValue\").replace(\"MapFields\", \"ProjectFields\"); p.write_text(s)' && \
go test ./..."
semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.MapFields"
}
10✓ ✓
/bin/zsh -lc "rg -n '\\b(RouteValue|StampEvent|CountItems|MergeParts|DispatchValue|AnnotateEvent|TallyItems|CombineParts)\\b' ."
semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.NormalizeValue",
  "to": "CanonicalizeValue"
}
11✓ ✓
/bin/zsh -lc "python3 -c 'from pathlib import Path; p=Path(\"pipeline/workflow.go\"); s=p.read_text(); pairs=((\"RouteValue\", \"DispatchValue\"), (\"StampEvent\", \"AnnotateEvent\"), (\"CountItems\", \"TallyItems\"), (\"MergeParts\", \"CombineParts\")); [None for old, new in pairs if not s.__contains__(old)];
for old, new in pairs: s=s.replace(old, new)
p.write_text(s)' && \
go test ./..."
semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.MapFields",
  "to": "ProjectFields"
}
12✓ ✓
/bin/zsh -lc "rg -n '\\b(FilterNoise|SortRecords|EncodePayload|DecodeReply|OpenChannel|CloseChannel|FlushBuffer|SaveResult|PruneNoise|OrderRecords|MarshalPayload|ParseReply|ConnectChannel|ReleaseChannel|DrainBuffer|PersistResult)\\b' ."
✓ ✓
/bin/zsh -lc 'go test ./...'
13✓ ✓
/bin/zsh -lc "python3 -c 'from pathlib import Path; p=Path(\"pipeline/workflow.go\"); s=p.read_text(); pairs=((\"FilterNoise\", \"PruneNoise\"), (\"SortRecords\", \"OrderRecords\"), (\"EncodePayload\", \"MarshalPayload\"), (\"DecodeReply\", \"ParseReply\"), (\"OpenChannel\", \"ConnectChannel\"), (\"CloseChannel\", \"ReleaseChannel\"), (\"FlushBuffer\", \"DrainBuffer\"), (\"SaveResult\", \"PersistResult\"));
for old, new in pairs: s=s.replace(old, new)
p.write_text(s)' && \
go test ./..."
semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.RouteValue"
}
14—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.StampEvent"
}
15—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.CountItems"
}
16—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.MergeParts"
}
17—semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.RouteValue",
  "to": "DispatchValue"
}
18—semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.StampEvent",
  "to": "AnnotateEvent"
}
19—semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.CountItems",
  "to": "TallyItems"
}
20—semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.MergeParts",
  "to": "CombineParts"
}
21—✓ ✓
/bin/zsh -lc 'go test ./...'
22—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.FilterNoise"
}
23—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.SortRecords"
}
24—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.EncodePayload"
}
25—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.DecodeReply"
}
26—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.OpenChannel"
}
27—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.CloseChannel"
}
28—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.FlushBuffer"
}
29—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.SaveResult"
}
30—semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.FilterNoise",
  "to": "PruneNoise"
}
31—semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.SortRecords",
  "to": "OrderRecords"
}
32—semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.EncodePayload",
  "to": "MarshalPayload"
}
33—semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.DecodeReply",
  "to": "ParseReply"
}
34—semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.OpenChannel",
  "to": "ConnectChannel"
}
35—semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.CloseChannel",
  "to": "ReleaseChannel"
}
36—semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.FlushBuffer",
  "to": "DrainBuffer"
}
37—semedit/semantic_rename (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.SaveResult",
  "to": "PersistResult"
}
38—✓ ✓
/bin/zsh -lc 'go test ./...'
Baseline vs Semedit Agentic in Large Context
#VanillaSemedit MCP
1not publishednot published

default prompt · prescriptive MCP instructions · write semedit restriction

SettingValue
Test casetask-13-rename-followup-scale
Targetcodex/gpt-6-luna/medium
Prompt variantdefault
MCP server instructionsprescriptive
Semedit arm restrictionwrite
Fixturetestdata/bench/task_13_rename_followup_scale.txtar

Vanilla LLM Prompt:

Do not edit tests. You are forbidden to modify protected files: “go.mod”, “rename-plan.md”.

Apply only row 1 of rename-plan.md. Rename that Processor method and update its call sites. Leave rows 2 through 16 unchanged. Run go test ./… before finishing. Do not use semantic editing MCP tools; use standard file editing. When done, output DONE.

Semedit MCP Prompt:

Do not edit tests. You are forbidden to modify protected files: “go.mod”, “rename-plan.md”.

Apply only row 1 of rename-plan.md. Rename that Processor method and update its call sites. Leave rows 2 through 16 unchanged. Run go test ./… before finishing. Use semedit semantic tools for supported source code modifications. Shell commands for builds and tests are allowed. When done, output DONE.

Initial Workspace State (Before Edit)
// Package pipeline provides independent processing stages for the rename scale benchmark.
package pipeline

type Processor struct{}

func (Processor) LoadInput(value int) int { return value + 1 }
func (Processor) CheckInput(value int) int { return value + 2 }
func (Processor) NormalizeValue(value int) int { return value + 3 }
func (Processor) MapFields(value int) int { return value + 4 }
func (Processor) RouteValue(value int) int { return value + 5 }
func (Processor) StampEvent(value int) int { return value + 6 }
func (Processor) CountItems(value int) int { return value + 7 }
func (Processor) MergeParts(value int) int { return value + 8 }
func (Processor) FilterNoise(value int) int { return value + 9 }
func (Processor) SortRecords(value int) int { return value + 10 }
func (Processor) EncodePayload(value int) int { return value + 11 }
func (Processor) DecodeReply(value int) int { return value + 12 }
func (Processor) OpenChannel(value int) int { return value + 13 }
func (Processor) CloseChannel(value int) int { return value + 14 }
func (Processor) FlushBuffer(value int) int { return value + 15 }
func (Processor) SaveResult(value int) int { return value + 16 }

func Run(processor Processor, value int) int {
	value = processor.LoadInput(value)
	value = processor.CheckInput(value)
	value = processor.NormalizeValue(value)
	value = processor.MapFields(value)
	value = processor.RouteValue(value)
	value = processor.StampEvent(value)
	value = processor.CountItems(value)
	value = processor.MergeParts(value)
	value = processor.FilterNoise(value)
	value = processor.SortRecords(value)
	value = processor.EncodePayload(value)
	value = processor.DecodeReply(value)
	value = processor.OpenChannel(value)
	value = processor.CloseChannel(value)
	value = processor.FlushBuffer(value)
	value = processor.SaveResult(value)
	return value
}
MetricVanilla (Small)MCP (Small)Δ (Small)Vanilla (Large)MCP (Large)Δ (Large)
Wall-Clock Latency80.31s257.00s+220.0%———
Process Start → First Event0.14s0.13s————
First Event → First Tool Call4.37s9.96s————
MCP Initialize → First Semantic Call——————
MCP Server Start → Initialize——————
Top-Level User Turns550%———
Internal Tool Cycles1239+225.0%———
Initial Load / Discovery Turns30-100.0%———
MCP Discovery / Schema Turns00————
Tool Invocations (per run)1239+225.0%———
Output Tokens61885486-11.3%———
Reasoning / Thinking Tokens8440-100.0%———
Total Input Tokens11553162364213+104.6%———
Cached Input Tokens10344962194432+112.1%———
Uncached Input Tokens120820169781+40.5%———
Cost0.64861.0416+60.6%———
Cached vs Uncached Token Ratio8.56:112.93:1+51.0%———
Oracle L1: Mutation PolicyPASSPASS————
Oracle L2: AST InvariantsPASSPASS————
Oracle L3: Clean BuildPASSPASS————
Oracle L4: Verification TestPASSPASS————
Semantic Tool Invocation Verified (per run)N/APASS————
Baseline vs Semedit Agentic in Small Context
  • Vanilla (Baseline vs Semedit Agentic in Small Context) Edit: File pipeline/workflow.go modified (41 lines -> 41 lines)
  • Semedit MCP (Baseline vs Semedit Agentic in Small Context) Edit: File pipeline/workflow.go modified (41 lines -> 41 lines)
#VanillaSemedit MCP
1✓ ✓
/bin/zsh -lc "pwd && \
git status --short && \
cat rename-plan.md && \
rg -n \"Processor|method\" --glob '*.go' ."
✓ ✓
/bin/zsh -lc "pwd && \
rg --files -g 'AGENTS.md' -g 'PROJECT_BRIEF.md' -g 'rename-plan.md' -g 'go.mod' -g '*.go' | head -100"
2✓ ✓
/bin/zsh -lc "cat pipeline/workflow.go && \
rg -n \"\\.LoadInput\\(|LoadInput\\(\" --glob '"'!rename-plan.md'"' ."
✓ ✓
/bin/zsh -lc 'cat rename-plan.md'
3✓ ✓
/bin/zsh -lc "python3 -c 'from pathlib import Path; import os, tempfile; p=Path(\"pipeline/workflow.go\"); s=p.read_text(); old=s; s=s.replace(\"LoadInput\", \"ReadRequest\"); assert s "'!= old and old.count("LoadInput") == 2; fd, name=tempfile.mkstemp(dir=p.parent, prefix=".workflow."); f=os.fdopen(fd,"w"); f.write(s); f.flush(); os.fsync(f.fileno()); f.close(); os.replace(name,p)'"' && \
go test ./..."
semedit/semantic_lookup (✓ ✓)
{
  "symbol": "LoadInput"
}
4✓ ✓
/bin/zsh -lc 'git diff -- pipeline/workflow.go && \
git status --short -- pipeline/workflow.go rename-plan.md go.mod'
semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.LoadInput",
  "to": "ReadRequest"
}
5✓ ✓
/bin/zsh -lc "rg -n \"LoadInput|ReadRequest|CheckInput|ValidateRequest\" pipeline --glob '*.go' && \
git status --short -- pipeline/workflow.go rename-plan.md go.mod"
✓ ✓
/bin/zsh -lc 'go test ./...'
6✓ ✓
/bin/zsh -lc "python3 -c 'from pathlib import Path; import os, tempfile; p=Path(\"pipeline/workflow.go\"); s=p.read_text(); old=s; s=s.replace(\"CheckInput\", \"ValidateRequest\"); assert s "'!= old and old.count("CheckInput") == 2; fd, name=tempfile.mkstemp(dir=p.parent, prefix=".workflow."); f=os.fdopen(fd,"w"); f.write(s); f.flush(); os.fsync(f.fileno()); f.close(); os.replace(name,p)'"' && \
go test ./..."
semedit/semantic_lookup (✓ ✓)
{
  "symbol": "CheckInput"
}
7✓ ✓
/bin/zsh -lc "rg -n \"NormalizeValue|CanonicalizeValue|MapFields|ProjectFields\" pipeline --glob '*.go'"
semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.CheckInput",
  "to": "ValidateRequest"
}
8✓ ✓
/bin/zsh -lc "python3 -c 'from pathlib import Path; import os, tempfile; p=Path(\"pipeline/workflow.go\"); s=p.read_text(); old=s; s=s.replace(\"NormalizeValue\", \"CanonicalizeValue\").replace(\"MapFields\", \"ProjectFields\"); assert s "'!= old and old.count("NormalizeValue") == 2 and old.count("MapFields") == 2; fd, name=tempfile.mkstemp(dir=p.parent, prefix=".workflow."); f=os.fdopen(fd,"w"); f.write(s); f.flush(); os.fsync(f.fileno()); f.close(); os.replace(name,p)'"' && \
go test ./..."
✓ ✓
/bin/zsh -lc 'go test ./...'
9✓ ✓
/bin/zsh -lc "rg -n \"RouteValue|StampEvent|CountItems|MergeParts\" pipeline --glob '*.go'"
semedit/semantic_lookup (✓ ✓)
{
  "symbol": "NormalizeValue"
}
10✓ ✓
/bin/zsh -lc "python3 -c 'from pathlib import Path; import os, tempfile; p=Path(\"pipeline/workflow.go\"); s=p.read_text(); old=s; pairs=((\"RouteValue\",\"DispatchValue\"),(\"StampEvent\",\"AnnotateEvent\"),(\"CountItems\",\"TallyItems\"),(\"MergeParts\",\"CombineParts\")); counts={a:old.count(a) for a,b in pairs}; assert all(n == 2 for n in counts.values());
for a,b in pairs: s=s.replace(a,b)
assert s "'!= old; fd, name=tempfile.mkstemp(dir=p.parent, prefix=".workflow."); f=os.fdopen(fd,"w"); f.write(s); f.flush(); os.fsync(f.fileno()); f.close(); os.replace(name,p)'"' && \
go test ./..."
semedit/semantic_lookup (✓ ✓)
{
  "symbol": "MapFields"
}
11✓ ✓
/bin/zsh -lc "rg -n \"FilterNoise|SortRecords|EncodePayload|DecodeReply|OpenChannel|CloseChannel|FlushBuffer|SaveResult\" pipeline --glob '*.go'"
semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.NormalizeValue",
  "to": "CanonicalizeValue"
}
12✓ ✓
/bin/zsh -lc "python3 -c 'from pathlib import Path; import os, tempfile; p=Path(\"pipeline/workflow.go\"); s=p.read_text(); old=s; pairs=((\"FilterNoise\",\"PruneNoise\"),(\"SortRecords\",\"OrderRecords\"),(\"EncodePayload\",\"MarshalPayload\"),(\"DecodeReply\",\"ParseReply\"),(\"OpenChannel\",\"ConnectChannel\"),(\"CloseChannel\",\"ReleaseChannel\"),(\"FlushBuffer\",\"DrainBuffer\"),(\"SaveResult\",\"PersistResult\")); assert all(old.count(a) == 2 for a,b in pairs);
for a,b in pairs: s=s.replace(a,b)
assert s "'!= old; fd, name=tempfile.mkstemp(dir=p.parent, prefix=".workflow."); f=os.fdopen(fd,"w"); f.write(s); f.flush(); os.fsync(f.fileno()); f.close(); os.replace(name,p)'"' && \
go test ./..."
semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.MapFields",
  "to": "ProjectFields"
}
13—✓ ✓
/bin/zsh -lc 'go test ./...'
14—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "RouteValue"
}
15—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "StampEvent"
}
16—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "CountItems"
}
17—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "MergeParts"
}
18—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.RouteValue",
  "to": "DispatchValue"
}
19—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.StampEvent",
  "to": "AnnotateEvent"
}
20—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.CountItems",
  "to": "TallyItems"
}
21—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.MergeParts",
  "to": "CombineParts"
}
22—✓ ✓
/bin/zsh -lc 'go test ./...'
23—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "FilterNoise"
}
24—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "SortRecords"
}
25—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "EncodePayload"
}
26—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "DecodeReply"
}
27—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "OpenChannel"
}
28—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "CloseChannel"
}
29—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "FlushBuffer"
}
30—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "SaveResult"
}
31—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.FilterNoise",
  "to": "PruneNoise"
}
32—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.SortRecords",
  "to": "OrderRecords"
}
33—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.EncodePayload",
  "to": "MarshalPayload"
}
34—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.DecodeReply",
  "to": "ParseReply"
}
35—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.OpenChannel",
  "to": "ConnectChannel"
}
36—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.CloseChannel",
  "to": "ReleaseChannel"
}
37—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.FlushBuffer",
  "to": "DrainBuffer"
}
38—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.SaveResult",
  "to": "PersistResult"
}
39—✓ ✓
/bin/zsh -lc 'go test ./...'
Baseline vs Semedit Agentic in Large Context
#VanillaSemedit MCP
1not publishednot published

default prompt · prescriptive MCP instructions · write semedit restriction

SettingValue
Test casetask-13-rename-followup-scale
Targetcodex/gpt-6-luna/medium
Prompt variantdefault
MCP server instructionsprescriptive
Semedit arm restrictionwrite
Fixturetestdata/bench/task_13_rename_followup_scale.txtar

Vanilla LLM Prompt:

Do not edit tests. You are forbidden to modify protected files: “go.mod”, “rename-plan.md”.

Apply only row 1 of rename-plan.md. Rename that Processor method and update its call sites. Leave rows 2 through 16 unchanged. Run go test ./… before finishing. Do not use semantic editing MCP tools; use standard file editing. When done, output DONE.

Semedit MCP Prompt:

Do not edit tests. You are forbidden to modify protected files: “go.mod”, “rename-plan.md”.

Apply only row 1 of rename-plan.md. Rename that Processor method and update its call sites. Leave rows 2 through 16 unchanged. Run go test ./… before finishing. Use semedit semantic tools for supported source code modifications. Shell commands for builds and tests are allowed. When done, output DONE.

Initial Workspace State (Before Edit)
// Package pipeline provides independent processing stages for the rename scale benchmark.
package pipeline

type Processor struct{}

func (Processor) LoadInput(value int) int { return value + 1 }
func (Processor) CheckInput(value int) int { return value + 2 }
func (Processor) NormalizeValue(value int) int { return value + 3 }
func (Processor) MapFields(value int) int { return value + 4 }
func (Processor) RouteValue(value int) int { return value + 5 }
func (Processor) StampEvent(value int) int { return value + 6 }
func (Processor) CountItems(value int) int { return value + 7 }
func (Processor) MergeParts(value int) int { return value + 8 }
func (Processor) FilterNoise(value int) int { return value + 9 }
func (Processor) SortRecords(value int) int { return value + 10 }
func (Processor) EncodePayload(value int) int { return value + 11 }
func (Processor) DecodeReply(value int) int { return value + 12 }
func (Processor) OpenChannel(value int) int { return value + 13 }
func (Processor) CloseChannel(value int) int { return value + 14 }
func (Processor) FlushBuffer(value int) int { return value + 15 }
func (Processor) SaveResult(value int) int { return value + 16 }

func Run(processor Processor, value int) int {
	value = processor.LoadInput(value)
	value = processor.CheckInput(value)
	value = processor.NormalizeValue(value)
	value = processor.MapFields(value)
	value = processor.RouteValue(value)
	value = processor.StampEvent(value)
	value = processor.CountItems(value)
	value = processor.MergeParts(value)
	value = processor.FilterNoise(value)
	value = processor.SortRecords(value)
	value = processor.EncodePayload(value)
	value = processor.DecodeReply(value)
	value = processor.OpenChannel(value)
	value = processor.CloseChannel(value)
	value = processor.FlushBuffer(value)
	value = processor.SaveResult(value)
	return value
}

default prompt · prescriptive MCP instructions · write semedit restriction

SettingValue
Test casetask-13-rename-followup-scale
Targetcodex/gpt-6-luna/medium
Prompt variantdefault
MCP server instructionsprescriptive
Semedit arm restrictionwrite
Fixturetestdata/bench/task_13_rename_followup_scale.txtar

Vanilla LLM Prompt:

Do not edit tests. You are forbidden to modify protected files: “go.mod”, “rename-plan.md”.

Apply only row 1 of rename-plan.md. Rename that Processor method and update its call sites. Leave rows 2 through 16 unchanged. Run go test ./… before finishing. Do not use semantic editing MCP tools; use standard file editing. When done, output DONE.

Semedit MCP Prompt:

Do not edit tests. You are forbidden to modify protected files: “go.mod”, “rename-plan.md”.

Apply only row 1 of rename-plan.md. Rename that Processor method and update its call sites. Leave rows 2 through 16 unchanged. Run go test ./… before finishing. Use semedit semantic tools for supported source code modifications. Shell commands for builds and tests are allowed. When done, output DONE.

Initial Workspace State (Before Edit)
// Package pipeline provides independent processing stages for the rename scale benchmark.
package pipeline

type Processor struct{}

func (Processor) LoadInput(value int) int { return value + 1 }
func (Processor) CheckInput(value int) int { return value + 2 }
func (Processor) NormalizeValue(value int) int { return value + 3 }
func (Processor) MapFields(value int) int { return value + 4 }
func (Processor) RouteValue(value int) int { return value + 5 }
func (Processor) StampEvent(value int) int { return value + 6 }
func (Processor) CountItems(value int) int { return value + 7 }
func (Processor) MergeParts(value int) int { return value + 8 }
func (Processor) FilterNoise(value int) int { return value + 9 }
func (Processor) SortRecords(value int) int { return value + 10 }
func (Processor) EncodePayload(value int) int { return value + 11 }
func (Processor) DecodeReply(value int) int { return value + 12 }
func (Processor) OpenChannel(value int) int { return value + 13 }
func (Processor) CloseChannel(value int) int { return value + 14 }
func (Processor) FlushBuffer(value int) int { return value + 15 }
func (Processor) SaveResult(value int) int { return value + 16 }

func Run(processor Processor, value int) int {
	value = processor.LoadInput(value)
	value = processor.CheckInput(value)
	value = processor.NormalizeValue(value)
	value = processor.MapFields(value)
	value = processor.RouteValue(value)
	value = processor.StampEvent(value)
	value = processor.CountItems(value)
	value = processor.MergeParts(value)
	value = processor.FilterNoise(value)
	value = processor.SortRecords(value)
	value = processor.EncodePayload(value)
	value = processor.DecodeReply(value)
	value = processor.OpenChannel(value)
	value = processor.CloseChannel(value)
	value = processor.FlushBuffer(value)
	value = processor.SaveResult(value)
	return value
}
MetricVanilla (Small)MCP (Small)Δ (Small)Vanilla (Large)MCP (Large)Δ (Large)
Wall-Clock Latency53.84s230.48s+328.0%———
Process Start → First Event0.12s0.13s————
First Event → First Tool Call3.97s5.37s————
MCP Initialize → First Semantic Call——————
MCP Server Start → Initialize——————
Top-Level User Turns550%———
Internal Tool Cycles740+471.4%———
Initial Load / Discovery Turns00————
MCP Discovery / Schema Turns00————
Tool Invocations (per run)740+471.4%———
Output Tokens35185341+51.8%———
Reasoning / Thinking Tokens240231-3.8%———
Total Input Tokens8116652739774+237.5%———
Cached Input Tokens7485442586112+245.5%———
Uncached Input Tokens63121153662+143.4%———
Cost0.39191.1003+180.8%———
Cached vs Uncached Token Ratio11.86:116.83:1+41.9%———
Oracle L1: Mutation PolicyPASSPASS————
Oracle L2: AST InvariantsPASSPASS————
Oracle L3: Clean BuildPASSPASS————
Oracle L4: Verification TestPASSPASS————
Semantic Tool Invocation Verified (per run)N/APASS————
Baseline vs Semedit Agentic in Small Context
  • Vanilla (Baseline vs Semedit Agentic in Small Context) Edit: File pipeline/workflow.go modified (41 lines -> 41 lines)
  • Semedit MCP (Baseline vs Semedit Agentic in Small Context) Edit: File pipeline/workflow.go modified (41 lines -> 41 lines)
#VanillaSemedit MCP
1✓ ✓
/bin/zsh -lc "cat rename-plan.md && \
rg -n \"Processor|method\" --glob '*.go' ."
✓ ✓
/bin/zsh -lc "cat rename-plan.md && \
rg --files -g 'PROJECT_BRIEF.md' -g 'AGENTS.md' -g 'AGENTS.override.md'"
2✓ ✓
/bin/zsh -lc 'cat pipeline/workflow.go && \
cat pipeline/workflow_test.go && \
rg -n "LoadInput" .'
✓ ✓
/bin/zsh -lc "rg -n 'LoadInput|ReadRequest' --glob '*.go' --glob '"'!**/*_test.go'"'"
3✓ ✓
/bin/zsh -lc "python3 -c 'from pathlib import Path; import os, tempfile; p=Path(\"pipeline/workflow.go\"); s=p.read_text(); s=s.replace(\"LoadInput\", \"ReadRequest\"); fd, tmp=tempfile.mkstemp(dir=str(p.parent), prefix=\".workflow.\"); f=os.fdopen(fd,\"w\"); f.write(s); f.flush(); os.fsync(f.fileno()); f.close(); os.replace(tmp,p)' && \
go test ./..."
semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "LoadInput"
}
4✓ ✓
/bin/zsh -lc "python3 -c 'from pathlib import Path; import os, tempfile; p=Path(\"pipeline/workflow.go\"); s=p.read_text(); s=s.replace(\"CheckInput\", \"ValidateRequest\"); fd, tmp=tempfile.mkstemp(dir=str(p.parent), prefix=\".workflow.\"); f=os.fdopen(fd,\"w\"); f.write(s); f.flush(); os.fsync(f.fileno()); f.close(); os.replace(tmp,p)' && \
go test ./..."
semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.LoadInput",
  "to": "ReadRequest"
}
5✓ ✓
/bin/zsh -lc "python3 -c 'from pathlib import Path; import os, tempfile; p=Path(\"pipeline/workflow.go\"); s=p.read_text().replace(\"NormalizeValue\", \"CanonicalizeValue\").replace(\"MapFields\", \"ProjectFields\"); fd, tmp=tempfile.mkstemp(dir=str(p.parent), prefix=\".workflow.\"); f=os.fdopen(fd,\"w\"); f.write(s); f.flush(); os.fsync(f.fileno()); f.close(); os.replace(tmp,p)' && \
go test ./..."
✓ ✓
/bin/zsh -lc 'go test ./...'
6✓ ✓
/bin/zsh -lc "python3 -c 'from pathlib import Path; import os, tempfile; p=Path(\"pipeline/workflow.go\"); s=p.read_text().replace(\"RouteValue\", \"DispatchValue\").replace(\"StampEvent\", \"AnnotateEvent\").replace(\"CountItems\", \"TallyItems\").replace(\"MergeParts\", \"CombineParts\"); fd, tmp=tempfile.mkstemp(dir=str(p.parent), prefix=\".workflow.\"); f=os.fdopen(fd,\"w\"); f.write(s); f.flush(); os.fsync(f.fileno()); f.close(); os.replace(tmp,p)' && \
go test ./..."
semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "CheckInput"
}
7✓ ✓
/bin/zsh -lc "python3 -c 'from pathlib import Path; import os, tempfile; p=Path(\"pipeline/workflow.go\"); s=p.read_text(); pairs=[(\"FilterNoise\",\"PruneNoise\"),(\"SortRecords\",\"OrderRecords\"),(\"EncodePayload\",\"MarshalPayload\"),(\"DecodeReply\",\"ParseReply\"),(\"OpenChannel\",\"ConnectChannel\"),(\"CloseChannel\",\"ReleaseChannel\"),(\"FlushBuffer\",\"DrainBuffer\"),(\"SaveResult\",\"PersistResult\")];
for old,new in pairs: s=s.replace(old,new)
fd,tmp=tempfile.mkstemp(dir=str(p.parent),prefix=\".workflow.\"); f=os.fdopen(fd,\"w\"); f.write(s); f.flush(); os.fsync(f.fileno()); f.close(); os.replace(tmp,p)' && \
go test ./..."
semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.CheckInput",
  "to": "ValidateRequest"
}
8—✓ ✓
/bin/zsh -lc 'go test ./...'
9—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "NormalizeValue"
}
10—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.NormalizeValue",
  "to": "CanonicalizeValue"
}
11—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "MapFields"
}
12—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.MapFields",
  "to": "ProjectFields"
}
13—✓ ✓
/bin/zsh -lc 'go test ./...'
14—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "RouteValue"
}
15—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.RouteValue",
  "to": "DispatchValue"
}
16—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "StampEvent"
}
17—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.StampEvent",
  "to": "AnnotateEvent"
}
18—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "CountItems"
}
19—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.CountItems",
  "to": "TallyItems"
}
20—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "MergeParts"
}
21—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.MergeParts",
  "to": "CombineParts"
}
22—✓ ✓
/bin/zsh -lc 'go test ./...'
23—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "FilterNoise"
}
24—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "FilterNoise"
}
25—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.FilterNoise",
  "to": "PruneNoise"
}
26—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "SortRecords"
}
27—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.SortRecords",
  "to": "OrderRecords"
}
28—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "EncodePayload"
}
29—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.EncodePayload",
  "to": "MarshalPayload"
}
30—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "DecodeReply"
}
31—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.DecodeReply",
  "to": "ParseReply"
}
32—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "OpenChannel"
}
33—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.OpenChannel",
  "to": "ConnectChannel"
}
34—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "CloseChannel"
}
35—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.CloseChannel",
  "to": "ReleaseChannel"
}
36—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "FlushBuffer"
}
37—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.FlushBuffer",
  "to": "DrainBuffer"
}
38—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "SaveResult"
}
39—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.SaveResult",
  "to": "PersistResult"
}
40—✓ ✓
/bin/zsh -lc 'go test ./...'
Baseline vs Semedit Agentic in Large Context
#VanillaSemedit MCP
1not publishednot published

default prompt · prescriptive MCP instructions · write semedit restriction

SettingValue
Test casetask-13-rename-followup-scale
Targetcodex/gpt-6-luna/medium
Prompt variantdefault
MCP server instructionsprescriptive
Semedit arm restrictionwrite
Fixturetestdata/bench/task_13_rename_followup_scale.txtar

Vanilla LLM Prompt:

Do not edit tests. You are forbidden to modify protected files: “go.mod”, “rename-plan.md”.

Apply only row 1 of rename-plan.md. Rename that Processor method and update its call sites. Leave rows 2 through 16 unchanged. Run go test ./… before finishing. Do not use semantic editing MCP tools; use standard file editing. When done, output DONE.

Semedit MCP Prompt:

Do not edit tests. You are forbidden to modify protected files: “go.mod”, “rename-plan.md”.

Apply only row 1 of rename-plan.md. Rename that Processor method and update its call sites. Leave rows 2 through 16 unchanged. Run go test ./… before finishing. Use semedit semantic tools for supported source code modifications. Shell commands for builds and tests are allowed. When done, output DONE.

Initial Workspace State (Before Edit)
// Package pipeline provides independent processing stages for the rename scale benchmark.
package pipeline

type Processor struct{}

func (Processor) LoadInput(value int) int { return value + 1 }
func (Processor) CheckInput(value int) int { return value + 2 }
func (Processor) NormalizeValue(value int) int { return value + 3 }
func (Processor) MapFields(value int) int { return value + 4 }
func (Processor) RouteValue(value int) int { return value + 5 }
func (Processor) StampEvent(value int) int { return value + 6 }
func (Processor) CountItems(value int) int { return value + 7 }
func (Processor) MergeParts(value int) int { return value + 8 }
func (Processor) FilterNoise(value int) int { return value + 9 }
func (Processor) SortRecords(value int) int { return value + 10 }
func (Processor) EncodePayload(value int) int { return value + 11 }
func (Processor) DecodeReply(value int) int { return value + 12 }
func (Processor) OpenChannel(value int) int { return value + 13 }
func (Processor) CloseChannel(value int) int { return value + 14 }
func (Processor) FlushBuffer(value int) int { return value + 15 }
func (Processor) SaveResult(value int) int { return value + 16 }

func Run(processor Processor, value int) int {
	value = processor.LoadInput(value)
	value = processor.CheckInput(value)
	value = processor.NormalizeValue(value)
	value = processor.MapFields(value)
	value = processor.RouteValue(value)
	value = processor.StampEvent(value)
	value = processor.CountItems(value)
	value = processor.MergeParts(value)
	value = processor.FilterNoise(value)
	value = processor.SortRecords(value)
	value = processor.EncodePayload(value)
	value = processor.DecodeReply(value)
	value = processor.OpenChannel(value)
	value = processor.CloseChannel(value)
	value = processor.FlushBuffer(value)
	value = processor.SaveResult(value)
	return value
}
MetricVanilla (Small)MCP (Small)Δ (Small)Vanilla (Large)MCP (Large)Δ (Large)
Wall-Clock Latency51.66s264.83s+412.6%———
Process Start → First Event0.13s0.14s————
First Event → First Tool Call4.60s6.87s————
MCP Initialize → First Semantic Call——————
MCP Server Start → Initialize——————
Top-Level User Turns550%———
Internal Tool Cycles738+442.9%———
Initial Load / Discovery Turns00————
MCP Discovery / Schema Turns00————
Tool Invocations (per run)738+442.9%———
Output Tokens31953459+8.3%———
Reasoning / Thinking Tokens00————
Total Input Tokens8072802101890+160.4%———
Cached Input Tokens7393281969664+166.4%———
Uncached Input Tokens67952132226+94.6%———
Cost0.39460.8662+119.5%———
Cached vs Uncached Token Ratio10.88:114.90:1+36.9%———
Oracle L1: Mutation PolicyPASSPASS————
Oracle L2: AST InvariantsPASSPASS————
Oracle L3: Clean BuildPASSPASS————
Oracle L4: Verification TestPASSPASS————
Semantic Tool Invocation Verified (per run)N/APASS————
Baseline vs Semedit Agentic in Small Context
  • Vanilla (Baseline vs Semedit Agentic in Small Context) Edit: File pipeline/workflow.go modified (41 lines -> 41 lines)
  • Semedit MCP (Baseline vs Semedit Agentic in Small Context) Edit: File pipeline/workflow.go modified (41 lines -> 41 lines)
#VanillaSemedit MCP
1✓ ✓
/bin/zsh -lc "cat rename-plan.md && \
rg -n \"Processor|<method-name-from-row-1>\" --glob '*.go' ."
✓ ✓
/bin/zsh -lc "cat rename-plan.md && \
rg --files -g 'PROJECT_BRIEF.md' -g 'AGENTS.md' -g '*.go' | head -80"
2✓ ✓
/bin/zsh -lc "cat pipeline/workflow.go && \
rg -n \"LoadInput\" . --glob '"'!rename-plan.md'"' --glob '"'!go.mod'"'"
semedit/semantic_lookup (✓ ✓)
{
  "symbol": "LoadInput"
}
3✓ ✓
/bin/zsh -lc "python3 -c 'from pathlib import Path; p=Path(\"pipeline/workflow.go\"); s=p.read_text(); old=s; s=s.replace(\"LoadInput\", \"ReadRequest\"); assert s "'!= old and s.count("ReadRequest") == 2; tmp=p.with_suffix(".go.tmp"); tmp.write_text(s); tmp.replace(p)'"' && \
go test ./..."
semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.LoadInput",
  "to": "ReadRequest"
}
4✓ ✓
/bin/zsh -lc "python3 -c 'from pathlib import Path; p=Path(\"pipeline/workflow.go\"); s=p.read_text(); assert s.count(\"CheckInput\") == 2; s=s.replace(\"CheckInput\", \"ValidateRequest\"); tmp=p.with_suffix(\".go.tmp\"); tmp.write_text(s); tmp.replace(p)' && \
go test ./..."
✓ ✓
/bin/zsh -lc 'go test ./...'
5✓ ✓
/bin/zsh -lc "python3 -c 'from pathlib import Path; p=Path(\"pipeline/workflow.go\"); s=p.read_text(); assert s.count(\"NormalizeValue\") == 2 and s.count(\"MapFields\") == 2; s=s.replace(\"NormalizeValue\", \"CanonicalizeValue\").replace(\"MapFields\", \"ProjectFields\"); tmp=p.with_suffix(\".go.tmp\"); tmp.write_text(s); tmp.replace(p)' && \
go test ./..."
semedit/semantic_lookup (✓ ✓)
{
  "symbol": "CheckInput"
}
6✓ ✓
/bin/zsh -lc "python3 -c 'from pathlib import Path; p=Path(\"pipeline/workflow.go\"); s=p.read_text(); pairs=[(\"RouteValue\",\"DispatchValue\"),(\"StampEvent\",\"AnnotateEvent\"),(\"CountItems\",\"TallyItems\"),(\"MergeParts\",\"CombineParts\")]; assert all(s.count(a)==2 for a,b in pairs); [None for a,b in pairs]; s=s.replace(\"RouteValue\", \"DispatchValue\").replace(\"StampEvent\", \"AnnotateEvent\").replace(\"CountItems\", \"TallyItems\").replace(\"MergeParts\", \"CombineParts\"); tmp=p.with_suffix(\".go.tmp\"); tmp.write_text(s); tmp.replace(p)' && \
go test ./..."
semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.CheckInput",
  "to": "ValidateRequest"
}
7✓ ✓
/bin/zsh -lc "python3 -c 'from pathlib import Path; p=Path(\"pipeline/workflow.go\"); s=p.read_text(); pairs=[(\"FilterNoise\",\"PruneNoise\"),(\"SortRecords\",\"OrderRecords\"),(\"EncodePayload\",\"MarshalPayload\"),(\"DecodeReply\",\"ParseReply\"),(\"OpenChannel\",\"ConnectChannel\"),(\"CloseChannel\",\"ReleaseChannel\"),(\"FlushBuffer\",\"DrainBuffer\"),(\"SaveResult\",\"PersistResult\")]; assert all(s.count(a)==2 for a,b in pairs); s=s.replace(\"FilterNoise\", \"PruneNoise\").replace(\"SortRecords\", \"OrderRecords\").replace(\"EncodePayload\", \"MarshalPayload\").replace(\"DecodeReply\", \"ParseReply\").replace(\"OpenChannel\", \"ConnectChannel\").replace(\"CloseChannel\", \"ReleaseChannel\").replace(\"FlushBuffer\", \"DrainBuffer\").replace(\"SaveResult\", \"PersistResult\"); tmp=p.with_suffix(\".go.tmp\"); tmp.write_text(s); tmp.replace(p)' && \
go test ./..."
✓ ✓
/bin/zsh -lc 'go test ./...'
8—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "NormalizeValue"
}
9—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "MapFields"
}
10—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.NormalizeValue",
  "to": "CanonicalizeValue"
}
11—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.MapFields",
  "to": "ProjectFields"
}
12—✓ ✓
/bin/zsh -lc 'go test ./...'
13—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "RouteValue"
}
14—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "CountItems"
}
15—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "StampEvent"
}
16—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "MergeParts"
}
17—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.RouteValue",
  "to": "DispatchValue"
}
18—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.StampEvent",
  "to": "AnnotateEvent"
}
19—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.CountItems",
  "to": "TallyItems"
}
20—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.MergeParts",
  "to": "CombineParts"
}
21—✓ ✓
/bin/zsh -lc 'go test ./...'
22—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "FilterNoise"
}
23—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "SortRecords"
}
24—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "EncodePayload"
}
25—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "DecodeReply"
}
26—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "OpenChannel"
}
27—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "CloseChannel"
}
28—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "FlushBuffer"
}
29—semedit/semantic_lookup (✓ ✓)
{
  "symbol": "SaveResult"
}
30—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.FilterNoise",
  "to": "PruneNoise"
}
31—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.SortRecords",
  "to": "OrderRecords"
}
32—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.EncodePayload",
  "to": "MarshalPayload"
}
33—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.DecodeReply",
  "to": "ParseReply"
}
34—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.OpenChannel",
  "to": "ConnectChannel"
}
35—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.CloseChannel",
  "to": "ReleaseChannel"
}
36—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.FlushBuffer",
  "to": "DrainBuffer"
}
37—semedit/semantic_rename (✓ ✓)
{
  "symbol": "Processor.SaveResult",
  "to": "PersistResult"
}
38—✓ ✓
/bin/zsh -lc 'go test ./...'
Baseline vs Semedit Agentic in Large Context
#VanillaSemedit MCP
1not publishednot published

default prompt · prescriptive MCP instructions · write semedit restriction

SettingValue
Test casetask-13-rename-followup-scale
Targetcodex/gpt-6-luna/medium
Prompt variantdefault
MCP server instructionsprescriptive
Semedit arm restrictionwrite
Fixturetestdata/bench/task_13_rename_followup_scale.txtar

Vanilla LLM Prompt:

Do not edit tests. You are forbidden to modify protected files: “go.mod”, “rename-plan.md”.

Apply only row 1 of rename-plan.md. Rename that Processor method and update its call sites. Leave rows 2 through 16 unchanged. Run go test ./… before finishing. Do not use semantic editing MCP tools; use standard file editing. When done, output DONE.

Semedit MCP Prompt:

Do not edit tests. You are forbidden to modify protected files: “go.mod”, “rename-plan.md”.

Apply only row 1 of rename-plan.md. Rename that Processor method and update its call sites. Leave rows 2 through 16 unchanged. Run go test ./… before finishing. Use semedit semantic tools for supported source code modifications. Shell commands for builds and tests are allowed. When done, output DONE.

Initial Workspace State (Before Edit)
// Package pipeline provides independent processing stages for the rename scale benchmark.
package pipeline

type Processor struct{}

func (Processor) LoadInput(value int) int { return value + 1 }
func (Processor) CheckInput(value int) int { return value + 2 }
func (Processor) NormalizeValue(value int) int { return value + 3 }
func (Processor) MapFields(value int) int { return value + 4 }
func (Processor) RouteValue(value int) int { return value + 5 }
func (Processor) StampEvent(value int) int { return value + 6 }
func (Processor) CountItems(value int) int { return value + 7 }
func (Processor) MergeParts(value int) int { return value + 8 }
func (Processor) FilterNoise(value int) int { return value + 9 }
func (Processor) SortRecords(value int) int { return value + 10 }
func (Processor) EncodePayload(value int) int { return value + 11 }
func (Processor) DecodeReply(value int) int { return value + 12 }
func (Processor) OpenChannel(value int) int { return value + 13 }
func (Processor) CloseChannel(value int) int { return value + 14 }
func (Processor) FlushBuffer(value int) int { return value + 15 }
func (Processor) SaveResult(value int) int { return value + 16 }

func Run(processor Processor, value int) int {
	value = processor.LoadInput(value)
	value = processor.CheckInput(value)
	value = processor.NormalizeValue(value)
	value = processor.MapFields(value)
	value = processor.RouteValue(value)
	value = processor.StampEvent(value)
	value = processor.CountItems(value)
	value = processor.MergeParts(value)
	value = processor.FilterNoise(value)
	value = processor.SortRecords(value)
	value = processor.EncodePayload(value)
	value = processor.DecodeReply(value)
	value = processor.OpenChannel(value)
	value = processor.CloseChannel(value)
	value = processor.FlushBuffer(value)
	value = processor.SaveResult(value)
	return value
}
MetricVanilla (Small)MCP (Small)Δ (Small)Vanilla (Large)MCP (Large)Δ (Large)
Wall-Clock Latency54.88s239.36s+336.2%———
Process Start → First Event0.14s0.14s————
First Event → First Tool Call4.61s14.43s————
MCP Initialize → First Semantic Call——————
MCP Server Start → Initialize——————
Top-Level User Turns550%———
Internal Tool Cycles738+442.9%———
Initial Load / Discovery Turns00————
MCP Discovery / Schema Turns00————
Tool Invocations (per run)738+442.9%———
Output Tokens35304619+30.8%———
Reasoning / Thinking Tokens0673————
Total Input Tokens8090642443665+202.0%———
Cached Input Tokens6830082242048+228.3%———
Uncached Input Tokens126056201617+59.9%———
Cost0.53001.1307+113.3%———
Cached vs Uncached Token Ratio5.42:111.12:1+105.2%———
Oracle L1: Mutation PolicyPASSPASS————
Oracle L2: AST InvariantsPASSPASS————
Oracle L3: Clean BuildPASSPASS————
Oracle L4: Verification TestPASSPASS————
Semantic Tool Invocation Verified (per run)N/APASS————
Baseline vs Semedit Agentic in Small Context
  • Vanilla (Baseline vs Semedit Agentic in Small Context) Edit: File pipeline/workflow.go modified (41 lines -> 41 lines)
  • Semedit MCP (Baseline vs Semedit Agentic in Small Context) Edit: File pipeline/workflow.go modified (41 lines -> 41 lines)
#VanillaSemedit MCP
1✓ ✓
/bin/zsh -lc "pwd && \
cat rename-plan.md && \
rg -n \"Processor|method\" --glob '*.go' ."
✓ ✓
/bin/zsh -lc 'cat rename-plan.md && \
git status --short'
2✓ ✓
/bin/zsh -lc 'cat pipeline/workflow.go'
semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.LoadInput"
}
3✓ ✓
/bin/zsh -lc "python3 - <<'PY'
from pathlib import Path
p = Path('pipeline/workflow.go')
s = p.read_text()
s = s.replace('func (Processor) LoadInput(', 'func (Processor) ReadRequest(')
s = s.replace('processor.LoadInput(', 'processor.ReadRequest(')
p.write_text(s)
PY
git diff -- pipeline/workflow.go && \
go test ./..."
semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.LoadInput",
  "to": "ReadRequest"
}
4✓ ✓
/bin/zsh -lc "python3 - <<'PY'
from pathlib import Path
p = Path('pipeline/workflow.go')
s = p.read_text()
s = s.replace('func (Processor) CheckInput(', 'func (Processor) ValidateRequest(')
s = s.replace('processor.CheckInput(', 'processor.ValidateRequest(')
p.write_text(s)
PY
git diff -- pipeline/workflow.go && \
go test ./..."
✓ ✓
/bin/zsh -lc 'go test ./...'
5✓ ✓
/bin/zsh -lc "python3 - <<'PY'
from pathlib import Path
p = Path('pipeline/workflow.go')
s = p.read_text()
s = s.replace('func (Processor) NormalizeValue(', 'func (Processor) CanonicalizeValue(')
s = s.replace('processor.NormalizeValue(', 'processor.CanonicalizeValue(')
s = s.replace('func (Processor) MapFields(', 'func (Processor) ProjectFields(')
s = s.replace('processor.MapFields(', 'processor.ProjectFields(')
p.write_text(s)
PY
git diff -- pipeline/workflow.go && \
go test ./..."
semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.CheckInput"
}
6✓ ✓
/bin/zsh -lc "python3 - <<'PY'
from pathlib import Path
p = Path('pipeline/workflow.go')
s = p.read_text()
for old, new in [('RouteValue', 'DispatchValue'), ('StampEvent', 'AnnotateEvent'), ('CountItems', 'TallyItems'), ('MergeParts', 'CombineParts')]:
    s = s.replace(f'func (Processor) {old}(', f'func (Processor) {new}(')
    s = s.replace(f'processor.{old}(', f'processor.{new}(')
p.write_text(s)
PY
git diff -- pipeline/workflow.go && \
go test ./..."
semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.CheckInput",
  "to": "ValidateRequest"
}
7✓ ✓
/bin/zsh -lc "python3 - <<'PY'
from pathlib import Path
p = Path('pipeline/workflow.go')
s = p.read_text()
for old, new in [('FilterNoise', 'PruneNoise'), ('SortRecords', 'OrderRecords'), ('EncodePayload', 'MarshalPayload'), ('DecodeReply', 'ParseReply'), ('OpenChannel', 'ConnectChannel'), ('CloseChannel', 'ReleaseChannel'), ('FlushBuffer', 'DrainBuffer'), ('SaveResult', 'PersistResult')]:
    s = s.replace(f'func (Processor) {old}(', f'func (Processor) {new}(')
    s = s.replace(f'processor.{old}(', f'processor.{new}(')
p.write_text(s)
PY
git diff -- pipeline/workflow.go && \
go test ./..."
✓ ✓
/bin/zsh -lc 'go test ./...'
8—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.NormalizeValue"
}
9—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.NormalizeValue",
  "to": "CanonicalizeValue"
}
10—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.MapFields"
}
11—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.MapFields",
  "to": "ProjectFields"
}
12—✓ ✓
/bin/zsh -lc 'go test ./...'
13—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.RouteValue"
}
14—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.StampEvent"
}
15—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.CountItems"
}
16—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.MergeParts"
}
17—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.RouteValue",
  "to": "DispatchValue"
}
18—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.StampEvent",
  "to": "AnnotateEvent"
}
19—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.CountItems",
  "to": "TallyItems"
}
20—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.MergeParts",
  "to": "CombineParts"
}
21—✓ ✓
/bin/zsh -lc 'go test ./...'
22—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.FilterNoise"
}
23—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.SortRecords"
}
24—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.EncodePayload"
}
25—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.DecodeReply"
}
26—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.OpenChannel"
}
27—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.CloseChannel"
}
28—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.FlushBuffer"
}
29—semedit/semantic_lookup (✓ ✓)
{
  "language": "go",
  "symbol": "Processor.SaveResult"
}
30—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.FilterNoise",
  "to": "PruneNoise"
}
31—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.SortRecords",
  "to": "OrderRecords"
}
32—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.EncodePayload",
  "to": "MarshalPayload"
}
33—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.DecodeReply",
  "to": "ParseReply"
}
34—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.OpenChannel",
  "to": "ConnectChannel"
}
35—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.CloseChannel",
  "to": "ReleaseChannel"
}
36—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.FlushBuffer",
  "to": "DrainBuffer"
}
37—semedit/semantic_rename (✓ ✓)
{
  "file": "pipeline/workflow.go",
  "language": "go",
  "symbol": "Processor.SaveResult",
  "to": "PersistResult"
}
38—✓ ✓
/bin/zsh -lc 'go test ./...'
Baseline vs Semedit Agentic in Large Context
#VanillaSemedit MCP
1not publishednot published