feat(config): Permission-Modus pro Liste und pro Task ueberschreibbar
Bisher gab es nur AppSettings.DefaultPermissionMode global — ein Task, der plan oder acceptEdits braucht, erzwang das Umstellen der globalen Einstellung. Neue Spalten tasks.permission_mode und list_config.permission_mode, Auflösung task -> list -> global im EffectiveRunConfigResolver (den TaskRunner und get_effective_run_config gemeinsam nutzen), ComboBox mit Inherited-Badge im geteilten Agent-Editor. MigrationBaselineTests: das Fixture baute per EnsureCreated das heutige Schema und stempelte Legacy-History darauf — jede Migration nach dem Squash lief damit in 'duplicate column name'. Es migriert jetzt gezielt bis InitialCreate und prueft 'nichts pending' statt 'InitialCreate ist die einzige Zeile'.
This commit is contained in:
@@ -135,6 +135,23 @@ public sealed class EffectiveRunConfigTests : IDisposable
|
||||
Assert.Contains("task", result.SystemPrompt.Sources);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Permission_mode_task_override_beats_list_override_beats_global()
|
||||
{
|
||||
var listId = await SeedListAsync();
|
||||
await _lists.SetConfigAsync(new ListConfigEntity { ListId = listId, PermissionMode = "acceptEdits" });
|
||||
|
||||
var inherits = await SeedTaskAsync(listId);
|
||||
Assert.Equal("acceptEdits", (await _sut.GetEffectiveRunConfig(inherits.Id, CancellationToken.None)).PermissionMode);
|
||||
|
||||
var overrides = await SeedTaskAsync(listId, t => t.PermissionMode = "plan");
|
||||
Assert.Equal("plan", (await _sut.GetEffectiveRunConfig(overrides.Id, CancellationToken.None)).PermissionMode);
|
||||
|
||||
var otherList = await SeedListAsync();
|
||||
var global = await SeedTaskAsync(otherList);
|
||||
Assert.Equal("auto", (await _sut.GetEffectiveRunConfig(global.Id, CancellationToken.None)).PermissionMode);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Unknown_task_throws()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user