feat(prime): wire prompt_override into the daily prep prompt

The prime_schedules.prompt_override column existed end-to-end but was
never populated or read. DailyPrepPrompt.BuildPrompt now takes an
optional override and appends it as an extra paragraph after the fixed
prompt (additive, never a replacement, so a user can't disable the
required get_daily_prep_candidates/set_my_day flow). PrimeRunner passes
schedule.PromptOverride through. The Prime tab in Settings now has a
multiline field per schedule wired to a new PromptOverride property on
PrimeScheduleRowViewModel (blank persists as null).
This commit is contained in:
mika kuns
2026-08-10 11:57:54 +02:00
parent 6a2a19cc9e
commit 1b7f7f38ae
8 changed files with 150 additions and 26 deletions
@@ -15,6 +15,43 @@ public class DailyPrepPromptTests
Assert.Contains("preparing my workday", prompt);
}
[Fact]
public void Build_prompt_without_override_matches_the_plain_render()
{
var today = new DateOnly(2026, 6, 3);
var expected = ClaudeDo.Data.PromptFiles.Render(
ClaudeDo.Data.PromptKind.DailyPrep,
new Dictionary<string, string> { ["date"] = "2026-06-03", ["maxTasks"] = "5" });
var prompt = DailyPrepPrompt.BuildPrompt(maxTasks: 5, today: today);
Assert.Equal(expected, prompt);
}
[Fact]
public void Build_prompt_appends_override_as_an_additional_paragraph()
{
var today = new DateOnly(2026, 6, 3);
var baseline = DailyPrepPrompt.BuildPrompt(maxTasks: 5, today: today);
var prompt = DailyPrepPrompt.BuildPrompt(maxTasks: 5, today: today,
promptOverride: "Also prioritize anything tagged #urgent.");
Assert.StartsWith(baseline, prompt);
Assert.Contains("Also prioritize anything tagged #urgent.", prompt);
}
[Fact]
public void Build_prompt_treats_whitespace_only_override_as_absent()
{
var today = new DateOnly(2026, 6, 3);
var baseline = DailyPrepPrompt.BuildPrompt(maxTasks: 5, today: today);
var prompt = DailyPrepPrompt.BuildPrompt(maxTasks: 5, today: today, promptOverride: " ");
Assert.Equal(baseline, prompt);
}
[Fact]
public void Build_args_allows_only_the_two_tools()
{