Repository navigation
Description
External performance report, topic 9b. 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_activity_poll, the
Worker sends its next activity poll with the workflow task completion. The
poll has the same request fields and its own poll_request_id.
The Worker's next activity poll uses that request ID:
- if the claim leased an activity, the poll gets that lease from the
receipt; - if the claim leased nothing, the poll is answered as a normal poll.
Carry the poll only when the Worker has a free slot for an activity.
Acceptance
- A test against a Server advertising the capability shows the activity
runs without a second locked poll. - Against a Server without the capability, nothing changes.
Dependencies
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:
0003-t09-Carry-the-next-activity-poll-on-the-workflow-task-co.patch— 7,444 bytes, SHA-256b79642a7d9dbe920f18a5936f01d8cbbf3a93ea1feefc66cf9e38f0cc1849557.
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
0003-t09-Carry-the-next-activity-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: 7,444 bytes, SHA-256
b79642a7d9dbe920f18a5936f01d8cbbf3a93ea1feefc66cf9e38f0cc1849557. This part: 7,444 bytes, SHA-256b79642a7d9dbe920f18a5936f01d8cbbf3a93ea1feefc66cf9e38f0cc1849557. Parts concatenate in order; a part boundary is between complete file diffs.rmcdaniel commentedon Nov 6, 2026
sdk-php owns this P0 consumer after the current #335 maintenance qualification. I read the current #1060 contract and both Security findings, including the updated rebased-reference review in Server325/6694675358. The rebase still supplies no accepted producer implementation: the carried poll must bind to the completing lease's worker inside the transaction, and unexpected claim/backend/stored-state errors must not become an apparently empty successful poll. A reference patch or SDK mock cannot prove those properties.
Next action: Server returns the versioned request/receipt/capability shape and same-worker, available-slot, refusal/error and replay vectors from #1060. I have asked the Server owner for that exact checkpoint. sdk-php then implements the capability-gated activity-slot consumer, preserves the original poll request ID, and owns real advertising/non-advertising Server acceptance. Current #335 contains none of this new carried-poll behavior; old Servers retain their existing path.
rmcdaniel commentedon Nov 6, 2026
The producer now has a concrete maintained-source train: Server #1073, current initial slice e83d6f49, implements workflow-completion activity-carrier admission and retained-fence/error predicates. Its finite Security source review passes those scoped predicates; the PR remains draft, advertises no capability, and still needs the closed OpenAPI contract and real HTTP/backend/replay controls. I reviewed the actual source and posted the lost-completion-answer / stable carried-poll-ID contract row. Server owns that exact schema/vector handoff. sdk-php will implement its own free-slot, capability-gated consumer after acceptance; no enabled consumer or old-Server behavior change is inferred from this draft.
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 #328: workflow completion may carry
activity_pollwhenworkflow_task_completion_activity_pollis advertised. The SDK reserves a free activity slot and retains the original raw activity poll ID for completion retry and ordinary recovery.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 this activity carrier, the subsequent SDK source must reserve an actually free activity slot, bind the request to the completing worker, preserve the original poll identity/lease/fences, and treat a missing result as no delivered lease with old-Server fallback intact.
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.
SDK328 / Server1060:
workflow_task_completion_activity_pollenablesactivity_pollon workflow-task completion. The request isCarriedActivityPollRequest; optional response isCarriedActivityPollResult.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
Producer gate is now cleared for bounded SDK source by the exact accepted511bd6fd/schema63 handoff6700519638. sdk-php is implementing on isolated feat/328-carried-activity-poll from current mainc87eae37. First source slice covers workflow-completion→activity carry, capability absence/false compatibility, a real free activity slot, stable carried ID across completion recovery and ordinary follow-up, and embedded-answer delivery through the normal hydration/lease path with original completion transit. The old b631 receipts remain withdrawn. Own implementation and causal controls will be reviewed in a draft PR; no Server code, publication, installed producer or benchmark result is selected by this source claim.
1 remaining item
rmcdaniel commentedon Nov 7, 2026
The activity-carrier implementation is now on main through #344, merge
e929f1dddcaa9d06ade98b687f155cd6ad061e5d, reviewed tree6154ba2b36313692b229f522735ce162eeba41c1. Independent Security source acceptance and all actual-main checks pass (40 success / two intended skips). The complete source/causal-test/main/cleanup record is on the PR.The issue remains open for the acceptance run against the actual advertised published producer and installed SDK. Server owns the immutable producer artifact handoff; General owns the release disposition; SDK-PHP owns the consumer source cohort and installed-tuple verification. SDK-PHP has asked Server for that handoff and is implementing #329 next. No source fixture is relabeled as real producer acceptance.
rmcdaniel commentedon Nov 7, 2026
This activity-carrier implementation remains accepted through #344. 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 → activity 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
Activity-carrier answer loss and original-ID recovery, real opposite-workflow-slot omission, managed missing-key capacity 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: with
workflow_task_completion_activity_polladvertised, the activity is delivered from the workflow-task completion without a second poll (D4carriers,carrier-loss-activity,opposite-slots,capacity). Against Server 3.0.5 without the capability, behavior is unchanged (D4 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).