refactor: Datei-Scope-Serialisierung entfernen
ScopeGlobs auf Tasks und SerializeOnFileOverlap auf der Listen-Config waren ungenutzt: der Scope wurde nie befuellt, also hat der Queue-Picker nie serialisiert. ScopeOverlap, das Picker-Gate, die DTO-Felder, die UI-Option und die Spalten fallen weg (Migration DropFileScopeSerialization).
This commit is contained in:
@@ -312,7 +312,7 @@ public sealed class ConfigMcpToolsTests : IDisposable
|
||||
Model = "sonnet",
|
||||
SessionSkills = "[\"superpowers\"]",
|
||||
VerifyCommand = "dotnet build",
|
||||
SerializeOnFileOverlap = true,
|
||||
PermissionMode = "acceptEdits",
|
||||
});
|
||||
|
||||
await _sut.SetListConfig(listId, model: "opus", cancellationToken: CancellationToken.None);
|
||||
@@ -324,7 +324,7 @@ public sealed class ConfigMcpToolsTests : IDisposable
|
||||
Assert.Equal("dotnet build", cfg.VerifyCommand);
|
||||
// SetConfigAsync copies the entity verbatim, so a field this tool doesn't expose would
|
||||
// reset to its default unless it is carried over explicitly.
|
||||
Assert.True(cfg.SerializeOnFileOverlap);
|
||||
Assert.Equal("acceptEdits", cfg.PermissionMode);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -335,7 +335,7 @@ public sealed class ConfigMcpToolsTests : IDisposable
|
||||
{
|
||||
ListId = listId,
|
||||
Model = "sonnet",
|
||||
SerializeOnFileOverlap = true,
|
||||
PermissionMode = "acceptEdits",
|
||||
});
|
||||
|
||||
var result = await _sut.SetListConfig(
|
||||
@@ -349,7 +349,7 @@ public sealed class ConfigMcpToolsTests : IDisposable
|
||||
var cfg = await _lists.GetConfigAsync(listId);
|
||||
Assert.NotNull(cfg);
|
||||
Assert.Null(cfg!.Model);
|
||||
Assert.True(cfg.SerializeOnFileOverlap);
|
||||
Assert.Equal("acceptEdits", cfg.PermissionMode);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
||||
@@ -176,48 +176,4 @@ public sealed class QueueStateMcpToolsTests : IDisposable
|
||||
|
||||
Assert.Equal(new[] { first.Id, second.Id }, result.WaitingTaskIds);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetQueueState_ScopeBlockedTasks_Empty_WhenNoListSerializes()
|
||||
{
|
||||
var listId = await SeedListAsync();
|
||||
var (_, sut) = CreateSut();
|
||||
|
||||
var running = await SeedTaskAsync(listId, TaskStatus.Running);
|
||||
running.ScopeGlobs = "src/Foo.cs";
|
||||
await _ctx.SaveChangesAsync();
|
||||
var queued = await SeedTaskAsync(listId, TaskStatus.Queued);
|
||||
queued.ScopeGlobs = "src/Foo.cs";
|
||||
await _ctx.SaveChangesAsync();
|
||||
|
||||
var result = await sut.GetQueueState(CancellationToken.None);
|
||||
|
||||
Assert.Contains(queued.Id, result.WaitingTaskIds);
|
||||
Assert.Empty(result.ScopeBlockedTasks);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetQueueState_ScopeBlockedTasks_ReportsReasonAndBlocker_WhenListSerializes()
|
||||
{
|
||||
var listId = await SeedListAsync();
|
||||
await _listRepo.SetConfigAsync(new ListConfigEntity { ListId = listId, SerializeOnFileOverlap = true });
|
||||
|
||||
var (_, sut) = CreateSut();
|
||||
|
||||
var running = await SeedTaskAsync(listId, TaskStatus.Running);
|
||||
running.ScopeGlobs = "src/Foo.cs";
|
||||
await _ctx.SaveChangesAsync();
|
||||
|
||||
var queued = await SeedTaskAsync(listId, TaskStatus.Queued);
|
||||
queued.ScopeGlobs = "src/Foo.cs";
|
||||
await _ctx.SaveChangesAsync();
|
||||
|
||||
var result = await sut.GetQueueState(CancellationToken.None);
|
||||
|
||||
Assert.Contains(queued.Id, result.WaitingTaskIds);
|
||||
var reason = Assert.Single(result.ScopeBlockedTasks);
|
||||
Assert.Equal(queued.Id, reason.TaskId);
|
||||
Assert.Equal(running.Id, reason.BlockedByTaskId);
|
||||
Assert.Equal("scope_overlap", reason.Reason);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user