Conversation
|
The PHP SDK request foundation is now in draft PR #91 at It requires explicit Server capability discovery, validates the workflow/run acknowledgment and preserves the original request ID, deadline and opaque history refresh token. PHP exposes current-run and explicitly selected-run handle operations using its existing handle convention. Default protocol remains 1.19, and the PHP worker does not advertise cooperative cancellation support. Local qualification on PHP 8.4.26 passes the full 804-case source suite with 4,745 assertions and one existing skip, plus static analysis. The new request tests cover 26 cases and 72 assertions. The normal supported PHP and framework CI is running against the latest draft head. Fresh development installation identified an independent phpDocumentor dependency advisory. PR #92 fixed it with one advisory-specific resolution exception that remains visible to audits. Its normal CI, documentation, clean runtime dependency audit and unchanged blocking of the older Flysystem advisory were verified before merge. Next for PHP: consume canonical request/delivery history, replay cancellation at the recorded authored boundary, integrate lease-fenced delivery and history refresh, then qualify shutdown and cold replacement against the same Server candidate. Rust support and exact published artifact qualification remain required before the shared capability is enabled. |
PHP request and canonical history foundation verifiedExact source: Local qualification at this source on PHP 8.4.26 passes:
The tests exercise capability refusal before mutation, selected-run and namespace binding, scoped control credentials, duplicate requests retaining Server identity/deadline, malformed acknowledgment rejection, immutable canonical request/delivery state, wrong-run and changed-deadline rejection, reordered/duplicate markers, valid and invalid parallel/selection operation ranges, and preservation of earlier committed results, failures and selection winners. The local runner used an isolated path consumer for the SDK, PHPUnit 11.5.56 and PHPStan 2.2.16, with the repository's PHPUnit configuration and test namespace bootstrap. The ordinary CI uses the normal contributor This remains a draft. The canonical reader is not yet connected to replay, and the PHP worker does not advertise this capability. Next is to inject cancellation at the recorded authored boundary, commit delivery through the live task lease, reload canonical paged history and qualify cleanup shielding, worker lifetime and cold replacement against the connected Server candidate. Rust parity and exact published artifact qualification remain required before shared capability activation. Published protocol defaults remain 1.19. Cleanup is complete. Both clean task worktrees, all task dependency/build/cache/diagnostic directories, the temporary security negative-check consumer, and the local PHP tool image and its task layers have been removed. No task container or volume remains. No paid infrastructure was used or created. |
PHP replay and cleanup shielding implementedExact candidate source: Canonical delivery now throws
Local qualification on PHP 8.4.26, PHPUnit 11.5.56 and PHPStan 2.2.16:
The selection test starts with the retained runtime-produced selection fixture, preserves the committed winner, removes the pending loser's completion and verifies that cancellation targets its earlier operation range while cleanup follows the delivery slot. The local activity check proves that a pending request does not execute the callback. This remains source work in a draft. Claim/heartbeat negotiation, fenced delivery transport, canonical history refresh, local activity interruption, shutdown and real connected PHP Server qualification remain required. Default protocol remains 1.19 and the PHP worker does not advertise cooperative support. Rust parity and exact published artifact conformance remain required before the shared capability is enabled. |
Latest PHP source foundation verifiedExact source: The delivery client uses worker credentials, the selected namespace, current task/owner/attempt and the complete authored call range. Malformed acknowledgments and changed request, sequence, kind or operation range are rejected. Source qualification may select protocol 1.20 explicitly through the Client constructor. Default protocol remains 1.19, and the managed PHP worker does not advertise cooperative support. Local PHP 8.4.26 qualification passes 114 focused cooperative cases with 257 assertions and the complete ordinary source suite of 892 cases with 4,930 assertions, one existing skip and no failures. PHPStan and Replay/cleanup behavior and the 20 new replay cases are detailed in the preceding report. No SDK release or published capability claim is made from this source work. Next: integrate immutable claim/heartbeat observations, fenced delivery and canonical paged history refresh into Worker. Qualify in-flight local activities with and without user heartbeats, preserved earlier local reports, cleanup deadlines, shutdown and cold replacement against the same Server candidate. PHP synchronous callbacks require an explicit lifetime solution before the worker can advertise support. Rust parity and exact published artifact conformance remain required. The clean task worktree, dependency/build/cache data and PHP tool image plus its task layers have been removed. No task container, volume or paid infrastructure was created or retained. |
PHP Worker integration and connected qualificationExact PHP source: Ordinary CI, both public boundary checks and the complete connected MySQL run pass at this head, including target branch qualification. The connected job verifies the exact Server commit, runs real SDK worker processes against its isolated MySQL/Redis stack, and removes its containers, network and local images afterward.
Worker now observes immutable task/heartbeat requests, renews the exact lease fence, performs delivery through worker credentials, reloads every canonical history page through the Server-issued opaque token and proves the matching committed delivery before workflow cleanup. Lost or malformed replies cannot manufacture delivery. Earlier local reports commit before later cancellation. Unsafe claims are abandoned without an application failure event. Real connected history exposed a start-prefix defect: new histories begin with This remains a draft and source qualification. The no-user-heartbeat callback case proves rejection after a bounded callback returns, not interruption during an arbitrary blocking callback. Next PHP action is a deliberate execution-lifetime solution and real in-flight checks for cancellation, lease loss, shutdown, grace/deadline expiry and SIGKILL replacement, plus remote activity fencing. Rust parity and exact published Server/SDK conformance remain required before the shared capability is published or enabled by default. Existing terminal cancel/terminate behavior stays intact. Local task evidence is retained here before removing the clean worktree, dependencies, test/build caches, counterfactual files and tool image. No local Server stack, paid infrastructure or customer state was created for this qualification. |
October 1 source baseline at
|
|
The connected run at
|
PHP local activity lifetime qualified at
|
Bounded payload I/O implemented, October 1Current source is Optional bounded binary interfaces preserve ordinary transport signatures and settings. Cooperative registration rejects adapters that expose legacy binary I/O without bounded counterparts. The default cooperative transport requires Guzzle with cURL, forces complete-response mode even when the caller enables streaming, and uses Guzzle's finite temporary sink. Upload replies are capped at 64 KiB, successful downloads still require the exact declared size and metadata, and the Client preserves namespace, role and digest validation. Temporary storage spills to disk instead of retaining an unbounded transfer in memory. Large transfers must finish within the worker budget, so a slow link may be refused rather than pinning task ownership. Ordinary workers keep their existing settings and protocol1.19. Local PHP8.4.26 qualification passes 966 cases / 5,387 assertions / eight opt-in runtime skips, static analysis, the dependency boundary, Compose configuration and Ordinary public CI and explicit connected source qualification are running on this exact head. The connected suite now includes a unique namespace and a task-owned shared payload volume. An actual cooperative Worker must hydrate and complete a value above the ordinary 2 MiB request limit, with the stored result reference, bytes and digest checked. No connected pass is claimed yet. Existing Server/Python evidence remains retained. Next resolve these exact checks, then continue remote activity lifetime/fencing, graceful shutdown and active-task cold replacement. Rust parity and exact published-tuple conformance remain required before release/default activation. No Cloud deployment or stable release occurred. |
Payload bounds qualified on exact PHP source, October 1Exact PHP head Against exact Server Commands are the repository's opt-in Local PHP8.4.26 passes 966 cases / 5,387 assertions / eight opt-in runtime skips, static analysis, the dependency boundary, Compose configuration and Cooperative control I/O now shares one monotonic five-second budget across discovery, payload upload, the API response and hydration. Long polls retain their offered wait, followed by one five-second hydration budget shared by references. Guzzle's cURL complete-transfer mode and finite temporary sinks close the per-read timeout gap. Optional bounded binary interfaces preserve ordinary transport signatures. Whole-second transport limits may overshoot the final fractional second before the budget check rejects a late reply. Slow large transfers can be refused, and custom adapters/handlers must honor their bounded capability. No new dependency, published capability, stable release or Cloud deployment is claimed. Next: PHP remote activity lifetime/fencing, graceful shutdown and active-task cold replacement, then Rust parity and exact published-tuple conformance before release/default activation. Preserve terminal cancel/terminate behavior, user-heartbeat timeout semantics and at-least-once external effects. Existing Python remote proof fences heartbeat and late publication after canonical delivery. It does not prove an owning Worker can supervise a blocked remote callback without user heartbeats, so carry that distinction into the next shared-contract review. |
PHP candidate scope authoringStarting PHP source: d40fce7. Implement the next source component in SDK PR #91 and shared issue #136: Reject changed or malformed scope trees, command-sequence collisions, unknown Qualification: unchanged dependency lock, meaningful baseline failures, focused |
Request and capacity observations qualifiedPHP source 28ede57 adds UTC request Ordinary CI The exact other sources remain Server 785093feff1b44e92126be6f350c0c9bdb834886, In this successful execution the Python child claims its cancellation task and #136 stays open, PR 91 stays draft, protocol 1.20 stays unfrozen and published |
|
Refreshed exact-source qualification passed after incorporating the independently
The mixed PHP parent → Python child → Rust remote activity plus PHP local The real cleanup SIGKILL and replacement retain the same delivery boundary. Scope authoring still has 13 real history page requests, one side effect and a The Python timeout fix is delivered as ordinary protocol-1.19 SDK 2.3.9 in Next cancellation gate: implement and qualify scoped delivery and selective Raw connected artifacts are retained by the linked GitHub runs for 90 days. |
Selective callback supervisor foundationCandidate Eight added real-process cases cover stops before fork, before callback entry, Ordinary CI The exact-source connected rerun This is the process supervisor component. The prepared callback control path |
|
Committed single-call scope replay is pushed at The internal Replayer consumes the original unscheduled activity, timer, Local PHP 8.4 passes 1630 tests / 8059 assertions, zero errors/failures and Ordinary CI The mixed root cascade passes 237 assertions. Parent cleanup completes in This profile covers workflow-local cleanup with empty frozen projections. The missed Python recovery claim still needs an explanation or fix. These |
|
Prepared scoped local cleanup is pushed at The internal replay profile binds shielded sequential cleanup to the original Ordinary CI The new golden executes through the existing prepared-local source profile. Current connected qualification |
Remote callback-stop receipt recoveryPHP source The full PHP 8.4 suite passes 1689 tests / 8292 assertions, with 35 opt-in connected skips. Inventory verification retains every prior 1679 case once, adds eight receipt tests and two connected faults, and verifies all 108 installed package references against the unchanged lock. Static analysis and the dependency boundary pass. The published corpus consumer remains unchanged. The original connected run fails one remote Current ordinary CI and current connected qualification are pending. The latter adds a failed first stop-receipt write and a lost accepted reply against the exact Server/Native candidates. It retains the same Python/Rust/CLI tuple. Protocol 1.20 remains unfrozen and unpublished. Scope execution stays disabled in the Worker. The draft PR and #136 remain open for the remaining scope, published-artifact and fair competition acceptance gates. |
Bounded receipt recovery qualified at the current sourcePHP
Connected artifact Next: qualify live scope preparation/delivery and the original scoped receipt through callback supervision and replacement replay before enabling the Worker scope profile. Complete selective projections, descendant propagation and operator inspection across SDKs. Protocol 1.20 remains unfinished, unfrozen and unpublished. Published-artifact acceptance and the competitive comparison remain required. Shared #136 stays open. |
Scope preparation/delivery transport admitted behind the source profilePHP Focused checks pass 32 tests / 80 assertions. Full PHP 8.4 checks pass 1711 / 8351, zero errors/failures and 35 opt-in skips. All 1689 previous case identities remain once, 22 guard/fault cases are added, 108 locked dependency references match, and the published corpus consumer is unchanged. Static analysis and the public boundary pass. Current ordinary CI passes the PHP 8.1–8.4/framework matrix, regression corpus, packaging and docs. Hosted PHP 8.3 matches local counts and every case identity. Artifact 11321532854 is retained until January 3, 2027. The connected job was skipped in ordinary CI. The first full local run failed four orphan-process checks because its container lacked init. All four reported processes were stopped zombies under PID1. The corrected runner uses Docker init at unchanged source/dependencies/limits and passes the complete suite. The first run remains retained as failed evidence. Next is canonical preparation/delivery receipt validation, including the original frozen projection and authority ceiling, then live scoped callback/replacement qualification. Worker scope execution remains disabled, protocol 1.20 unfinished/unfrozen/unpublished and shared #136 open. The earlier intermittent remote Wait stall remains unexplained. The prior connected 34 / 1880 evidence qualifies receipt-repair source bdfc587. The new transport's live scope path remains unqualified. |
Canonical scope boundary receipt proofPHP The caller's original monotonic budget covers mutation, one transient lost-reply reconciliation and all history pages. Replacement claims preserve the original preparation and cancellation context. Missing operation addresses, pending stop, incomplete history, changed authority and repeated cursors are refused. These facts grant no callback authority, and Worker scope execution stays disabled. Final PHP 8.4 checks pass 1788 / 8485, zero errors/failures and 35 opt-in skips. Affected receipt/opening/replay/cleanup checks pass 240 / 636 without skips. All 1711 prior case identities remain once, plus 77 guard/fault cases. All 108 original locked references, the published corpus consumer and Native-generated scope fixture are unchanged. Static analysis and the dependency boundary pass. Ordinary CI passes the PHP 8.1–8.4/framework matrix, regression corpus, packaging and docs. Hosted PHP 8.3 matches every local case identity and the counts. Artifact 11321864340 is retained until January 3, 2027. Ordinary CI skipped the connected job. Dependency verification caught an omitted ignored lockfile in the first local archive. Those fresh-resolution runs are diagnostic evidence. The final qualification restores the original lock and repeats both negative controls and the complete checks. A missing nullable operation address also has a failing control before its explicit presence guard and a passing regression afterwards. This qualifies the internal receipt profile for empty member lists. Live scope Server/callback/replacement qualification, populated projections and portable scoped execution remain next. The prior connected root cascade is bound to receipt-repair source bdfc587. Protocol 1.20 remains unfrozen/unpublished and #136 stays open. |
Actual Server scope receipt qualification startedPHP Server has no public per-scope request endpoint yet. Admission uses an explicit Native fixture in the isolated testing app, limited to its synthetic workflow IDs. The fixture runs as UID/GID 1000 with bounded process time and a read-only source mount. It creates no published customer API. Ordinary CI passes at this head. Local PHP 8.4 and hosted PHP 8.3 match at 1790 / 8485, zero errors/failures, 37 opt-in skips and identical case inventories. All 1788 previous cases and 108 original installed references are preserved. The Client, receipt implementation and published corpus consumer are unchanged. Artifact 11323056465 is retained until January 3, 2027. Connected qualification is running with Server 92e9f12866be51e86d35b043597af3e705ff8122, Native 6fcba5c64e9c5f673969b04906a35717e4b83421, Python 3c77a01059964cd093f4d7214f1917741818c97a, Rust 08824f2950460ec590e2f16272adc6ddf9a890ed and CLI 933c554f8bffa2bf7d188ced712b69b20844ac2d. Its scope results are pending. Worker scope execution remains disabled, live callbacks/cleanup/replacement remain unqualified, and #136 stays open. |
Actual Server scope receipt qualification passedPHP Both new scope receipt cases pass real Server preparation, delivery and complete original-claim history paging. Ordinary and lost accepted replies preserve one Native request, preparation and delivery event, original context and +30-second deadline. Both read 14 single-event pages. Reconciliation keeps the original mutation body, owner and claim epoch. No claim is released and no extra task is created. Exact source tuple: Server Artifact 11323212087 contains source provenance, XML, full histories, mutation receipts and cascade inspection evidence, retained until January 3, 2027. The hosted stack/image teardown succeeded. Ordinary CI and the unchanged locked local source qualification remain passed at 1790 / 8485 with 37 opt-in skips. Scope request admission still uses a restricted Native fixture in the isolated testing app. There is no public per-scope request API yet. These cases qualify empty-projection receipts, not Worker scope execution, scoped callbacks or cleanup/replacement. The Worker scope execution capability remains disabled. Next: populated selective projections, groups and descendants, then live scoped cleanup/replacement across the SDKs and operator inspection. Specification freeze and exact published acceptance still follow. This draft and shared #136 stay open. |
Cooperative cancellation source candidate
Owning acceptance: durable-workflow/.github#136. Default protocol 1.19 remains published. Candidate protocol 1.20 is unfinished, unfrozen and unpublished.
Current PHP source:
667c11dd4d095d94feed73bd3b9f1cd1416bc973. The Client and receipt implementation are unchanged from qualified source c99564d.This draft implements cooperative requests, immutable context and lineage, child and activity policies, deterministic cancellation clocks, local callback supervision, and canonical scope authoring/replay. Capability checks refuse operations that a Worker or SDK cannot support. Callback supervision requires Unix CLI with pcntl/posix, bounded transport and callbacks that open fresh connections in their own process. External effects still need application idempotency, cooperation or reconciliation.
Canonical scope preparation and delivery
The internal client proves a single-call boundary with empty frozen member lists from complete original-claim history. It checks the authored scope tree, accepted request, lineage, v5 preparation, captured authority ceiling and committed delivery. Delivery requires a previously verified preparation. Changed preparation identity or deadline is refused even if a new response and history agree with each other.
Both phases, one transient lost-reply reconciliation and every history page share the caller's original monotonic budget. Original task, run, owner, claim epoch, namespace and authored operation range remain bound. A missing nullable operation address is refused explicitly. Pending activity stop, explicit refusal, incomplete history, repeated cursor or exhausted budget aborts without a delivery claim.
Preparation may be inspected before delivery. Ordinary cleanup replay still requires committed delivery. These receipt facts grant no callback authority. The Worker scope execution profile stays disabled and advertises no scope execution capability.
The internal Replayer separately supports an already-committed empty projection and sequential local cleanup in that delivered scope. Cleanup receipts retain all eight canonical identity, membership and budget fields, including the original preparation and captured authority ceiling. Cold replay retains the same boundary and fractional clock. Heartbeats cannot extend the ceiling, and an unaffected parent retains its own state.
Current source verification
PHP 8.4.26 passes 1790 tests / 8485 assertions, with zero errors/failures and 37 opt-in connected skips. All 1788 preceding case identities remain once, with two new connected scope cases. At unchanged receipt source c99564d, affected scope receipt, opening, replay and cleanup checks pass 240 / 636, without skips, including 77 receipt guard/fault cases. Static analysis and dependency boundary checks pass.
All 108 installed package versions and source/dist references match the unchanged original lock. The published Worker corpus consumer and the Native-generated committed-scope fixture are unchanged. Tests cover complete paging, canonical preparation/delivery, lost replies, replacement claims, borrowed proofs, changed deadlines and malformed history.
Current ordinary CI passes at the exact source across the PHP 8.1–8.4/framework matrix, regression corpus, packaging, docs, static analysis and boundary checks. Hosted PHP 8.3 matches local counts and every case identity. Artifact 11323056465 is retained until January 3, 2027. Ordinary CI skipped the connected job.
The first local archive omitted the ignored lockfile and resolved a fresh dependency set. Dependency verification rejected that as baseline qualification. The original lock was restored, both negative controls repeated, and the final full/focused/static/boundary runs passed at its exact references.
Connected scope controls qualification
Source qualification passes at the current head with the same exact Server/Native/Python/Rust/CLI tuple listed below: 36 scenarios / 2002 assertions, zero errors/failures/skips, plus memo restart 1 / 67. All 34 preceding connected cases remain present once. Artifact 11323212087 retains full source provenance, XML, histories and transport receipts until January 3, 2027. Hosted stack/image teardown succeeded.
Both new scope cases pass actual Server preparation/delivery and original-claim paging. Ordinary and lost accepted replies retain one original Native request, preparation and delivery event, context and +30-second deadline. Both read 14 single-event history pages. Neither releases the claim nor creates another task. The repeated mixed-language root cascade passes 237 assertions in 23.05 seconds.
Request admission uses an explicit Native fixture in the disposable testing application, restricted to its synthetic workflow IDs. Server has no public per-scope request API yet. The fixture runs as UID/GID 1000 with bounded process time and a read-only source mount. These passing receipt cases grant no scope execution capability. Live scoped callbacks, cleanup and replacement remain separate gates.
Earlier connected root qualification
Receipt-repair source
bdfc5871629de5fe1bda5edd6272347240731679passes connected qualification: 34 scenarios / 1880 assertions, zero errors/failures/skips, plus memo restart 1 / 67. Artifact 11321860246 is retained until January 3, 2027.That exact tuple uses Server
92e9f12866be51e86d35b043597af3e705ff8122, Native6fcba5c64e9c5f673969b04906a35717e4b83421, Python3c77a01059964cd093f4d7214f1917741818c97a, Rust08824f2950460ec590e2f16272adc6ddf9a890edand CLI933c554f8bffa2bf7d188ced712b69b20844ac2d. The mixed-language root cascade passes 237 assertions in 22.15 seconds. Failed first receipt write and lost accepted reply preserve one original Native history identity, request and deadline, with genuine callback stop. Discovery/reporting share five seconds, capped by the original cleanup deadline.The original intermittent remote
WAIT_CANCELLATION_COMPLETEDstall remains unexplained. Passing receipt fault tests and later connected runs do not establish its original cause. The missed Python recovery claim and Server MySQL interruption canary also remain unresolved.Remaining acceptance
Qualify populated selective projections, groups, descendants, live scoped cleanup and replacement across PHP/Python/Rust before enabling scope execution. Finish operator inspection and fair competitive qualification, freeze the specification, then publish and verify the exact artifacts.
The final demonstration requires a PHP parent, Python child, Rust remote activity and PHP local activity. One root identity and original +30-second deadline must survive duplicate requests, activity stop without application heartbeats, stale publication, cleanup SIGKILL and replacement replay. All runs must reach Cancelled before that deadline, with one API/CLI/Waterline cascade view.
This PR and shared #136 remain open.