Summary
`MILESTONES.md` line 371 (M15 §Back-pressure) is checked ☑:
Back-pressure: 1M-line burst from one rank MUST NOT block sibling streams; bounded per-file goroutine + bounded channel (1024); `goleak` test.
The `goleak` test does not exist. `grep -r goleak components/receivers/containerstdout/` returns nothing.
Risk
Receiver goroutines (tailer.Run, healthLoop, informer.Run, rate-limit evict ticker) survive Shutdown if Stop semantics drift. Without goleak, regression goes silent.
Fix
Add `TestReceiver_NoGoroutineLeak` to `receiver_test.go` or new `leak_test.go`:
- TestMain pattern: `goleak.VerifyTestMain(m, ...)`
- OR per-test: `defer goleak.VerifyNone(t)` on Start/Shutdown cycle
- Whitelist informer's controller-runtime goroutines that are known to survive (document why)
Affected files
- `components/receivers/containerstdout/receiver_test.go` or new `leak_test.go`
- `go.mod` (add `go.uber.org/goleak` if not present transitively)
Why load-bearing
MILESTONES.md ☑ misrepresents the receiver's leak-safety posture. Either implement or flip to ☐.
Origin
PR #158 self-review.
Summary
`MILESTONES.md` line 371 (M15 §Back-pressure) is checked ☑:
The `goleak` test does not exist. `grep -r goleak components/receivers/containerstdout/` returns nothing.
Risk
Receiver goroutines (tailer.Run, healthLoop, informer.Run, rate-limit evict ticker) survive Shutdown if Stop semantics drift. Without goleak, regression goes silent.
Fix
Add `TestReceiver_NoGoroutineLeak` to `receiver_test.go` or new `leak_test.go`:
Affected files
Why load-bearing
MILESTONES.md ☑ misrepresents the receiver's leak-safety posture. Either implement or flip to ☐.
Origin
PR #158 self-review.