== 1. Classes: only the first non-serializable superclass constructor runs ==
  after new Child()   : Child runs = 1, Parent runs = 1
  after the copy      : Child runs = 1, Parent runs = 2

== 2. Records: the canonical constructor DOES run ==
  after new Money(..) : canonical runs = 1
  after the copy      : canonical runs = 2

== 3. An allow-list filter on the reading side ==
  list of String and Money     : [text, Money[paise=1]]
  list holding an AtomicInteger : InvalidClassException: filter status: REJECTED
