Add a 1-hour age filter to the orphan-process cleanup step so sibling self-hosted runners on Grogu don't kill each other's in-flight test processes.
Context
Grogu (24-core / 128 GB) will host 3 self-hosted runners to parallelize the 13-SPM matrix from ~13 min serial down to ~5 min wall-clock. The cleanup step currently kills ANY `xctest` / `swift-test` / `swift-driver` it sees, which means as soon as a second runner runs concurrently, they nuke each other.
Filter
`ps -o etime` produces three formats:
`MM:SS` (< 1 hour) — skipped
`HH:MM:SS` (≥ 1 hour) — killed
`DD-HH:MM:SS` (days) — killed
Real CI jobs complete in <10 min; zombies from interactive Xcode use are typically hours/days old. 1-hour cutoff separates the populations cleanly.
## Summary
Add a 1-hour age filter to the orphan-process cleanup step so sibling self-hosted runners on Grogu don't kill each other's in-flight test processes.
## Context
Grogu (24-core / 128 GB) will host 3 self-hosted runners to parallelize the 13-SPM matrix from ~13 min serial down to ~5 min wall-clock. The cleanup step currently kills ANY \`xctest\` / \`swift-test\` / \`swift-driver\` it sees, which means as soon as a second runner runs concurrently, they nuke each other.
## Filter
\`ps -o etime\` produces three formats:
- \`MM:SS\` (< 1 hour) — skipped
- \`HH:MM:SS\` (≥ 1 hour) — killed
- \`DD-HH:MM:SS\` (days) — killed
Real CI jobs complete in <10 min; zombies from interactive Xcode use are typically hours/days old. 1-hour cutoff separates the populations cleanly.
## Validation
Tested against synthetic ps output:
\`\`\`
PID 12345 5m xctest → skip (<1h)
PID 22222 30s swift-test → skip
PID 33333 30m swift-test → skip
PID 44444 50m xctest → skip
PID 11111 1h23m xctest → KILL (≥1h)
PID 67890 1d5h xctest → KILL (days)
\`\`\`
Only 11111 and 67890 emitted. Single-runner behavior unchanged.
## Test plan
- [ ] Merge to develop, watch the resulting CI run.
- [ ] Confirm cleanup step still runs and reports its action.
- [ ] No regression on current Grogu-jarvis single-runner setup.
Closes #188
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Add a 1-hour age filter to the orphan-process cleanup step so sibling self-hosted runners on Grogu don't kill each other's in-flight test processes.
Context
Grogu (24-core / 128 GB) will host 3 self-hosted runners to parallelize the 13-SPM matrix from ~13 min serial down to ~5 min wall-clock. The cleanup step currently kills ANY `xctest` / `swift-test` / `swift-driver` it sees, which means as soon as a second runner runs concurrently, they nuke each other.
Filter
`ps -o etime` produces three formats:
Real CI jobs complete in <10 min; zombies from interactive Xcode use are typically hours/days old. 1-hour cutoff separates the populations cleanly.
Validation
Tested against synthetic ps output:
```
PID 12345 5m xctest → skip (<1h)
PID 22222 30s swift-test → skip
PID 33333 30m swift-test → skip
PID 44444 50m xctest → skip
PID 11111 1h23m xctest → KILL (≥1h)
PID 67890 1d5h xctest → KILL (days)
```
Only 11111 and 67890 emitted. Single-runner behavior unchanged.
Test plan
Closes #188
🤖 Generated with Claude Code