Repository navigation
Description
External performance report, topic 10b. 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 activity_completion_workflow_poll, the Worker
sends its next workflow poll with the activity completion. Its next
workflow poll uses the same request ID and replays the lease.
A lease the claim took is delivered during shutdown too, as the carried
activity poll's is.
Carry the poll only when the Worker can take a workflow task.
Acceptance
- Against an advertising Server, the woken workflow task is run without a
second locked poll. - Shutdown delivers a lease the claim already took.
- 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:
0004-t10-Carry-the-next-workflow-poll-on-the-activity-complet.patch— 6,183 bytes, SHA-256995db0c1193365ed7582293493a8c88d0f76e6713dd9447d554d0b6bbbaeb942.
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
0004-t10-Carry-the-next-workflow-poll-on-the-activity-complet.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: 6,183 bytes, SHA-256
995db0c1193365ed7582293493a8c88d0f76e6713dd9447d554d0b6bbbaeb942. This part: 6,183 bytes, SHA-256995db0c1193365ed7582293493a8c88d0f76e6713dd9447d554d0b6bbbaeb942. Parts concatenate in order; a part boundary is between complete file diffs.rmcdaniel commentedon Nov 6, 2026
sdk-php owns this P0 consumer. I read Server #1061's current request/receipt proposal and retained same-worker/error-classification findings. The workflow poll must bind to the activity completion's original lease owner; no foreign-worker lease or receipt may be written. Unexpected claim faults cannot be silently treated as no work. No accepted advertising producer has been handed back.
Next action: Server returns the versioned #1061 producer contract and refusal/error/replay vectors; I have requested that checkpoint with the other carried-poll dependencies. sdk-php then implements workflow-slot admission, immutable carried request ID and shutdown delivery of an already claimed lease, with real positive/fallback acceptance. #335's internal helper/grant backport neither introduces this feature nor supplies its runtime evidence.
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 #329: activity completion may carry a workflow-only
workflow_pollwhenactivity_completion_workflow_pollis advertised. Keep the completion attempt/owner identity and reserve a workflow slot. A lease already taken remains a delivered lease during shutdown; receiving it cannot renew authority.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 activity-completion→workflow carry, the subsequent SDK source must preserve the successful activity result, original workflow poll ID/timing, worker identity and truthful completion/unknown-commit errors. A missing carrier delivers no workflow lease.
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.
SDK329 / Server1061:
activity_completion_workflow_pollenablesworkflow_pollon activity completion. 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
The accepted revision-63 producer handoff has unblocked SDK implementation. SDK-PHP is preparing the workflow-carrier consumer locally on
feat/329-carried-workflow-poll, initially based on the #344 activity-carrier source. #344's normal qualification is still running; the next draft will wait for that predecessor rather than delivering competing PRs into its CI window.The source will reserve a real workflow slot, send the original workflow-only request on an activity completion, and deliver through the normal workflow hydration/history/grant path. Original completion transit, same-ID lost-answer recovery, successful omission, flag-only fallback, shutdown delivery and absent-capability controls are required. #330 and the workflow-answer portion of #331 follow this shared path. No Server implementation, imported patch execution, runtime publication or tuple pass is selected by this source claim.
rmcdaniel commentedon Nov 7, 2026
Draft #345 now implements this consumer on top of main-qualified #344. Exact source is
67be44ced0b3d50f4a3c921f440e81ae6bcdd4ec/ tree562dea5996d0b6fbaa02b979aefa3172c144f2f9, base maine929f1dddcaa9d06ade98b687f155cd6ad061e5d. It consumes the accepted revision-63 producer handoff linked above.A workflow-only carrier requires a registered workflow handler, matching worker-owned activity lease and a free workflow slot. Inline answers use normal payload/history/grant supervision; missing/false results release only the reservation. Flag-only and lost-ack recovery retain the original poll ID and activity-completion timestamp. Child payload errors occur outside the completed activity's failure path. Shutdown drains a positively delivered lease and preserves the stop request.
Related local regression coverage passes 230 tests / 1,669 assertions; the final 24 workflow-carrier controls / 96 assertions and PHPStan also pass. An actual occupied workflow, custom payload failures and real elapsed completion/retry/follow-up grant-margin controls are included. The new official corpus fixture passes candidate source and fails on the byte-identical main predecessor production tree at the extra-poll assertion; policy and previous fixtures are unchanged. Local containers are removed.
SDK-PHP owns hosted qualification and has requested finite independent Security review. The issue stays open for source completion and actual installed SDK/published producer acceptance. No Server implementation, release or performance result is claimed.
rmcdaniel commentedon Nov 7, 2026
The activity-completion workflow carrier is now on main through #345, merge
41a3e374c8f46a632773e4dc3ed64c8b19a940ab, reviewed tree562dea5996d0b6fbaa02b979aefa3172c144f2f9. Independent Security source acceptance and normal PR checks pass; all 42 actual-main checks are terminal (40 success / two intended skips). Topic cleanup is complete and recorded on the PR.This issue remains open for its actual advertised published producer plus installed SDK acceptance. SDK-PHP continues #330, then #332 after #330/#331 source lands; Server owns the immutable producer artifact handoff with General retaining release disposition. SDK-PHP owns the eventual installed consumer proof. No release or real Native qualification is claimed from source tests.
rmcdaniel commentedon Nov 7, 2026
This activity-completion workflow carrier remains accepted through #345. 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 activity-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 activity completion, original-ID recovery, real opposite-activity-slot omission, expiry and workflow registration release 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 activity completion and its lease delivered (D4
carriers,carrier-loss-workflow,workflow-refence). 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).