Six scripted pi sub-agent runs (3 tool regimes × 2 models) rehearsed the exercise; deterministic gate = solution test + approved file. Key results: mandated CLI triples cost on the strong model (4:06 vs 0:39, PASS both); weak model fails only under the mandate (A+Q), passes when free or optional. Drift documented with code: scorer.updateSelection left inside the extracted method (A+Q, C+Q). Harness in tools/rehearse; summary in rehearsal-findings.md; per-run evidence in rehearsal-runs/; cheat sheet in rehearse-with-agent.md corrected (lambda-typed parameters unsupported).
63 lines
2.8 KiB
Diff
63 lines
2.8 KiB
Diff
Only in /tmp/rehearsal/runs/C+Q/workspace: AGENTS.md
|
|
diff -ru '--exclude=target' /tmp/rehearsal/pristine/src/main/java/codingdojo/LongRangeForecasts.java /tmp/rehearsal/runs/C+Q/workspace/src/main/java/codingdojo/LongRangeForecasts.java
|
|
--- /tmp/rehearsal/pristine/src/main/java/codingdojo/LongRangeForecasts.java 2026-09-27 14:58:14.139167804 +0000
|
|
+++ /tmp/rehearsal/runs/C+Q/workspace/src/main/java/codingdojo/LongRangeForecasts.java 2026-09-27 15:53:52.292927858 +0000
|
|
@@ -3,19 +3,18 @@
|
|
import java.time.Instant;
|
|
import java.time.temporal.ChronoUnit;
|
|
import java.util.*;
|
|
+import java.util.function.LongFunction;
|
|
|
|
public class LongRangeForecasts {
|
|
|
|
private final Scorer scorer = new Scorer();
|
|
|
|
- public Map<IceCream, Integer> longRangeForecast(String quarter) {
|
|
+ public Map<IceCream, Integer> longRangeForecast() {
|
|
+ return longRangeForecast(d -> scorer.lookupWeather(d));
|
|
+ }
|
|
|
|
+ public Map<IceCream, Integer> longRangeForecast(LongFunction<Boolean> dayOffsetToWeather) {
|
|
var result = new HashMap<IceCream, Integer>();
|
|
- if (Objects.equals(quarter, "Q1") || Objects.equals(quarter, "Q4")) {
|
|
- for (IceCream flavour : IceCream.values()) {
|
|
- result.put(flavour, 5);
|
|
- }
|
|
- }
|
|
for (IceCream flavour : IceCream.values()) {
|
|
result.put(flavour, 0);
|
|
}
|
|
@@ -25,15 +24,7 @@
|
|
Instant.parse("2023-06-05T14:00:00.000-07:00"),
|
|
Instant.parse("2023-06-23T14:00:00.000-07:00")
|
|
);
|
|
- List<Boolean> expectedWeather = new ArrayList<>();
|
|
- for (Instant interestingDate : interestingDates) {
|
|
- scorer.updateSelection();
|
|
- var forecastDate = Instant.parse("2023-04-26T14:00:00.000-07:00");
|
|
- long daysForward = ChronoUnit.DAYS.between(forecastDate, interestingDate);
|
|
- Boolean lookupWeather = scorer.lookupWeather(daysForward);
|
|
- expectedWeather.add(lookupWeather);
|
|
- }
|
|
-
|
|
+ List<Boolean> expectedWeather = collectExpectedWeather(interestingDates, dayOffsetToWeather);
|
|
for (IceCream flavour : result.keySet()) {
|
|
result.put(flavour, result.get(flavour) + 10);
|
|
var sunnyHolidays = expectedWeather.stream().filter(s -> s).count();
|
|
@@ -46,4 +37,15 @@
|
|
}
|
|
return result;
|
|
}
|
|
+
|
|
+ private List<Boolean> collectExpectedWeather(List<Instant> dates, LongFunction<Boolean> dayOffsetToWeather) {
|
|
+ List<Boolean> expectedWeather = new ArrayList<>();
|
|
+ for (Instant date : dates) {
|
|
+ scorer.updateSelection();
|
|
+ var forecastDate = Instant.parse("2023-04-26T14:00:00.000-07:00");
|
|
+ long daysForward = ChronoUnit.DAYS.between(forecastDate, date);
|
|
+ expectedWeather.add(dayOffsetToWeather.apply(daysForward));
|
|
+ }
|
|
+ return expectedWeather;
|
|
+ }
|
|
}
|