diff --git a/doc/architecture/runner-pi-capabilities.md b/doc/architecture/runner-pi-capabilities.md index b18994cbbd9..ff997669840 100644 --- a/doc/architecture/runner-pi-capabilities.md +++ b/doc/architecture/runner-pi-capabilities.md @@ -412,8 +412,12 @@ Product fixture. Canonical classification is `transient_infrastructure`, with zero provider prompts and two unchanged post-attempt key-billing observations. The fixture directory is gone and no matching process remains. A later read-only host snapshot shows 87,263 of 87,381 SysV semaphores in use, supporting a resource -constraint; the original bootstrap stderr is unavailable, so its exact cause is -not claimed. No unrelated database or IPC object was changed. Further paid +constraint. A separate disposable diagnostic then reproduces the cause with the +same pinned PostgreSQL binary: `semget(..., 17, 03600)` fails with `No space left +on device` when only 16 semaphores are free. It exits in 0.557 seconds, removes +its temporary directory, leaves no child process, and leaves IPC totals unchanged. +The original Product bootstrap stderr remains unavailable. No unrelated database +or IPC object was changed. Further paid qualification is held until a supported database resource path is available. diff --git a/packages/paperclip-runner/test-fixtures/pi-acp/product-plan-infrastructure-failure.v4.darwin-arm64.json b/packages/paperclip-runner/test-fixtures/pi-acp/product-plan-infrastructure-failure.v4.darwin-arm64.json index 19b954ac6fa..c03ec81101c 100644 --- a/packages/paperclip-runner/test-fixtures/pi-acp/product-plan-infrastructure-failure.v4.darwin-arm64.json +++ b/packages/paperclip-runner/test-fixtures/pi-acp/product-plan-infrastructure-failure.v4.darwin-arm64.json @@ -61,8 +61,40 @@ "attemptFixtureRemoved": true, "scope": "read-only host capacity observation; unrelated IPC resources untouched" }, - "inference": "Near-limit SysV semaphore usage supports host resource exhaustion, but the exact initdb cause is unproven without original stderr.", - "unrelatedProcessesOrIpcModified": false + "inference": "A later credential-free initdb invocation of the same pinned PostgreSQL binary reproduced semaphore exhaustion with16 free and17 required. The original Product bootstrap stderr remains unavailable.", + "unrelatedProcessesOrIpcModified": false, + "disposableReproduction": { + "nativePackage": "@embedded-postgres/darwin-arm64@18.1.0-beta.16", + "initdbSha256": "5a6ad92c2ce915b1a13aa2f8f2b2199996daf0cbe6b9f1d0044a387303b368ec", + "arguments": [ + "--pgdata=", + "--username=paperclip_fixture", + "--auth=trust", + "--encoding=UTF8", + "--locale=C", + "--no-sync" + ], + "before": { + "sets": 5141, + "used": 87365, + "limit": 87381, + "recordedAt": "2026-09-28T22:17:28.611679+00:00" + }, + "after": { + "sets": 5141, + "used": 87365, + "limit": 87381, + "recordedAt": "2026-09-28T22:17:29.168791+00:00" + }, + "exitCode": 1, + "durationSeconds": 0.557, + "error": "FATAL: could not create semaphores: No space left on device", + "failedSystemCall": "semget(..., 17, 03600)", + "processGroupRemaining": false, + "temporaryDirectoryRemoved": true, + "providerCalls": 0, + "postgresServerStarted": false + } }, "independentCleanup": { "fixtureDirectoryRemoved": true,