now() is dynamic but it scan all the partitioned tables.
Most likely you partitioned on a timestamp without time zone, while now() returns a timestamp with time zone. The possible time zone difference causes that the database doesn't know in which partition to look.
In a similar vein, the function you defined to return your timestamp you marked 'immutable', which it should most definitely not be; time moves on, after all.
-- If you can't see the forest for the trees, Cut the trees and you'll see there is no forest.