feat(worker): resolve and seed session skills before each run

This commit is contained in:
Mika Kuns
2026-07-23 16:47:14 +02:00
committed by mika kuns
parent dea2b7db8b
commit 4626481359
17 changed files with 546 additions and 13 deletions
@@ -0,0 +1,44 @@
using ClaudeDo.Worker.Runner;
using Xunit;
namespace ClaudeDo.Worker.Tests.Runner;
public class SkillResolutionTests
{
[Fact]
public void Null_and_empty_sources_contribute_nothing()
=> Assert.Empty(TaskRunner.UnionSkillNames(null, "", " ", "[]"));
[Fact]
public void Single_source_is_returned_in_order()
=> Assert.Equal(["a", "b"], TaskRunner.UnionSkillNames("""["a","b"]"""));
[Fact]
public void Unions_across_task_list_global_levels()
{
var result = TaskRunner.UnionSkillNames("""["a"]""", """["b"]""", """["c"]""");
Assert.Equal(["a", "b", "c"], result);
}
[Fact]
public void Dedups_ordinal_preserving_first_occurrence_order()
{
var result = TaskRunner.UnionSkillNames("""["a","b"]""", """["b","c"]""", """["a","d"]""");
Assert.Equal(["a", "b", "c", "d"], result);
}
[Fact]
public void Dedup_is_case_sensitive_ordinal()
{
var result = TaskRunner.UnionSkillNames("""["Foo"]""", """["foo"]""");
Assert.Equal(["Foo", "foo"], result);
}
[Fact]
public void Malformed_json_is_ignored_not_thrown()
=> Assert.Equal(["a"], TaskRunner.UnionSkillNames("not json", """["a"]"""));
[Fact]
public void Blank_entries_within_array_are_skipped()
=> Assert.Equal(["a"], TaskRunner.UnionSkillNames("""["a", "", " ", null]"""));
}