How about instead of a channel, Harvest() is a function that returns a value (the offset)

Then in Prospector, we update the goroutine that runs the Harvester() to expect the return and keep all the messaging internal to the Prospector?

Does this make sense?