fix(ui): validate PowerUse window, explain effort and Prime Claude in Settings
Three usability-audit findings in Settings: - An unparseable PowerUse window (e.g. "9:0") used to save silently as null (= round the clock), the opposite of what the typo implied. Validate() now rejects an unparseable start/end unless blank; the worker-side read-time tolerance is unchanged. - "Effort" column header gets a tooltip explaining it's the model's reasoning effort (cost/depth tradeoff). - The "Prime Claude" tab gets a tooltip explaining scheduled Claude runs (Ping / Fill My Day / custom prompt). New locale keys added to en+de. Updated the PowerUse round-trip test that asserted the old silent-normalize behavior.
This commit is contained in:
@@ -30,4 +30,31 @@ public class GeneralSettingsTabViewModelTests
|
||||
|
||||
Assert.Equal(expectedValid, vm.Validate() is null);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(null, true)]
|
||||
[InlineData("", true)]
|
||||
[InlineData("09:00", true)]
|
||||
[InlineData("23:59", true)]
|
||||
[InlineData("9:0", false)]
|
||||
[InlineData("abc", false)]
|
||||
[InlineData("25:00", false)]
|
||||
public void Validate_PowerUseWindowStart_rejectsUnparseable(string? value, bool expectedValid)
|
||||
{
|
||||
var vm = new GeneralSettingsTabViewModel { PowerUseWindowStart = value };
|
||||
|
||||
Assert.Equal(expectedValid, vm.Validate() is null);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(null, true)]
|
||||
[InlineData("09:00", true)]
|
||||
[InlineData("9:0", false)]
|
||||
[InlineData("abc", false)]
|
||||
public void Validate_PowerUseWindowEnd_rejectsUnparseable(string? value, bool expectedValid)
|
||||
{
|
||||
var vm = new GeneralSettingsTabViewModel { PowerUseWindowEnd = value };
|
||||
|
||||
Assert.Equal(expectedValid, vm.Validate() is null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -153,10 +153,17 @@ public class SettingsModalViewModelTests : IDisposable
|
||||
Assert.Equal("18:00", vm.General.PowerUseWindowStart);
|
||||
Assert.Equal(88, vm.General.PowerUseHandoffPct);
|
||||
|
||||
// A typo in the window is normalized to null on save, not stored as a fake window.
|
||||
// A typo in the window blocks Save instead of silently becoming "round the clock".
|
||||
vm.General.PowerUseWindowEnd = "not a time";
|
||||
await vm.SaveCommand.ExecuteAsync(null);
|
||||
|
||||
Assert.Null(worker.Saved);
|
||||
Assert.NotEqual("", vm.ValidationError);
|
||||
|
||||
// Clearing it back out is still a valid "round the clock" window and saves.
|
||||
vm.General.PowerUseWindowEnd = "";
|
||||
await vm.SaveCommand.ExecuteAsync(null);
|
||||
|
||||
Assert.True(worker.Saved!.PowerUseEnabled);
|
||||
Assert.Equal("18:00", worker.Saved.PowerUseWindowStart);
|
||||
Assert.Null(worker.Saved.PowerUseWindowEnd);
|
||||
|
||||
Reference in New Issue
Block a user