feat(campaign): make the label source a cell dimension

A 2x2 of policy against labelling needs the runner to express both factors.
It could only express the policy, so half the factorial had to go through
--extra, where the manifest would not record what was actually run.

Rejected at parse rather than on dispatch: a sweep that finds the bad value
on run 1 of 40 has already spent a cell's worth of device time.

Claude-Session: https://claude.ai/code/session_01A5KmftdEJ49A9z5mF5ESrX
This commit is contained in:
pj committed 2026-08-15 13:32:05 +05:30
1 parent d987526e47
commit ff2de344e9
3 files changed
+43

No files matched your search

+11
View File
@@ -54,6 +54,7 @@ func TestParseArguments_Rejections(t *testing.T) {
{"missing output", []string{"--spec", "s", "--bundle-id", "a", "--arm", "b", "--seeds", "1", "--max-steps", "10"}, "--output is required"},
{"bad platform", append(baseArguments(), "--platform", "windows"), "unsupported platform"},
{"bad generator", append(baseArguments(), "--generator", "vibes"), "unsupported generator"},
{"bad label source", append(baseArguments(), "--label-source", "resource_id"), `unsupported label source: "resource_id"`},
{"zero max steps", append(baseArguments(), "--max-steps", "0"), "--max-steps must be positive"},
{"seed zero", append(baseArguments(), "--seeds", "0-2"), "not reproducible"},
{"duplicate device", append(baseArguments(), "--devices", "a,a"), "duplicate device"},
@@ -113,6 +114,16 @@ func TestRunArguments_PlatformDeviceFlagAndPassthrough(t *testing.T) {
}
}
func TestRunArguments_LabelSourceDefaultsToVisibleText(t *testing.T) {
configuration, err := parseArguments(baseArguments(), io.Discard)
if err != nil {
t.Fatal(err)
}
if got := argumentValue(runArguments(configuration, "7", ""), "--label-source"); got != "visible-text" {
t.Errorf("--label-source = %q, want visible-text", got)
}
}
func argumentValue(arguments []string, name string) string {
index := slices.Index(arguments, name)
if index < 0 || index+1 >= len(arguments) {