`src/ClaudeDo.Worker/External/ExternalMcpService.cs` ist **1897 Zeilen** (nachgezählt 2026-09-02; die Datei ist seit dem Anlegen dieses Tasks von 1696 weiter gewachsen): ~30 DTO-Records oben plus ~25 Tool-Methoden — während **13** Geschwisterdateien `*McpTools.cs` im selben Ordner das Topic-Split-Muster schon tragen (`ListMcpTools`, `ConfigMcpTools`, `BatchMcpTools`, `NotesMcpTools`, `QueueStateMc ClaudeDo-Task: 1862e160-ffde-4a50-aa03-bb7251f56088
55 lines
2.1 KiB
Python
55 lines
2.1 KiB
Python
import re
|
|
|
|
path = r"C:\Private\.claudedo-worktrees\claude-do\1862e160-ffde-4a50-aa03-bb7251f56088\tests\ClaudeDo.Worker.Tests\External\_remainder.cs"
|
|
with open(path, encoding='utf-8') as f:
|
|
lines = f.readlines()
|
|
|
|
def idx(marker, start=0):
|
|
for i in range(start, len(lines)):
|
|
if marker in lines[i]:
|
|
return i
|
|
raise AssertionError(f"marker not found: {marker!r}")
|
|
|
|
# Each deletion described as (start_marker, end_marker_exclusive) -- delete from the line
|
|
# containing start_marker up to (but not including) the line containing end_marker.
|
|
deletions = [
|
|
("// ── GetTaskWorktree ──", "// ── GetTaskConfig ──"),
|
|
("// ── MergeTask allowWaitingForReview ──", "// ── leaveConflictsInTree ──"),
|
|
("// Three edits spread far enough apart", "[Fact]"), # multi-hunk helpers, up to next [Fact]
|
|
("// ── continue_merge / abort_merge ──", "// ── PreviewMerge / PreviewMergeSet ──"),
|
|
("private async Task<string> CreateActiveWorktreeAsync(", "[Fact]"),
|
|
]
|
|
|
|
# Apply deletions from bottom to top so earlier indices stay valid.
|
|
spans = []
|
|
for start_marker, end_marker in deletions:
|
|
s = idx(start_marker)
|
|
e = idx(end_marker, s + 1)
|
|
spans.append((s, e))
|
|
|
|
spans.sort(reverse=True)
|
|
for s, e in spans:
|
|
del lines[s:e]
|
|
|
|
text = ''.join(lines)
|
|
|
|
# Drop the now-unused `maintenance` local + ctor arg in BuildSut(QueueService, IVerifyCommandRunner).
|
|
before = text
|
|
text = text.replace(
|
|
" var maintenance = new WorktreeMaintenanceService(factory, git, NullLogger<WorktreeMaintenanceService>.Instance);\n",
|
|
"", 1)
|
|
assert text != before, "maintenance local not removed"
|
|
before = text
|
|
text = text.replace(
|
|
" git, factory, maintenance, merge, planningMerge,\n",
|
|
" git, factory, merge, planningMerge,\n", 1)
|
|
assert text != before, "maintenance ctor arg not removed"
|
|
|
|
# Collapse any remaining runs of 2+ blank lines down to a single blank line (cosmetic only).
|
|
text = re.sub(r'\n{3,}', '\n\n', text)
|
|
|
|
with open(path, 'w', encoding='utf-8') as f:
|
|
f.write(text)
|
|
|
|
print("final line count:", len(text.splitlines()))
|