+func TestChildScheduleWakesOnlyItsOwner(t *testing.T) {
+ server := newModelFake(t)
+ server.reply = func(w http.ResponseWriter, _ ModelFakeCall) {
+ modelWriteEvents(w, modelCompletedEvent([]any{modelMessageItem("")}, 100, 0, 5))
+ }
+ test := newDaemonMessageTest(t, t.TempDir(), server)
+ child := test.agents[1]
+ at := child.clock().Add(time.Minute).Format(scheduleAtLayout)
+ output := test.loops[1].tools.run(t.Context(), "schedule_set", `{"text":"Check the plants.","at":"`+at+`","cron":null}`)
+ require.Contains(t, output, "Schedule 1 set.")
+ require.Equal(t, "Garden", child.schedules.sorted()[0].Owner)
+
+ child.schedules.clock = func() time.Time {
+ return child.clock().Add(time.Minute)
+ }
+ require.ErrorContains(t, child.schedules.deliver(t.Context(), test.loops[0]), "does not match")
+ require.NoError(t, child.schedules.deliver(t.Context(), test.loops[1]))
+ test.Start(t, 0, 1, 2)
+ test.events[1].WaitFor(t, "idle", 1)
+ require.Equal(t, 1, server.Calls())
+ require.Equal(t, child.agent.CacheKey(), server.Call(0).body["prompt_cache_key"])
+ require.Zero(t, test.agents[0].memory.Len())
+ require.Zero(t, test.agents[2].memory.Len())
+ require.Contains(t, test.events[1].LastEvent("work").Text, "Check the plants.")
+ require.Equal(t, scheduleSource, test.events[1].LastEvent("work").Source)
+}
+