### Case A — auto-discover the family id via registry.load_family_members() (the natural 'list then reproduce' path)
runs root: runs
reproducing family: 7c892fcd-0-GER40-w0-r0-s0
  load_family failed: exit=1 msg=no such family '7c892fcd-0-GER40-w0-r0-s0'
  --- reproduce_family(id, env) ---
  reproduce_family failed: exit=1 msg=no such family '7c892fcd-0-GER40-w0-r0-s0'
  --- reproduce_family_in(reg, id, data, env) -> ReproduceReport ---
  reproduce_family_in failed: exit=1 msg=no such family '7c892fcd-0-GER40-w0-r0-s0'

### Case B — the family id as returned by execute()'s StageFamily.family_id (with the stage '-0' suffix)
runs root: runs
reproducing family: 7c892fcd-0-GER40-w0-r0-s0-0
  load_family OK: kind=Sweep members=2
  --- reproduce_family(id, env) ---
7c892fcd-0-GER40-w0-r0-s0-0  member sma_signal.fast.length=2, stop_length=3, stop_k=2  reproduced: bit-identical
7c892fcd-0-GER40-w0-r0-s0-0  member sma_signal.fast.length=3, stop_length=3, stop_k=2  reproduced: bit-identical
reproduced 2/2 members bit-identically
  reproduce_family returned Ok(()) — bit-identical (no per-member detail returned).
  --- reproduce_family_in(reg, id, data, env) -> ReproduceReport ---
  ReproduceReport: 2/2 members bit-identical
    IDENTICAL  sma_signal.fast.length=2, stop_length=3, stop_k=2
    IDENTICAL  sma_signal.fast.length=3, stop_length=3, stop_k=2
