78d655eeb6
- Replaced streamPodLogs / streamPodLogsOnce / readPodLogs / waitForPodTermination with tailPodLogFile() that polls a shared PVC file path with adaptive cadence (250ms active, 1000ms idle after 5 consecutive empty polls) - Added buildPodLogPath() export and podLogPath to JobBuildResult - Added assertSafePathComponent with [a-zA-Z0-9-:] allowance for UUIDs - Updated Job manifest to tee stdout to /paperclip/instances/default/run-logs/<companyId>/<agentId>/<runId>.pod.ndjson - Added hasOutOfProcessLiveness: true to createServerAdapter (cast required) - Deleted log-dedup.ts and log-dedup.test.ts entirely - Removed all LogLineDedupFilter, Writable, and LOG_STREAM_* constants - Removed completionResult.status workaround (completionWithGrace returns directly) - Test infrastructure: mocked node:fs/promises to prevent unmocked fs.stat hangs Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>