From 1b7f7f38ae3344e1beb2d079bb325e3ddca4a5f5 Mon Sep 17 00:00:00 2001 From: mika kuns Date: Mon, 10 Aug 2026 11:57:54 +0200 Subject: [PATCH] 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). --- src/ClaudeDo.Localization/locales/de.json | 2 + src/ClaudeDo.Localization/locales/en.json | 2 + .../Settings/PrimeScheduleRowViewModel.cs | 5 +- .../Views/Modals/SettingsModalView.axaml | 51 ++++++++------ src/ClaudeDo.Worker/Prime/DailyPrepPrompt.cs | 10 ++- src/ClaudeDo.Worker/Prime/PrimeRunner.cs | 2 +- .../PrimeScheduleRepositoryTests.cs | 67 +++++++++++++++++++ .../Prime/DailyPrepPromptTests.cs | 37 ++++++++++ 8 files changed, 150 insertions(+), 26 deletions(-) create mode 100644 tests/ClaudeDo.Data.Tests/PrimeScheduleRepositoryTests.cs diff --git a/src/ClaudeDo.Localization/locales/de.json b/src/ClaudeDo.Localization/locales/de.json index dfdd95ae..052979ec 100644 --- a/src/ClaudeDo.Localization/locales/de.json +++ b/src/ClaudeDo.Localization/locales/de.json @@ -75,6 +75,8 @@ "addSchedule": "+ Zeitplan hinzufügen", "removeScheduleTip": "Zeitplan entfernen", "dailyPrepMaxTasks": "Max. Aufgaben pro Tag", + "promptOverrideLabel": "Prompt-Zusatz", + "promptOverridePlaceholder": "Zusätzliche Anweisungen, die für diesen Zeitplan an den Prime-Prompt angehängt werden (optional)", "dayMo": "Mo", "dayTu": "Di", "dayWe": "Mi", diff --git a/src/ClaudeDo.Localization/locales/en.json b/src/ClaudeDo.Localization/locales/en.json index a4220211..70aa85b1 100644 --- a/src/ClaudeDo.Localization/locales/en.json +++ b/src/ClaudeDo.Localization/locales/en.json @@ -75,6 +75,8 @@ "addSchedule": "+ Add schedule", "removeScheduleTip": "Remove schedule", "dailyPrepMaxTasks": "Max tasks per day", + "promptOverrideLabel": "Prompt addition", + "promptOverridePlaceholder": "Extra instructions appended to the daily prep prompt for this schedule (optional)", "dayMo": "Mo", "dayTu": "Tu", "dayWe": "We", diff --git a/src/ClaudeDo.Ui/ViewModels/Modals/Settings/PrimeScheduleRowViewModel.cs b/src/ClaudeDo.Ui/ViewModels/Modals/Settings/PrimeScheduleRowViewModel.cs index fe7e140c..b321253a 100644 --- a/src/ClaudeDo.Ui/ViewModels/Modals/Settings/PrimeScheduleRowViewModel.cs +++ b/src/ClaudeDo.Ui/ViewModels/Modals/Settings/PrimeScheduleRowViewModel.cs @@ -21,6 +21,7 @@ public sealed partial class PrimeScheduleRowViewModel : ViewModelBase [ObservableProperty] private bool _sunday; [ObservableProperty] private TimeSpan _timeOfDay; [ObservableProperty] private DateTimeOffset? _lastRunAt; + [ObservableProperty] private string? _promptOverride; public string LastRunLabel => LastRunAt is { } v ? v.LocalDateTime.ToString("g") : "—"; @@ -58,6 +59,7 @@ public sealed partial class PrimeScheduleRowViewModel : ViewModelBase Sunday = (dto.Days & Sun) != 0; TimeOfDay = dto.TimeOfDay; LastRunAt = dto.LastRunAt; + PromptOverride = dto.PromptOverride; } public int DaysMask() @@ -74,5 +76,6 @@ public sealed partial class PrimeScheduleRowViewModel : ViewModelBase } public PrimeScheduleDto ToDto() => - new(Id, DaysMask(), TimeOfDay, Enabled, LastRunAt, null); + new(Id, DaysMask(), TimeOfDay, Enabled, LastRunAt, + string.IsNullOrWhiteSpace(PromptOverride) ? null : PromptOverride); } diff --git a/src/ClaudeDo.Ui/Views/Modals/SettingsModalView.axaml b/src/ClaudeDo.Ui/Views/Modals/SettingsModalView.axaml index d42970ed..dd8975ce 100644 --- a/src/ClaudeDo.Ui/Views/Modals/SettingsModalView.axaml +++ b/src/ClaudeDo.Ui/Views/Modals/SettingsModalView.axaml @@ -354,28 +354,35 @@ - - - - - - - - - - - - - -