- Manager.Close concurrent re-entry now blocks late callers on closeDone
so every Close() return shares the "manager drained" guarantee.
- Open cleanup path on lost race with Close calls pty.Wait() to reap the
child synchronously (waitLoop never runs there).
- Tests: concurrent Close callers all observe drained state; Open cleanup
invokes pty.Wait at least once.
Co-authored-by: multica-agent <github@multica.ai>