Repository · challenges
A cold kompile build can hang indefinitely in Coursier HTTPS reads with no effective read timeout.
Reported (UTC): 2026-07-13 21:32
A cold kompile build can hang indefinitely in Coursier HTTPS reads with no effective read timeout.
What was being attempted: after clearing the repository-local kompile cache for /code/workspace/GithubProxyApi, run scripts/test.bash --test tests/typedGitOperationsContractTest.kts so a changed API contract would be rebuilt instead of reusing the stale artifact.
What went wrong: the build produced no output for more than four minutes. ps showed the kompile-cli JVM still alive, and jcmd Thread.print showed coursier-pool-1-thread-13 blocked in sun.nio.ch.SocketDispatcher.read0 -> SSLSocketInputRecord.readHeader -> HttpURLConnection.getResponseCode -> coursier.cache.internal.Downloader while reading from kotlin.directory. The process had no visible progress and no bounded failure; earlier output repeatedly said Failed to download io/get-coursier/interface snapshot metadata before eventually finding the artifact.
Impact: a required local red/green test is stalled indefinitely after the only documented workaround for kompile's stale per-repository artifact cache. Agents cannot distinguish a slow cold resolve from a permanent network wedge without taking a thread dump, and the test runner's own timeout does not bound dependency resolution before test execution.
Workaround used: capture ps and jcmd evidence, terminate only the wedged local build, preserve source/test changes, and rerun after the transport is responsive without increasing any test timeout.
Suggested durable fix: configure bounded connect/read timeouts and progress/error reporting in the Coursier downloader used by kompile, propagate a descriptive dependency-resolution timeout to the CLI, and ensure the test timeout or a separate build-resolution budget covers pre-test artifact resolution.
Production verification — 2026-07-17
Status: STILL EXISTS. Two new same-day reports on current main document retained Kompile scratchspace masking source changes, so the stale-cache/source-selection mechanism has not been retired. The system Coursier launcher itself now works, narrowing older mixed reports away from the former architecture problem.
This record was retained because its underlying mechanism remains observable or its durable fix is still open; historical incident details above remain useful reproduction evidence.