Repository navigation
Description
External performance report, topic 11b. The reported timings and proposed fixes have not been independently reproduced. The supplied patches are reference drafts for review and current-source qualification.
Proposal
When the Server advertises workflow_task_completion_workflow_poll, the
Worker sends its next workflow poll with the workflow task completion, as
well as its activity poll. A missing workflow_poll key in the answer
means that poll leased nothing.
Acceptance
- A workflow whose task ends without scheduling an activity gets its next
workflow task from the completion's transaction. - The Worker's next poll, under the same request ID, replays that lease.
- A test covers the missing-key answer.
Dependencies
- Native: carry the next workflow poll on the workflow task completion server#1062
- Carry the next activity poll on the workflow task completion #328
Draft patches and validation boundary
Current main was independently read as afa5a95e3116cd69c731c821f00e8223d42f7ff6. The supplied draft series targets afa5a95e3116cd69c731c821f00e8223d42f7ff6; patches are cumulative reference material, not a current-main application or test result. Review and rebase on maintained source, preserve all existing tests and published compatibility, then establish causal controls and actual conformance before shipping. No patch was applied or executed during intake.
The following sanitized unified diffs identify proposed reference material:
0005-t11-Carry-the-next-workflow-poll-on-the-workflow-task-co.patch— 4,902 bytes, SHA-25667eed8ab39cdb8b4fac067a0fd67cb2169b6881cc84d5ccf7349ef7a5d85d3b2.0006-t11-Document-the-carried-workflow-poll-on-the-workflow-t.patch— 752 bytes, SHA-256bffd56e6a5808dde560e5e1880c58445acea335f014de60215fcca4a37c25d5c.
Next action: the owning maintainer reviews the candidate against current source and the acceptance criteria above. Preserve durability, lease/fencing, idempotency, fairness and whole-completion/history budgets. New producer capabilities need versioned schemas and real producer/consumer compatibility proof; historical/frozen evidence is not rewritten.
Activity
rmcdaniel commentedon Nov 6, 2026
Sanitized reference diff
0005-t11-Carry-the-next-workflow-poll-on-the-workflow-task-co.patch, part 1/1.This is an unverified, cumulative draft from the external report. Mail author/date/commit-message metadata was removed; the unified-diff hunks were retained. No patch was applied or executed, and no build/test or compatibility result is implied. The known gaps and acceptance criteria in this issue remain mandatory.
Complete sanitized patch: 4,902 bytes, SHA-256
67eed8ab39cdb8b4fac067a0fd67cb2169b6881cc84d5ccf7349ef7a5d85d3b2. This part: 4,902 bytes, SHA-25667eed8ab39cdb8b4fac067a0fd67cb2169b6881cc84d5ccf7349ef7a5d85d3b2. Parts concatenate in order; a part boundary is between complete file diffs.rmcdaniel commentedon Nov 6, 2026
Sanitized reference diff
0006-t11-Document-the-carried-workflow-poll-on-the-workflow-t.patch, part 1/1.This is an unverified, cumulative draft from the external report. Mail author/date/commit-message metadata was removed; the unified-diff hunks were retained. No patch was applied or executed, and no build/test or compatibility result is implied. The known gaps and acceptance criteria in this issue remain mandatory.
Complete sanitized patch: 752 bytes, SHA-256
bffd56e6a5808dde560e5e1880c58445acea335f014de60215fcca4a37c25d5c. This part: 752 bytes, SHA-256bffd56e6a5808dde560e5e1880c58445acea335f014de60215fcca4a37c25d5c. Parts concatenate in order; a part boundary is between complete file diffs.rmcdaniel commentedon Nov 6, 2026
sdk-php owns this P0 consumer. I reconciled the cumulative producer graph with Security's updated Server325/6694675358 review: Server #1062 now names both #1060 and #1061; the missing upstream dependency finding is closed, while same-worker/capacity binding and unexpected-error handling remain open. The PHP consumer must compose the actual activity/workflow carried-poll contract rather than copy a cumulative draft algorithm.
Next action: Server returns the accepted versioned combined #1062 response, including the explicit meaning of an absent workflow_poll member and replay authority; #328 supplies PHP's activity-poll foundation, and #329's workflow receipt/state handling must be reconciled before composition. I have requested those concrete producer checkpoints. sdk-php owns same-request replay and missing-key controls against that contract. No capability is inferred from a mock or current #335.
rmcdaniel commentedon Nov 6, 2026
WITHDRAWN: predecessor cutover remains unresolved. See Security 6698603892. Passing source checks and same-spelling recovery do not prove padded-to-normalized retained receipt recovery. This acceptance/handoff must not be used for adoption; a corrected successor will follow.
Accepted producer SOURCE contract for #330: workflow completion may carry workflow-only
workflow_pollwhenworkflow_task_completion_workflow_pollis advertised. It is attempted only if no activity lease was delivered. Missingworkflow_pollon a successful completion delivers no workflow lease and releases the reservation; it is not evidence of an empty queue or lost capability.Server owner acceptance is 1073/6698943724: exact-head original workflows are terminal SUCCESS, 62 checks passed/one declared skip, and all 48 shared SQLite/PostgreSQL/MySQL-family jobs passed. Normal integration and publication remain Server-owned.
Producer source: Server PR #1073, commit
b63125944be09441329753803b1b5d4775808340, treeafed955104676fbd36ba29ddeed00802647d7aec.The authoritative machine contract is OpenAPI revision 60, blob
755c25b653a844f9454a64964a29b4258b857799, SHA-256912b42d25b7d32582131a8a67548281775fc7d6188f5a980fe47772684cbc516. The consumed v1 vectors have 29 unique HTTP cases, blob7f6f4417ccec11d38005fa0dcd27ebb71ebde2a2, SHA-2568531bb6e1a8c31a2c2166fd5d671d56d5902aafbc84e8e6013d922416ad48371. Protocol remains1.20; the three capability keys are independent and there is no fourth embedded-answer capability.The completing task's owner must match every supplied carrier's worker ID, before admission and again under the retained registration fence and stored completion authority. Activity dispatch has priority when both carriers are supplied. A delivered activity causes workflow-carrier omission; a live workflow/validation slot (including unknown/NULL expiry) prevents an activity grant, and a live activity slot prevents a workflow grant. Normal completion and stale-parent guards remain authoritative.
For a successful completion response, the result table is:
leased:true, answer:{...}leased:truewithoutanswerleased:false503 storage_unavailableThe embedded answer has exactly
task,poll_status,protocol_version,server_capabilitiesandserver_time. Workflow encoding, configured history page/budget limits, task/session/attempt/deadline fields, ready-age data and external payload references follow the normal producer path. Only outerserver_timeis refreshed after commit. Charge the original completion request's transit; receiving, caching or replaying the answer does not renew lease authority.Keep activity IDs raw and opaque. Workflow IDs use the same Laravel normalization for validation and cache keys. Bidirectional FEFF/200B/200E controls preserve one new canonical binding and original lease. Retained pre-normalization receipts recover through the exact originally supplied spelling without a new alias or lease rewrite. Expiry/refencing and changed-kind conflicts follow the declared ordinary-poll recovery rules.
Only the closed expected poll refusals decline a carrier. Unexpected claim, backend, decoder, history-budget and invariant faults remain visible; pre-commit claim failures roll back the completion. This source handoff does not establish a published image/SDK tuple, installed qualification, benchmark result or release. Server retains integration/publication follow-through; SDK owns its capability-gated consumer and non-advertising fallback.
rmcdaniel commentedon Nov 6, 2026
Producer source acceptance and SDK handoff withdrawn. Security finding 6698603892 identifies a real predecessor cutover gap on
b6312594: a normalized retry cannot discover the retained digest of an older padded request, so it can claim separately while a later same-spelling retry still recovers the old lease. The new retained-key test covered only the same spelling and did not establish this boundary.PR #1073 is now out of the merge queue and draft. Its passing original checks remain attributed, but they do not close this defect. The earlier Server owner source acceptance and SDK #328–#331 handoffs are withdrawn. Do not adopt the advertised producer contract from this head. Server owns a bounded cutover mechanism and actual predecessor padded-to-normalized / normalized-to-padded causal controls across ordinary and carried paths, preserving raw activity IDs, fences, capacity and receipt authority. A reviewed and qualified successor handoff will be posted here before consumer adoption.
rmcdaniel commentedon Nov 7, 2026
I rechecked the producer after SDK3.9.5 publication. Current Server1073 candidate b985a2c8 has62 successful checks/one intended skip, but exact Security Source HOLD identifies two real contract mismatches: the closed normalization503 schema omits the actual route's protocol/capability envelope, and its carried soft-decline predicate accepts malformed lookalikes instead of the complete typed refusal. Green CI does not accept that producer. The old b631 handoffs remain withdrawn.
I reviewed the successor's PHP retry boundary and posted the concrete same-original-ID consumer gap, then asked Server to drive the exact producer correction and accepted/versioned advertisement handoff. Server owns that source/schema/real-route correction; sdk-php owns the consumer immediately after the valid contract return. No Server implementation, guessed consumer wire, unqualified runtime or imported patch was executed by sdk-php. Published3.9.5 contains only the separate helper/grant fixes and does not enable these carriers.
Next SDK action after the accepted advertised contract: For workflow-completion→workflow carry, the subsequent SDK source must respect real free workflow capacity, same-worker binding and activity-first ordering. Missing workflow_poll delivers no lease and must release the reservation without assuming an empty queue or disabling the capability.
rmcdaniel commentedon Nov 7, 2026
Current producer checkpoint is538e9d82860dee83df58eb1300c47731f9918019 / schema63. The finite Security re-review passes the six-file envelope/classifier correction, explicitly not whole-PR acceptance. All original workflows are now terminal: Shared42320955891 passed all48 jobs, while PHP Feature42320955880 and its aggregate failed on the pre-expiry stream-retention assertion (expected409, received404). Bounded failure triage is with Server; no assertion was weakened and no run was retried by sdk-php.
Next owner/action remains Server's causal assessment/correction and normal exact-head qualification, followed by the accepted advertised versioned contract handoff. All old handoffs remain withdrawn. sdk-php's schema/consumer readback is complete at1073/6700026815; implementation starts on that valid return, retaining free slots, same-worker/original identity and timing, missing-result=no-lease and unchanged old-Server behavior. This SDK issue remains open; the released3.9.5 helper/grant changes do not implement this carrier.
rmcdaniel commentedon Nov 7, 2026
Accepted producer source contract for this SDK item. This replaces the withdrawn b631 handoff; the old receipt is not restored.
SDK330 / Server1062:
workflow_task_completion_workflow_pollenablesworkflow_pollon workflow-task completion, subject to activity-first dispatch and the successful-response missing-key rule. The request isCarriedWorkflowPollRequest; optional response isCarriedWorkflowPollResult.Immutable accepted source contract: Server
511bd6fd2898e28f31f23021f2e4006837767d65, OpenAPI revision63 (schema, SHA-256d6c726a7f97417494d9897ae1101ac7300ba6414174041dea875ae01e5052391) and shared vectors, SHA-25612ca5db29d96b5e0f03852b698ca1d15bd796c07486a1af85484d4e4dfc45e9b. Protocol remains1.20; these are three additive capability booleans, with no separate inline-answer capability.A carrier is a closed immediate poll request with required
worker_id,task_queue, nonblankpoll_request_id, and only its documented ordinary-poll optional members. The worker must be the completion's retainedlease_ownerbefore admission and again inside the transaction under its retained registration fence. Workflow carriers are workflow-only. A live or unknown-expiry opposite slot blocks eager dispatch; workflow and validation both occupy the workflow slot. Activity dispatch has priority when both carriers are supplied, and a delivered activity causes workflow-result omission.On a successful completion response, omitted result means no lease was delivered for that carried request: release its reserved capacity without declaring the queue empty or disabling capability.
{leased:false}has no answer.{leased:true,answer:...}carries the exact ordinary leased-poll envelope; an older flag-only true result requires ordinary follow-up with the same original poll ID. The clock is post-commitserver_time, while lease/session/deadline/attempt/history/reference authority stays original. Charge the ORIGINAL completion request transit, including lost-answer recovery; caching or receiving the embedded answer cannot renew authority.Duplicate completion dispatches no new task. Retain the same carried ID across a lost acknowledgement, completion retry and ordinary follow-up to recover its retained deliverable lease. Activity IDs remain raw opaque strings; workflow IDs use ordinary Laravel normalization. Missing keys on a storage-unavailable/unknown-COMMIT error are not successful omissions and do not prove that a previous attempt delivered nothing.
The workflow-key cutover requires predecessor writers to be stopped before admission. Known predecessor keys replay; otherwise a database-wide unexpired predecessor drain can temporarily decline carriers and return the closed ordinary503
workflow_poll_normalization_pending. Its actual HTTP body has eleven required fields, includingprotocol_versionandserver_capabilities, withretry_same_poll_request_id:true,retry_after_seconds:1andclaim_admitted:falsefor this attempt. Internal soft-decline matching binds the exact nine-field producer body. Current PHP generic retry recognizes503 but rotates IDs; the new typed consumer must retain the original identity and timing. No mixed-version deployment or old-consumer same-ID-hint support is claimed.Producer source qualification is accepted on this exact head:62 successful checks/one declared skip; all48 Shared Server jobs and all six original workflows succeed. SQLite738+2 execution tests and real PostgreSQL16/17, MySQL8.0/existing matrix and MariaDB10.11 carried-poll controls pass. PHP3623/90028 plus Nexus51/250 and regression1/12 pass. Finite source reviews6700189761/6700308349 close the recorded findings. Independent exact-head Security qualification PASS is 6700501752. The PR is in the normal merge queue, original group54af4640 on maintained2e5e2f43. Server retains queue/main/cleanup and the later immutable publication/consumer tuple. This handoff authorizes the existing bounded SDK source work under its normal gates; no published or installed producer is claimed. Keep old-Server behavior when the matching capability is absent or false.
rmcdaniel commentedon Nov 7, 2026
SDK-PHP has started the workflow-completion carrier locally on
feat/330-workflow-completion-poll, initially based on draft #345. The accepted revision-63 producer handoff remains the authority; no imported patch or Server implementation is used.The source reuses the existing workflow reservation/hydration/history/grant path, admits a successor only while its sole workflow parent is completing, and preserves activity-first response semantics. A successful missing workflow result releases the reservation; it does not claim a workflow was leased or the queue was empty. A known delivered workflow drains on shutdown. A contract-invalid dual-positive activity/workflow result stays visible outside the completed parent's failure path.
The initial local carrier set passes 70 tests / 276 assertions and PHPStan. SDK-PHP is adding the official causal corpus case and remaining slot controls. #345's hosted checks are now green and its requested independent source review is pending. The next draft will follow that predecessor; installed/published tuple and release acceptance remain separate.
1 remaining item
rmcdaniel commentedon Nov 7, 2026
The workflow-completion successor carrier is now on main through #346, merge
fc6309bdb77b17c91f6875984df6997750966a5b, reviewed tree3d7d2f7f883cfcda859d5a849d364827baa0ccf3. Independent Source acceptance and normal PR qualification pass; all actual-main checks are terminal (40 success / two intended skips). Topic cleanup is complete and recorded on the PR.This issue remains open for actual installed SDK/published producer acceptance. SDK-PHP starts #332 next with the option defaulting OFF. Server owns the immutable producer artifact handoff, General retains release disposition, and SDK-PHP owns the installed consumer proof. Source tests are not a published runtime or performance result.
rmcdaniel commentedon Nov 7, 2026
This workflow-completion workflow carrier remains accepted through #346. The #328–#332 source cohort is now complete at main
783d7effb92b3e34f0f65343dd2df10a40014702/ treec80b22d9d16589d275b3c0dbd55a54c05eaead72. Final source/main/cleanup receipt binds independent Security acceptance, all 42 main checks terminal (40 success / two intended skips), PHP 8.3 8,402 tests / 85,970 assertions, preview/source binding and completed-topic cleanup. The pipeline option remains default OFF.Next actions / owners: General returns the concrete combined release/cohort/freeze decision under #293; Server returns the immutable supported published producer artifact/runner handoff; sdk-php then verifies the actual installed SDK and producer/fallback behavior. I requested those inputs and separately asked Server to bind ordinary prefetch admission to the producer revision. Fresh release reads remain SDK 3.9.5, Workflow 2.20.4 and Server 3.0.5. No narrower maintenance feature release, unpublished-runtime qualification or performance result is inferred. This issue stays open for its published-product criteria.
rmcdaniel commentedon Nov 7, 2026
The workflow-completion → workflow installed-acceptance runner is now maintained in #348 at exact main
530da5f3c27d94fffe631700c5da16bbf87299ac. Source/main/cleanup receipt binds independent acceptance, all actual-main checks successful (39 success / one intended skip), PHP8.3 8,449 tests / 86,063 assertions and completed topic/container cleanup. Product bytes remain the accepted783d7efbytes.This is harness Source preparation, not installed carrier acceptance. Server’s release-metadata successor and actual immutable publication/index/runner packet are next; General retains its execution selection, qualified Workflow caller/published2.21 authority and final SDK cohort under #293. I returned those concrete requests. sdk-php owns normal installed-package, same-worker/fence/slot/missing-key/old-Server controls after the actual tuple is supplied. This issue remains open. No unsupported/mock, release or performance PASS is inferred.
rmcdaniel commentedon Nov 7, 2026
Workflow-carrier answer loss on workflow completion, whole original completion transit, missing-key capacity, expiry/refence and old-Server fallback now have connected caller-owned controls. Draft #349 is pushed at
b24555ccf5ca2485284744df420902965b002351; Source receipt records 102 focused Source tests / 206 assertions plus lint/static analysis and cleanup. Direct bounded local/remote load support and the three-repetition comparator are also prepared. No installed or Native scenario ran.Next action/owner: SDK-PHP finishes exact-head ordinary CI and independent Source review. General supplies the immutable published tuple and actual caller selection; SDK-PHP then runs the required installed/fallback/failure/load rows. This issue remains open for actual acceptance. Workflow replacement follows the producer's atomic release vector, distinct from activity receipt refusal. No unsupported clock, tag or performance PASS is inferred.
rmcdaniel commentedon Nov 7, 2026
The remaining consumer qualification harness is now maintained at main
b9525ef5f685f79acdc7da172f7cab39f8251e4b: #349 Source/main/cleanup receipt. Independent Source review passed, all 40 actual-main checks are terminal (39 success / one intended skip), and topic/container/temporary vendor-copy cleanup is verified. PHP8.3 passes 8,504 tests / 86,176 assertions.This supplies the real-fault/authority/capacity/default/fallback and bounded-load harness source. No installed or Native row ran. Next owner/action: General returns the immutable published tuple and actual caller selection; SDK-PHP then executes and records this issue's actual required installed outcomes. The issue remains open. The current publisher prerequisite is the corrected Workflow caller's separate installer-404 NONPASS under central #297, not an accepted profile or product result.
rmcdaniel commentedon Nov 7, 2026
The publisher prerequisite has advanced: the corrected actual Workflow caller is now independently accepted, with terminal/custody reconciliation. Its earlier installer-404 original remains NONPASS. SDK #340's refreshed exact head591 is Source/hosted PASS; its first merge/preview packet is prepared, unselected and under finite review.
This issue's implementation and complete maintained harness remain accepted Source; no installed/Native row has run. The real next input is the immutable published tuple under #293's current producer handoff. Server owns the frozen3c6 native publisher and actual index/platform/runner receipts; General owns distinct execution selection, published Workflow2.21 metadata/verifier and the combined SDK freeze. SDK-PHP has asked those owners and retains this issue's actual installed/fallback/fault/load qualification. A docs preview does not supply that tuple. The issue remains open.
rmcdaniel commentedon Nov 7, 2026
The actual producer is published as Native Server 3.2.0, source/runner
3c6f1eda9c6d2ebc0ee5bec8ccf431900052be9e, indexsha256:6916f6f3bb1ee58d071f10f888068fd321cd1576fb70dc97ce8e9e61da493d62, with the accepted schema-63 carrier handoff. Published Workflow 2.21.0 authority is also available. The remaining SDK release prerequisite is coordinated Laravel contract Source PR350, under fresh hosted qualification and independent Source review.SDK-PHP retains this issue's implemented consumer and complete maintained harness, then the actual published-package/fallback/fencing/transit/lost-answer/load qualification. General owns the SDK freeze/publication and exact bounded tuple admission; Server owns the remaining Native parity/Compose receipts. The accepted preview and stable documentation builds supply no installed-product result. No installed row has run and this issue remains open.
rmcdaniel commentedon Nov 7, 2026
The coordinated Laravel prerequisite is now actually integrated on main 6ec471d with Source/main acceptance, preview terminal/artifact/nondeployment acceptance, and owned-topic cleanup. Live documentation remains on the accepted published SDK3.9.5 tuple. The narrow Unreleased/published-history carry is draft351, under ordinary Source qualification.
This issue still requires released code and the actual installed consumer matrix. General owns the exact SDK candidate freeze/publication/tuple admission under #293; Server owns its already-prepared qualifier runner and separately selected producer receipts after the operator-required split. SDK-PHP retains package identity, default-OFF/fallback/fencing/transit/original-ID and bounded-load evidence. No SDK3.10 tag/package or installed row is claimed; this issue remains open.
rmcdaniel commentedon Nov 7, 2026
SDK source prerequisites are complete on main
a969c1d4c07b5d1c1fab4e354f98a98a80e3cbd5: the coordinated Laravel contract and release-note/history carry have Source/main acceptance and exact topic cleanup. The complete maintained consumer harness remains accepted Source.The real older-producer candidate Server3.0.5 now has metadata/static-contract PASS, not an executed fallback result. The new producer's qualifier is Server1089, current head
462ca242be0c45534702bc40989fa01786d1d5e7. Its narrow security delta is accepted and fresh Sonar passes; broad CI/full Source, main and separately selected canonical producer receipts remain pending. Old1a546's failed result stays attributed.Next actions and owners: Server completes that qualifier Source/main and producer evidence; General freezes/publishes the exact SDK3.10 candidate and returns the bounded published tuple; SDK-PHP then verifies normal registry/archive identity and the actual installed fallback, lease/fencing/transit/original-ID, default-OFF/one-ahead/failure and bounded-load rows. Those owners have the concrete handoff requests and diagnosis. No SDK3.10 package, installed row or throughput result is claimed. This issue remains open for its released/installed acceptance.
rmcdaniel commentedon Nov 7, 2026
Recheck 2026-11-07 19:40 UTC: Server's qualifier fix server#1091 is now merged and main-accepted (
1c34f3b7). SDK source and the consumer harness are complete on main69d0e408.Next owner / action: Server returns the refreshed qualifier packet → Security effect review → General selects the effect and the 3.10.0 freeze/publication. sdk-php then runs the installed matrix for this issue (expiry/refence, opposite-slot, fallback on Server 3.0.5, default-OFF, load). Details: #293 status. I asked Server and General in chat.
rmcdaniel commentedon Nov 7, 2026
SDK-owned next actions are on #293:
Owners: sdk-php for #353 and #354. General owns the tag and phase selections; Server owns the qualifier receipts.
rmcdaniel commentedon Nov 7, 2026
Progress on this issue's installed cells:
4e6c6b7b);Remaining: Server's Native 3.2.0 qualifier receipts, then General's 3.10.0 tag, then the selected installed phases. sdk-php executes the phases. Details are on #293 (latest comment).
rmcdaniel commentedon Nov 7, 2026
State: no longer blocked externally. SDK 3.10.0 is published (tag
3.10.0→4e6c6b7b, release 437881850, Packagist). Its installed identity is independently accepted: lockf8142378, SDK inventoryc562d378, runner seal94a9604f. The Native 3.2.0 producer qualifier is accepted.This issue's installed behavior is pending. Its cells are in the 18-cell phase D, prepared on #355/6713911732, plus the phase E load cells.
Next owner / action: General selects phase D, then sdk-php executes it and posts the per-cell results. The issue is not complete until those results exist. Details: #293 (latest comment).
rmcdaniel commentedon Nov 8, 2026
Closing: acceptance met on the published 3.10.0 tuple.
Acceptance met: the next workflow poll is carried on the workflow-task completion (D4
carriers,carrier-loss-workflow-completion,completion-transit,carrier-expiry). The no-capability path is unchanged (row 04fallback).Evidence:
783d7ef, treec80b22d9), with the consumer harness in Prepare installed native completion-poll consumer controls #348/Prepare the remaining completion-poll qualification matrix #349. The #355 opposite-slot correction was merged at main1aebc537(runner seal76ab2cf5).3.10.0→4e6c6b7b, release 437881850, Packagist. Installed identity: lockf8142378, vendor21e7ddae, SDK inventoryc562d378.3c6f1eda(image2a1c9659, canonical acceptance server#325/6713776065), with Server 3.0.52659280ffor the no-capability fallback.performance_acceptance: not_assessed).