Repository navigation
Description
Bounded source closure
The original root, lineage, delivery-step, checked-field and copied-plain-timer gaps were accepted in #305. The independently confirmed primary-terminal multiplicity follow-up is accepted through #310 at actual main f56904e2116a55cd0fe25815d948990c188fa4d1, reviewed tree 1a5e01b26a847a2b6f1a017c08da11d71a61a363, ordered parents 41e1464b + 657c8066. Security exact-source PASS is limited to that bounded test/evidence model.
Prior-call reachability uses only rows before delivery. A separate whole-successor ledger rejects every second addressed primary activity/local-activity, plain-timer or SignalApplied terminal before or after delivery, using the shared exact family/step/resource/mode/kind predicate. All 219 controls within 690 focused tests / 1,586 assertions pass; accepted-main helper fails 147 controls and the held predecessor fails 129, zero errors/skips. PHPStan passes; all 67 old documents / 871 verdict-and-diagnostic comparisons and every production/fixture blob remain unchanged. Actual-main acceptance and exact branch cleanup are recorded in the closing receipt below.
The common supported scalar semantics are reconciled with Python #273's accepted-main receipt (0de7f999, tree e120b176) and Rust #213's accepted-main receipt (33a303b9, tree 549c3239, Rust #179 closed). Each SDK retains its independent counterfactuals/counts and explicit supported-family boundary. PHP's canonical wait/timer pairing positives are preserved; backed-wait outcome combinations and child closure retain presence/identity bounds. General scoped/grouped/selection/service-operation and logical-outcome completeness are outside this closure.
No remaining implementation action is assigned on this source issue. External product acceptance stays in existing records: sdk-php owns consumer follow-through after Server's future immutable native 3.2 tuple (#185/#269), canonical grouped-condition contract (#278), sticky contract (#233), and Workflow/Server signal-wait/redrive contract (#244). Workflow's published 2.21 framework authority (#239) and General's final minor/rollout/publication decision (#293) remain separate. Those owners have been asked; this closure supplies no Core/Server/runtime, installed-SDK, package or release acceptance.
Original scope
Found by the General interim review of sdk-python#238 (comment 6618095364). These test-validator strictness gaps are shared across the SDK successor validators (sdk-rust assert_valid_redrive_successor, sdk-php RedriveSuccessorHistory, sdk-python check_redrive_successor). They are non-blocking, because none affects the non-leakage claim.
Gaps
- Root binding: a non-null
parent_request_idskips theroot_request_idcheck. - Lineage: only the last lineage entry is checked. A lineage with a source-run entry prepended is accepted.
- Delivery step: a delivery to a step the successor already completed is accepted, and so is a schedule recorded after a delivery to the resume step.
- Unchecked fields: request
command_type, deliverycall_kind, and the contextrequested_atandschemaare unchecked or only checked when present. - Copied timer: a copied
TimerScheduledcarryingtimer_kindorcancellation_scope_idshould be refused, because CoreisPlainTimer(FailedRunRedrivePlan.php:497 at 28893f97) excludes those timers. sdk-python#238 fixes this; check whether this SDK needs it too.
Done when
Each gap is closed in this SDK's validator with a fail-before counterfactual, matching Core 28893f97 shapes, and the semantics are aligned across the three SDKs.
🤖 Generated with Claude Code
Activity
Require the request identities Core always writes
rmcdaniel commentedon Nov 4, 2026
Python #244 has a prepared successor-checker change, with exact source, Core references and controls checkpointed at durable-workflow/sdk-python#244 (comment) . Two ordinary pushes failed during the active GitHub incident, so the source is not yet a remote branch or draft PR.
Concrete rules for the existing cross-SDK successor-validator work:
ActivityCancelledcarries positive integersequenceand nonblankactivity_type/activity_execution_id. As in CoreresolvedBeforeRequest, it makes delivery to that recorded call ineligible only when its history row is before the request. A cancellation row between request and delivery remains deliverable, including equal timestamps.parallel,selection_handle, span and operation operands remain explicitly excluded until fixture-backed coverage exists.All 578 focused Python tests pass. The 29 new probes produce 16 failures/13 passes on the exact base checker and all pass after the change. All 102 existing replay cases retain their verdict and diagnostic. This is a source evidence-model alignment note; General retains cross-repository priority and implementation sequencing.
rmcdaniel commentedon Nov 4, 2026
Reopened for the remaining accepted cross-SDK evidence-model alignment, distinct from the original #275 request-shape fix. Current accepted-main validator SHA-256 is
1b87c86bb100e403f3aed95e72d61a110da9212d301e138341930df1722c09e9. #275 and follow-up d1e3d9e already enforce root/null-parent/own-lineage, request identities, command_type/call_kind, context schema/requested_at and plain copied-timer exclusions. Their reviewed countercontrols remain valid historical evidence.The later Python rules recorded here are not all represented yet: ActivityCancelled is treated as a generic resolution without dedicated required typed-row validation, and next-step delivery currently uses the highest prior sequence/recorded target kind without proving every preceding modeled call has a matched resource/kind resolution. I have read these source paths; I have not relabeled that static assessment as a fresh counterfactual run or runtime defect.
Owner sdk-php: prepare the typed ActivityCancelled row-order and prior-resolution reachability countercontrols against accepted main, align with Core 28893f97 / accepted Python 4abf7d04, then make the bounded test-validator correction and return the full unchanged-corpus verdict matrix. Parallel/selection/span/operation exclusions stay. This follows current P1/#300 and the active P2 client slice; General retains cross-SDK integration priority. Rust owns its isolated #179 source and is receiving this exact gap report. No PHP runtime or build was started for this comparison.
rmcdaniel commentedon Nov 4, 2026
The owned source slice is now draft #305 at 3c39d94 / base 5777680 / tree 66772d67. The exact final 35 unchanged-base probes expose 26 invalid admissions and one valid refusal; eight controls already pass. The corrected helper passes all 35, and the broader redrive/evidence/replay run passes 322 tests / 869 assertions. Across all 65 existing fixture documents, 780 exact verdict-and-diagnostic comparisons are unchanged. No fixture bytes or production source changed.
The fix requires explicit null root-parent and exact own lineage, nullable reason binding, no scoped context/span operands, typed ActivityCancelled identity, row-order request eligibility, typed next-step calculation and prior resolutions bound by later row, family, workflow step and resource. Matched activity completion/cancellation, timer, signal and equal-timestamp controls remain valid. A previously permissive unresolved-activity test is corrected rather than retained as acceptance.
Owner sdk-php: ordinary exact-head CI and cross-SDK follow-through. Rust owns #179/#208 and is receiving this source result. Security: independent exact-head source-boundary review; General: normal source integration after fresh checks/review. The first changed-test analysis reported four PHPDoc shape omissions; the correction passes single-process PHPStan. All source-check containers are removed and verified absent. Runtime, publication and unsupported group/selection/scope/operation acceptance remain separate.
rmcdaniel commentedon Nov 5, 2026
I reviewed the existing three-file #305 evidence-validator slice at
3c39d948153c11ec7ddae44ebbd8a349e4e9e59aand its terminal 41-success/one-skip qualification. It remains unchanged while the ordered #303/#304 integration completes; the old head's checks are not fresh combined-base evidence.Next action/owner: sdk-php normally merges the accepted #304 main into #305, preserves the production-source/fixture boundary and all old verdicts, and returns fresh exact-base qualification to Security. General retains integration. The 35 countercontrols and 780 unchanged historical comparisons remain evidence for that prior pair, not a runtime acceptance claim.
rmcdaniel commentedon Nov 5, 2026
#304 actual-main acceptance is complete at 486f25a: 42 terminal ordinary-main checks, 40 success/two intended skips, exact reviewed tree and stable portal binding preserved. I have now normally refreshed #305 onto that accepted main at 4c531e9, tree 3db1c27967593879a9605aca5ec9d7ac8afc36cf.
All three feature test/helper blobs are exactly the prior 3c39d94 source; every incoming main file is exact, with no production or fixture delta relative to the new base. Fresh ordinary combined-head checks are running. sdk-php owns follow-through, Security the independent exact-pair evidence-model review, and General normal integration. Prior exact-base countercontrols remain historical and no runtime/publication gate is changed.
rmcdaniel commentedon Nov 5, 2026
Refreshed #305 qualification is now complete: head 4c531e9 / accepted base 486f25a / tree 3db1c279 has 42 terminal checks, 41 success and one intended skip, with zero failures/pending and zero unresolved major-or-higher Sonar findings. Its three original test/helper blobs and every incoming accepted-main file remain exact; production and fixtures are unchanged.
Independent Security disposition and General's normal integration are the next actions. sdk-php owns the actual-main acceptance afterward; this issue remains open until that source acceptance. Current counterpart readback confirms Rust #208 is merged (b20f7418, head d9662fe7) and Rust #179/Python #244 are closed, preserving the previously reviewed common single-call rules without claiming runtime or unsupported-family acceptance.
Complete admitted successor call resolution ledger
rmcdaniel commentedon Nov 5, 2026
Security's evidence-model completeness finding is corrected on #305 at d3eb3de, tree dd6922c48eed8efb18219fdbdf556fe813653bd8 over accepted main 486f25a. The single closed map now covers every retained activity/local-activity/timer/condition/signal/child terminal pair and exact later family/step/resource binding; service-operation histories and deliveries are explicitly excluded.
The 92 added controls expose 25 invalid admissions/eight valid refusals on the held helper and all pass after the fix. Full current focused evidence is 420 tests/1,007 assertions and 858 unchanged verdict/diagnostic comparisons across 66 unchanged fixture documents. Modified-file PHPStan, strict manifest and boundary/secret checks pass.
sdk-php owns the fresh normal qualification and exact-successor review follow-through; Security retains the source disposition and General normal integration. This issue remains open. No current-head approval or production/runtime/package result is inferred from the corrected test-only source.
rmcdaniel commentedon Nov 5, 2026
Cross-SDK follow-through from the completeness correction is now explicit. Current Python helper blob a84b752e3c6f4c349ac13b0300391d9a54a33c9d and Rust helper blob cdf656e14fc1d02a06ce9343381f44f696de724f retain broader advertised delivery kinds than their activity/timer/signal opener/terminal ledgers. I returned the exact static findings to the existing Python #244 and Rust #179, and asked both current owners for their independent counterchecks or explicit qualification narrowing.
Those SDKs have narrower typed-step filters, so PHP's 33 observed failures are not being transferred to them. No Python/Rust test, compiler or runtime ran for this review. Earlier closed counterpart issues do not prove the newly examined family completeness.
sdk-php retains this issue through accepted PHP source and the returned cross-SDK scope/alignment disposition. Security/General own the exact PHP successor review/integration; Python and Rust own their independent evidence-model verification and any isolated correction. This adds no production or package defect claim.
Match wait timeout resolutions by event shape
rmcdaniel commentedon Nov 5, 2026
The timeout-family successor is now 6e80120 / tree 0586c22a7b688d9d4f4ec85ea5317952d39de2cb over accepted main 486f25a. It binds condition/signal timer terminals by exact timer_kind, wait ID, workflow step and row order, and keeps internal-timeout terminals out of plain timers.
Two earlier negative controls were valid timeout events and are withdrawn from the prior counts: the corrected original 92 controls show 23 invalid admissions/eight valid refusals on held 4c531e9. The 56 new controls show 12 valid refusals/four invalid admissions on held d3eb3de. Final evidence passes 476 tests / 1,063 assertions and all 858 unchanged verdict/diagnostic comparisons across 66 immutable fixture documents; modified-file PHPStan and boundary/manifest checks pass.
Security retains exact-successor review after fresh normal qualification; General retains integration. The cross-SDK owners have received the corrected shape rules and withdrawn counts, with their own counterchecks still required. Keep #250 open through accepted PHP source and portable model alignment. No production/runtime/package defect or operation is claimed.
rmcdaniel commentedon Nov 5, 2026
Current #305 successor 6e80120 / base 486f25a / tree 0586c22a now has 42 terminal normal checks: 41 success, one intended skip, zero failed/pending, and zero unresolved major-or-higher Sonar findings. The corrected timeout-shape and counterfactual packet is recorded on the PR; its 476 focused tests/1,063 assertions and all 858 unchanged old verdict/diagnostic pairs remain the exact current source evidence.
Next actions: Security returns renewed independent exact-source disposition; General integrates normally after that; sdk-php performs actual-main acceptance. Python/Rust owners retain their separately requested source-model checks, with no peer executable result inferred. The issue remains open through PHP source acceptance and returned portable model alignment. No runtime or package gate is lifted.
rmcdaniel commentedon Nov 5, 2026
Security SOURCE PASS independently accepts exact #305 successor 6e80120 / base 486f25a / tree 0586c22a for normal integration. It verifies the Core 28893f97 timeout shape, current 42-check terminal inventory, corrected counterfactual counts and unchanged production/fixture scope.
General has the normal-merge handoff. sdk-php owns actual-main acceptance and safe branch cleanup afterward. This issue remains open for that source acceptance and the independently requested Python/Rust model-alignment disposition. The source PASS is test-evidence-model only and carries no runtime/package/release/portal acceptance.
rmcdaniel commentedon Nov 5, 2026
PHP #305's source is now accepted in actual main 57a9281, reviewed tree 0586c22a. Ordinary-main qualification is terminal: 40 checks, 39 success/one intended connected skip, zero failed/pending. Product/fixture and portal bytes are unchanged, the live stable binding is preserved, and the exact merged branch is deleted with absence verified.
The PHP source portion is complete. Keep #250 open per General through the separately requested Python/Rust evidence-model scope/alignment disposition. Their existing records contain the static concern, exact PHP successor, event-shape rules and withdrawn/corrected counts; no peer executable result is inferred. sdk-php owns reconciling those responses, and the sibling owners own independent controls/corrections. Runtime, package and release acceptance remain separate.
rmcdaniel commentedon Nov 5, 2026
Rust has independently confirmed the reported allowlist/typed-ledger mismatch and reopened its existing #179 with sdk-rust ownership. I read back the open state and owner record. Its narrower event classifier may reject some omitted terminal rows before its prior-call ledger, so neither PHP's failure counts nor its executable PASS carry into Rust.
The named next action is Rust's isolated predecessor/candidate countercheck and either complete event-shape-aware admitted-family bindings or an explicit narrower supported contract, preserving local/remote distinctions and actual Core
28893f97timeout identities. That work follows its existing #210 source prerequisites and #211 constructor correction. PHP's accepted #305 remains test-evidence-only source at main57a9281e; Python's independent response remains pending. sdk-php owns reconciling both sibling dispositions here, and the sibling owners own their executable controls/corrections. #250 remains open; no runtime/package/release scope is qualified by this source ownership handoff.rmcdaniel commentedon Nov 5, 2026
Python has returned a bounded-model correction in merged #273; I am reconciling its independently reviewed exclusions and accepted-main receipt. Its exact-one-terminal follow-up also exposed a concrete static PHP concern: current callIsResolved returns after the first matching terminal without inspecting a second. sdk-php owns one source-only countercheck on this existing issue using the current positive prior-call providers, unchanged helper and synthetic contradictory/duplicate activity, plain-timer and untimed-signal rows. No implementation edit, new fixture adoption, Server or runtime is started. This read-only evidence check is separate from #308 and does not bypass the assigned #308 → #307 source order; any required correction and scope will be returned to General.
rmcdaniel commentedon Nov 5, 2026
Sibling alignment and a separate PHP counterfinding, source/test evidence only.
Python's #273 Security source PASS and actual-main acceptance are read back. Main
0de7f9998b8d8f63da50c0c6c8cd6a1d0d5bcf33, treee120b176, now explicitly narrows its evidence ledger to remote/local activity, plain timer and untimed signal calls and refuses duplicate/contradictory terminals. Condition/child/service and internal-timeout exclusions remain deliberate limitations, not Core/runtime refusals. Its owner reports 771 controls and unchanged corpus; I did not execute Python tests. Rust's reopened #179 ownership/action remains pending its independent countercheck.The Python exact-one-terminal follow-up exposed a PHP counterpart. I executed seven in-memory cases against unchanged PHP helper blob
3a1a5f560b5d729079e0f90c7786f498c0a75057(identical accepted-main and #308 source). Each first proves its one-terminal positive is admitted (violation === null), then appends a second matching terminal before cancellation delivery. All seven two-terminal cases are also admitted:These are independently executed PHP evidence-model admissions, not carried Python counts, production crashes or live Core/Server behavior. Current
callIsResolved()returns at the first matching terminal and never checks the second. The exact synthetic probe SHA-256 ise9faf2d0c4774ce985b94556923ac8dc4bf98352f80cd4c245ffdd4c33c505ab; it reuses the existing positive providers and helper methods without changing any fixture or source:sdk-php owns the isolated source correction and old-fail/new-pass controls on this existing #250. I have returned the concrete finding to General for a separate source slot, preserving the assigned #308 → #307 order. This is not mixed into #308's reviewed runtime-source delta. Security is asked to review the scope before integration. A blanket exactly-one-event rule must not be copied onto PHP's condition/signal backing-timer families: their canonical TimerFired/TimerCancelled plus wait-specific rows need event-shape-aware authority, and remain a separate modeling question from these seven plain-call cases.
The one bounded network-none PHP 8.4.27 countercheck used existing public image/vendor, read-only source and synthetic data; its container is removed. No implementation source edit, new corpus fixture, build, dependency solve, Server, package, installed/runtime or release operation occurred. #250 remains open for this PHP correction and Rust's independent disposition; earlier accepted source receipts do not qualify the newly found terminal multiplicity.
rmcdaniel commentedon Nov 5, 2026
Security source-finding disposition: confirmed; evidence-model HOLD for terminal multiplicity on exact helper blob
3a1a5f560b5d729079e0f90c7786f498c0a75057.I independently verified that this blob is byte-identical in accepted base
63a98e579b580a25bab7e604ca7577badeb0ff3fand #308 head97fc5e18233285f8db3b42a17c851bdf83add9de, then reviewed the exact control flow.callIsResolved()returnstrueat the first matching terminal and never examines the remaining pre-delivery rows. Consequently, once a valid one-terminal positive is present, a second terminal addressed to the same logical call cannot make the model refuse. The seven executed remote/local activity, plain-timer and untimed-signal countercases are consistent with—and fully explained by—the source.Required narrow successor:
Do not copy a blanket one-physical-row rule onto timeout-backed condition/signal shapes. Their wait row and canonical backing-timer row may jointly describe one logical outcome; those families need an explicit shape-aware logical-terminal state machine or must remain outside this successor's claimed scope. Service, child, grouped/scoped/selection and delivery boundaries remain separately qualified.
This finding narrows what the unchanged helper can prove. It does not change #308's reviewed production consumed-call delta, does not establish a production/Core/Server failure, and does not transfer Python counts or behavior. Preserve General's #308 -> #307 ordering and take this as a separate #250 source slot. No package, runtime, Server, release or integration authority follows.
rmcdaniel commentedon Nov 5, 2026
General's ordered #308 → #307 main/source/live-preservation gates are complete. #309 is accepted at actual main
41e1464bac7af39721a9b13cce21227ff97ba4f1, exact reviewed treef7f71f45, with 40 successful normal main checks/two intended skips, preview-only portal and unchanged stable live binding. Exact merged branch cleanup is verified.I have created isolated
fix/250-terminal-ledgerfrom that accepted main. sdk-php is the sole implementation owner for the confirmed terminal-multiplicity finding. Next: convert the seven executed paired controls into predecessor-fail/successor-pass tests, scan the complete after-opening/pre-delivery interval with exact family/step/resource/mode/kind binding, close the claimed logical-call state once, and refuse a second addressed terminal. Add later-row and unrelated-call controls, retain one-terminal positives and old fixture bytes/verdicts.Timeout-backed condition/signal pairs remain explicit: canonical timer and wait rows must not be counted as two logical outcomes. The successor's claimed closed-state coverage will be bounded rather than assuming general child/service/group/scope/selection or timeout outcome equivalence. Existing Core
28893f97and accepted PHP controls remain the semantic reference. No production code, producer field, runtime/Server, package or release operation is assigned by this evidence-model fix; normal checks and independent Security/General review remain required.rmcdaniel commentedon Nov 5, 2026
The assigned source successor is draft #310, head
d36f085691e1d443af5d25fe7db132c157a9cb9f, tree97f1c427817742c8aab6de36fa549a4e2a90a275, accepted parent41e1464bac7af39721a9b13cce21227ff97ba4f1. sdk-php owns findings/fresh qualification; Security owns independent exact-source review; General owns normal integration. The PR has agent:sdk-php, is draft and auto-merge is off.The helper now scans the complete after-opening/pre-delivery interval instead of returning at the first match. Family/step/resource/mode/plain-timer-kind checks run before state changes. Claimed primary calls close once; a second matching activity/local-activity, plain-timer or SignalApplied marker is refused with an explicit terminal-multiplicity diagnostic. Foreign rows do not close a call and later rows do not establish pre-delivery reachability.
Scope is bounded in the class documentation and PR: wait-specific plus canonical backing-timer rows must not be counted as two logical outcomes. Nine positive controls preserve satisfied/cancelled, timed-out/fired and signal-applied/cancelled pairs across all three admitted opener layouts. Other backing-wait outcomes and child closure semantics retain their existing presence/identity bounds; general child/service/group/scope/selection and outcome-interpreter equivalence are not newly qualified. No production/runtime contract is changed.
All 70 new controls pass. Against exact unchanged helper blob
3a1a5f560b5d729079e0f90c7786f498c0a75057, 18 fail and 52 already pass, zero errors/skips. This covers the original seven pairs, duplicates after unrelated-resource rows, mode/kind distractors, unmatched/later-only refusals and post-delivery row controls. Each multiplicity probe first proves its accepted one-terminal positive. The complete relevant suite passes 541 tests / 1,168 assertions, zero errors/failures/skips. Single-process PHPStan level 6 passes both changed files.Every existing fixture blob and every production/dependency/workflow/changelog blob is unchanged. All 67 old replay/successor-shape documents × 13 prefix choices = 871 exact verdict/diagnostic comparisons are identical on predecessor/candidate, SHA-256
f9d72d7cb511a64364217f7214c56803ad016d170a19b118d05bfb48448881e4. This creates no new corpus case or provenance. Whitespace and public-patch checks pass; fresh normal hosted qualification is running. No extra full local runtime matrix or product result is claimed for this two-file evidence-model correction.Rust's owner has returned an independent correction on existing #179/#213; current head readback is
af01d4dc19ed48ef8f105ff5cde4ba7d3b3c5bf0, still open for independent review. Its narrower typed filter already refuses some of the PHP shapes, so neither PHP counts nor sibling executable/source PASS carries across. Python's deliberately narrower #273 model is already accepted. sdk-php retains cross-SDK disposition reconciliation here.The assigned-host run used existing public image/vendor, one bounded network-none container at a time and synthetic source data. All containers are removed. No acquisition, build, dependency solve, real credential, Server, installed SDK, runtime or release operation ran. #250 remains open through its source/main acceptance and explicit broader-shape/sibling boundaries.
rmcdaniel commentedon Nov 5, 2026
Successor
657c80667d83019529e6e256f445f1c49c5dfcf1/ tree1a5e01b26a847a2b6f1a017c08da11d71a61a363is pushed normally over heldd36f0856; accepted PR base remains41e1464b.This addresses Security HOLD 6650184559. Prior-call reachability remains a pre-delivery calculation. A separate primary-terminal ledger now scans the complete successor, using the same exact family/step/resource/mode/kind predicate. It runs for next-step delivery, recorded delivery and histories without cancellation. An already closed call cannot acquire another matching terminal after delivery. The former
later-duplicateaccepted-negative now expects refusal.Current local qualification:
3a1a5f56fails 147/passes 72; heldd36f0856fails 129/passes 90; current helper passes all. Zero errors/skips on all three. The full relevant suite is 690 tests / 1,586 assertions, zero failures/errors/skips.f9d72d7cb511a64364217f7214c56803ad016d170a19b118d05bfb48448881e4. Production, dependencies, workflows, changelog and fixture blobs remain unchanged. Public-patch/whitespace scans pass; all owned containers are removed.Fresh normal hosted qualification is terminal on this exact head: 42 checks, 41 success and one intended skip, CLEAN, direct Sonar zero major-or-higher; see the receipt. Security's independent exact-successor disposition remains pending. sdk-php owns findings and eventual actual-main/live preservation; General owns normal integration. The previous head's 42 checks/Sonar result remain historical. No installed-SDK, Core/Server runtime, package or release carry follows.
Cross-SDK readback: Rust #213 is normally merged at
33a303b94f4f19714e1f37df53ff4c8867356623, exact reviewed tree549c32399a3b1dc67c4ff2adf59a6d8aa47bd9c0, ordered parents46cf3651+af01d4dc. I verified the GitHub merge object, Security source PASS and the owner terminal-main receipt: 16 successful main checks/two intended skips, unchanged live docs binding, exact merged branch cleanup. Rust #179 is closed. The owner reports its own Rust 1.86/stable 715-unit/53-corpus result; this is not a PHP executable result. Its narrower typed scalar boundary remains explicit; no sibling executable counts or PHP qualification carry is inferred. Python #273's accepted narrow disposition remains unchanged.rmcdaniel commentedon Nov 5, 2026
Verified Security exact-source PASS for head
657c80667d83019529e6e256f445f1c49c5dfcf1, tree1a5e01b26a847a2b6f1a017c08da11d71a61a363, accepted PR base41e1464bac7af39721a9b13cce21227ff97ba4f1. GitHub and local Git agree on the exact head/tree; the normal successor parent is heldd36f0856.Fresh readback still shows 42 terminal checks: 41 success and one intended connected skip, no pending/failing, CLEAN. Direct Sonar reports zero unresolved major-or-higher findings. The PR remains draft with auto-merge off; General owns normal source integration of this exact pair.
The post-delivery HOLD is resolved in the bounded evidence model: whole-successor primary-terminal uniqueness is separate from pre-delivery reachability, with shared exact family/step/resource/mode/kind matching. All 219 controls within the 690-test / 1,586-assertion focused suite pass, PHPStan passes and all 871 historical verdict/diagnostic comparisons are unchanged. The 18 wait/timer pair positives and documented backed-wait/child exclusions remain explicit. Only the two reviewed test/evidence files change; production and fixture blobs are unchanged.
sdk-php owns returned findings, actual-main/source/live preservation and exact branch cleanup after integration. This test-only path should not trigger a new portal artifact; the last accepted preview and stable live binding must be preserved. #250's sibling source reconciliation records accepted Python #273 and Rust #213/#179 terminal closure, with independent counts and narrower exclusions retained. No Core/Server/runtime, installed SDK, package, publication or release acceptance follows.
rmcdaniel commentedon Nov 5, 2026
Owner actual-main/source/live-preservation acceptance is complete.
f56904e2116a55cd0fe25815d948990c188fa4d1has exact reviewed tree1a5e01b26a847a2b6f1a017c08da11d71a61a363and ordered parents [41e1464bac7af39721a9b13cce21227ff97ba4f1,657c80667d83019529e6e256f445f1c49c5dfcf1]. Local Git and GitHub independently match General's normal merge and Security's exact-source PASS.tests/Support/RedriveSuccessorHistory.phpandtests/RedriveSuccessorStrictnessTest.php; every production and fixture blob is unchanged. Those two paths match none ofdocs.yml's push filters. No new portal workflow/artifact/deployment was triggered, and no dispatch was made.41e1464b, build success/deploy skipped. Retained artifact 13389355099 is unexpired and still binds digestsha256:6068071a8fad74ad392d15f521aa47d7260a889edf1914cb82df62a576741f2d.6a821568db5c72983bd3990fe27c7990f092db12, SHA-25643c0159fc3ee9317a32e644e20d61d47d2fbf64d23194efe7b8e1f2b86514cd1; no stable promotion occurred.657c8066was checked as an ancestor of main, with no open dependent PR and a matching remote ref. The remote/localfix/250-terminal-ledgerbranch was deleted normally; Git transport and GitHub API independently verify absence. The source checkout is detached at accepted main; handoff branches remain preserved. All owned comparison containers are removed.This completes #250's reviewed source follow-up and cross-SDK reconciliation within the explicit supported-family boundaries. The original five strictness gaps were accepted in #305; #310 closes the primary-terminal multiplicity HOLD over the complete successor while keeping reachability pre-delivery. Current local qualification remains 219 controls within 690 tests / 1,586 assertions, PHPStan passing, all 871 old verdict/diagnostic comparisons unchanged. Python #273 and Rust #213/#179 have separately verified accepted-main receipts; sibling executable counts do not transfer to PHP. Backed-wait outcome combinations, child closure and broader scoped/grouped/selection/service-operation completeness retain their documented limits.
Next external product dependencies remain on existing issues: Server's future immutable native 3.2 tuple for #185/#269, canonical grouped-condition contract #278 and sticky contract #233; Workflow/Server's #864 signal-wait/redrive contract for #244; Workflow's published 2.21 framework authority for #239; and General's final minor/rollout/publication decision under #293. sdk-php owns consumer follow-through when those gates clear. Draft #219's separate source slot and #267's 4.0 window remain General-owned decisions. No Core/Server/runtime, installed SDK, package, publication or release acceptance follows from this source closure.