You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
In the published-SDK patch cohort, the published PHP 2.11.1 SQLite runtime refused a Python patch Worker's workflow-task poll with a typed 503, and the Worker exited.
Every PHP, embedded and Rust fixture record in the step passed first, including all operator-metrics cases.
scripts/conformance/server-parity/published-sdk-patch/python.py then started the published Python patch-replacement Worker against the shared published-PHP SQLite runtime.
Its workflow-task poll got 503 with poll_status: backend_lock_pressure and PHP's message Worker poll backend is temporarily locked.. The published SDK raised ServerError from poll_workflow_task and the Worker exited.
At the same time, the PHP maintenance container logged SQLSTATE[HY000]: General error: 5 database is locked on a TaskRepair update: 24 repairs completed and one candidate failed.
The Worker's deregistration got one 503 and then succeeded on retry.
This is a real refusal from the reference, not an observer artifact. published-sdk-patch/observe-http.mjs deliberately never retries /pollbackend_lock_pressure, even with DW_PARITY_PROXY_RETRY_LOCK_PRESSURE=1.
To decide
Cohort scheduling. The patch cohort runs PHP's maintenance loop and a polling Worker on one SQLite file. Should the cohort keep that contention, or give them a non-contending schedule, for example by pausing maintenance during the patch window? This must not hide the refusal.
SDK behavior.backend_lock_pressure is a typed, retryable poll refusal. The published Python SDK ends its Worker on it instead of backing off. If the SDK should back off, that is an SDK correction (General's scope) and the cohort keeps observing the published behavior until a corrected SDK is adopted.
Acceptance
The observer never retries /poll lock pressure invisibly.
Either the cohort shows no contention by construction, with evidence, or the SDK correction is linked and the cohort records the published behavior as a known reference outcome.
Native runs are unaffected. This happens only on the published PHP reference.
Owner: Rust Server (cohort harness). SDK question routed to General.
Current published Python 2.11.0 source confirms the specific gap in Worker.run_until(): its bounded helper rethrows workflow-poll failures and has no activity-poll recovery handler. The normal long-running Worker.run() loops already back off under #189. The helper should recover from a complete, correctly bound transient refusal inside its original remaining deadline, while preserving persistent timeout, stop, fatal/protocol errors and claim identity. Direct Client transport policy remains a separate layer.
General will reproduce the normally installed helper counterfactual, implement the focused correction and qualify a compatible patch before any adoption claim. Rust Server retains this cohort and exact frozen identities. The original failure remains failed, with no observer retry or budget change. Please preserve the actual installed SDK version/source in this finding; the source profile alone does not prove the effective failed-run identity.
Cohort scheduling (decision 1) is in #722: the SQLite patch-cohort PHP record runs with the maintenance loop stopped. The loop state is recorded and asserted (running, exited, running), and the loop restarts after the record or on failure. The observer still never retries poll lock pressure. The SDK behavior (decision 2) stays with sdk-python#218. The #707signals-before-worker instance was in the main SQLite PHP record, outside this cohort, and stays open here.
The SDK correction is published: durable-workflow (Python) 2.11.1 (sdk-python#218, comment 6379992991). Next: a reviewed fixture change that moves the published-sdk-patch cohort's frozen Python identity from 2.11.0 to 2.11.1, with installed identity evidence. The original 2.11.0 failure stays recorded as failed.
Activity
rmcdaniel commentedon Oct 23, 2026
Accepted SDK correction: Python #218.
Current published Python 2.11.0 source confirms the specific gap in Worker.run_until(): its bounded helper rethrows workflow-poll failures and has no activity-poll recovery handler. The normal long-running Worker.run() loops already back off under #189. The helper should recover from a complete, correctly bound transient refusal inside its original remaining deadline, while preserving persistent timeout, stop, fatal/protocol errors and claim identity. Direct Client transport policy remains a separate layer.
General will reproduce the normally installed helper counterfactual, implement the focused correction and qualify a compatible patch before any adoption claim. Rust Server retains this cohort and exact frozen identities. The original failure remains failed, with no observer retry or budget change. Please preserve the actual installed SDK version/source in this finding; the source profile alone does not prove the effective failed-run identity.
rmcdaniel commentedon Oct 24, 2026
Cohort scheduling (decision 1) is in #722: the SQLite patch-cohort PHP record runs with the maintenance loop stopped. The loop state is recorded and asserted (
running,exited,running), and the loop restarts after the record or on failure. The observer still never retries poll lock pressure. The SDK behavior (decision 2) stays with sdk-python#218. The #707signals-before-workerinstance was in the main SQLite PHP record, outside this cohort, and stays open here.Server parity: arm the maintenance restore before the stop and keep i…
Server parity: name the maintenance container from the job identity (#…
rmcdaniel commentedon Oct 24, 2026
The SDK correction is published: durable-workflow (Python) 2.11.1 (sdk-python#218, comment 6379992991). Next: a reviewed fixture change that moves the published-sdk-patch cohort's frozen Python identity from 2.11.0 to 2.11.1, with installed identity evidence. The original 2.11.0 failure stays recorded as failed.
Start SQLite's published PHP maintenance loop for both corpus parts