feat(worker): resolve max-turns from task then list then global default

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
mika kuns
2026-06-04 12:20:35 +02:00
parent ac137f7c1c
commit beae2d639d
2 changed files with 23 additions and 1 deletions

View File

@@ -390,10 +390,13 @@ public sealed class TaskRunner
SystemPrompt: string.IsNullOrWhiteSpace(instructions) ? null : instructions,
AgentPath: task.AgentPath ?? listConfig?.AgentPath,
ResumeSessionId: resumeSessionId,
MaxTurns: global.DefaultMaxTurns,
MaxTurns: ResolveMaxTurns(task.MaxTurns, listConfig?.MaxTurns, global.DefaultMaxTurns),
PermissionMode: global.DefaultPermissionMode);
}
internal static int? ResolveMaxTurns(int? taskTurns, int? listTurns, int globalDefault)
=> taskTurns ?? listTurns ?? globalDefault;
public static string MergeInstructions(params string?[] parts)
{
var trimmed = parts

View File

@@ -0,0 +1,19 @@
using ClaudeDo.Worker.Runner;
using Xunit;
namespace ClaudeDo.Worker.Tests.Runner;
public class MaxTurnsResolutionTests
{
[Fact]
public void Task_override_wins()
=> Assert.Equal(5, TaskRunner.ResolveMaxTurns(taskTurns: 5, listTurns: 20, globalDefault: 100));
[Fact]
public void List_override_used_when_no_task_override()
=> Assert.Equal(20, TaskRunner.ResolveMaxTurns(taskTurns: null, listTurns: 20, globalDefault: 100));
[Fact]
public void Falls_back_to_global_default()
=> Assert.Equal(100, TaskRunner.ResolveMaxTurns(taskTurns: null, listTurns: null, globalDefault: 100));
}