Bug fixes to CI log output and logger concurrency. No API changes.
Fixes
Valid GitHub log groups, and only on GitHub (#113)
::group::was emitted wheneverCI=true. It is GitHub syntax, so every other provider printed literal::group::namelines instead of a header. Now gated onGITHUB_ACTIONS; other providers get the styled header that local runs already got.- Nested groups produced invalid output — GitHub does not support nesting, and a second
::group::before the first closes swallows the rest of the log. Depth is tracked so only the outermost pair is emitted. - An unmatched
EndGroupemitted a stray::endgroup::, closing whatever GitHub had open around it. It is now a no-op, which lets a caller skipBeginGroupconditionally without mirroring that condition on the way out. - Group names are escaped per GitHub's spec; an unescaped newline previously ended the command early and leaked the remainder as ordinary log lines.
Logger mode concurrency (#112) — Std{Out,Err}Writer flip the logger mode on every write, so a command's stdout and stderr could race on it. The mode field is now guarded and the flip/render/restore sequence serialized.