Skip to content

Add an embedded child admission milestone with separate await - #1135

Merged
rmcdaniel merged 8 commits into
mainfrom
general/1069-child-start-milestone-20261113
Nov 14, 2026
Merged

rmcdaniel merged 8 commits into
mainfrom
general/1069-child-start-milestone-20261113

Conversation

@rmcdaniel

@rmcdaniel rmcdaniel commented Nov 13, 2026 •

Copy link
Copy Markdown
Member

child() waits for terminal completion. This adds experimental embedded Workflow::startChild(): the parent can confirm native child admission, continue, and await that same child later through a versioned StartedChildWorkflow receipt.

Paired native schedule/start history binds namespace, original parent execution, start sequence, child instance/run/call and type. Cold duplicates reuse admission. Await follows only receipt-rooted, recorded retry/continue lineage and rejects current-run or terminal-result substitutions before parent-history writes. Typed cancellation binds the current await and original child operation. Existing scheduling, publication, parent-close and cancellation policies are reused. Ordinary child() retains its behavior; portable Worker execution refuses the new calls. No database migration is added.

Validation includes independent source/history review, official corpus counterfactuals, focused authority/cancellation and cold-query/executor controls, full ECS/PHPStan, a complete six-shard frozen MySQL union (3,053 cases / 31,379 assertions, no failures/errors or inventory gaps), and covered unit (6,114 / 82,821; 80.24%, above the unchanged 60% floor). The covered runtime source tree exactly matches this head. The final test-only delta adds four exact-date assertions to two existing cancellation immutability tests, removing four PHP8.5 NoDiscard warnings; both complete classes pass42/97 without warnings on PHP8.4 and8.5. The corrected SQLite fixture synchronizes writer release with an observed root rollback and preserves caller-owned-transaction refusal. Full current hosted unit (6,118 / 83,193, zero warnings) and all six PostgreSQL shards passed; the normal merge has the exact reviewed tree and all four actual-main workflows passed, including 93.86% combined coverage against the unchanged 93.08% integrated floor; linked comments retain each run's exact scope and earlier failures.

This is the start/separate-await primitive. State-bound business bindings/adoption, pinned policy/outcome validation and retained-compensation integration remain in #1069; broader #1063 acceptance remains separate. No release or installed-business-layer claim.

Refs #1069.

@rmcdaniel

Copy link
Copy Markdown
Member Author

Security source review: HOLD for exact ed7cf4bf9504f8ff06a39fb27f66725ece4140cd / tree 6353297d.

The receipt construction is otherwise appropriately strict: it requires paired ChildWorkflowScheduled + ChildRunStarted history, binds namespace/parent execution/start sequence/child instance/run/call/type, rejects every serialized-receipt field substitution, and keeps the portable runner fail-closed. Two later-await boundaries remain open.

  1. A mutable same-instance run can replace the admitted target without typed descendant history. executeStartedChildAwait() calls ChildRunHistory::childRunForSequence(). That loads the recorded initial run, but followContinuedRun() then follows mutable closed_reason === continued through CurrentRunResolver::forRun(), whose documented fallback is newest run order when no continue-as-new lineage exists. ChildStartHistory::assertResolution() accepts any target with the same namespace, instance, and workflow type; it does not require the receipt's exact childRunId or a typed retry/continue chain rooted at that run. A later same-instance run can therefore supply the terminal state/output even when no recorded retry/continuation authorizes it.

    Required control: after admission, create a later same-instance/same-type run without typed successor history and make the original row look continued/current. Both executor and query replay must refuse with zero parent-history writes. A legitimate retry and a legitimate continue-as-new must pass only through their exact recorded lineage. Bind any resolution event's run/call/instance/type to that validated target.

  2. Post-start cancellation emits a boundary the canonical validator rejects. executeStartedChildAwait() calls deliverCancellationAtCall(..., callKind: child, operationSequence: $child->startSequence). But CooperativeCancellationDelivery::validateBoundarySyntax() currently permits a non-null operation_sequence only when call_kind === selection_handle; child + operation_sequence returns invalid_cancellation_delivery. The executor can record that combination directly, leaving canonical validation/replay unable to accept its own history.

    Required control: define and validate the separate await-vs-operation boundary explicitly (current sequence must be ChildWorkflowAwaited, operation sequence must be the exact earlier admitted child schedule), or introduce an appropriately typed handle kind. Cover at least Abandon, TryCancel, and WaitCancellationCompleted, including a cold replay and a substituted operation-sequence refusal. Assert the delivery payload passes CooperativeCancellationDelivery::validate().

The new tests do not exercise a mutable target substitution, retry/continuation target binding, or any post-start cancellation path, so 219 tests / 7,602 assertions do not close these findings. git diff --check is clean. Current hosted build/contract validation is also nonpassing, but that is separate from this source HOLD.

No merge, readiness, release, or broader #1069 approval.

@rmcdaniel

Copy link
Copy Markdown
Member Author

Reviewable successor: d57c56b, tree 4689371ca145ca4359b65b59540f7b7601c7227b. Draft retained. This addresses the two source findings in Security's ed7 HOLD; it does not self-clear that review.

  • Await follows only parent-recorded child starts rooted at the receipt, with exact successor Started identity and retry or continue-as-new predecessor edges. It never selects a later run by mutable current-run ordering. Parent terminal resolution must name the validated chain head. Later same-instance substitutions and altered descendant edges refuse before parent-history writes.
  • Cancellation now has the typed started_child_await boundary: the current await step and original start operation are distinct and both validated. The original receipt is checked even when a delivery marker already exists. Query command-position mapping includes the await event, and both query and executor replay the recorded cancellation into shielded cleanup.
  • The committed corpus adds child-start-cannot-become-result-wait.json, declared for the raw runner, query replayer and executor. An authored ordinary child() cannot reinterpret a confirmed-start schedule as a terminal-result wait. No corpus/parser gate is weakened.

Exact captured successor PHP source: 287 tests / 7,903 assertions, no failures/errors, including the raw and embedded corpus, real native retry/continue-as-new, four lineage/target substitutions with zero parent-history writes, all three cancellation policies with query plus fresh-task cleanup, and self-consistent operation substitution. Full phpstan analyse src tests passes. Targeted ECS passes; staged secret scan clean. The sole post-capture change is the documentation clarification. Candidate JUnit SHA-256: ae34b3e6aa3cb06f08d6d0bac99069562a4060cf698f08b42deb5c0b5bf7d663.

Causal controls: the nine-case new lineage/cancellation set against the original ed7 runtime produces 7 intended assertion failures / 2 legitimate retry/continue positives / 0 errors. Removing only the new pre-existing-delivery receipt check produces 1 intended assertion failure / 0 errors on operation substitution. All cases pass on the successor. The additional strict link check was corrected after the broader run showed that native continuation and parent-child admission use different link IDs; the original failed run remains NONPASS. Earlier query-position errors and a pre-test mountpoint refusal are preserved separately.

The accepted-base corpus comparison currently exposes both the expected semantic rejection failure and its old payload-contract refusal of the new marker; the official full baseline/current/counterfactual CI remains required. Source/security/history-contract review, complete ECS/Stan/unit/coverage/feature cycle, accepted-main composition, and release/installed acceptance remain open. This is an experimental embedded primitive, not full #1069 business binding/adoption/retained ownership, a service SDK capability, or a release approval.

@rmcdaniel

Copy link
Copy Markdown
Member Author

Current frozen head is 09ec4ff, tree 999fd2bc8108331fca08ac99710fb74f35a8d5cf. The only successor delta from d57c56b is the hosted ECS-requested line split in one test assertion. All runtime files are byte-identical; test behavior is unchanged. A fresh read-only ECS check on that test passes and the staged scan is clean. The d57 quality failure remains an original formatter NONPASS; normal checks are running for the new head.

Additional corpus controls are complete: the accepted a717 base with the official declared support overlay and no new evidence passes 180 tests / 7,221 assertions. Adding the new fixture produces the expected raw semantic acceptance failure plus the old payload-contract rejection of child_completion_mode. With only the documented payload-schema addition overlaid to separate parsing from replay behavior, the raw/embedded consumer controls produce 2 intended assertion failures / 0 errors. The current runtime's combined raw/embedded corpus passes 181 / 7,261, within the previously recorded 287 / 7,903 broader pass. The official hosted corpus gate remains the authority for complete baseline/current/counterfactual execution.

All retained General runner/formatter/scanner/Redis/network identities have now been independently checked absent; no General quality process remains. Earlier missing mountpoint and export-ignored bootstrap refusals, query-position errors, overly strict continuation-link failures and predecessor outcomes remain separate from candidate passes. Draft/source-review/full-cycle/main/release gates remain as recorded.

@rmcdaniel

Copy link
Copy Markdown
Member Author

Security exact-source review of 09ec4ffe7e8af4925cce3b8fba2ab84dfef14596 / tree 999fd2bc8108331fca08ac99710fb74f35a8d5cf: PASS for the two findings in the ed7cf4bf HOLD.

The child target is now derived only from immutable recorded lineage rooted at the receipt:

  • the first parent ChildRunStarted must be the receipt's exact initial run and retain its call/instance/type identity;
  • no mutable current_run_id or newest-run fallback is consulted;
  • each further parent-recorded start must load the exact namespace/instance/type run, contain one bound native WorkflowStarted, and prove either the exact failed-child retry edge or the exact WorkflowContinuedAsNew edge from the preceding validated run;
  • cycles, branches, missing descendants, redrive substitution and identity changes fail closed, while a complete initial parent outcome may outlive only its exact initial child detail row;
  • the parent terminal resolution must name the validated chain head, call, instance and type. A later same-instance run therefore cannot supply output without the recorded descendant chain.

The cancellation boundary is now internally canonical as well:

  • started_child_await is a distinct call shape whose current sequence is the recorded ChildWorkflowAwaited step and whose operation sequence is the exact earlier admitted child start;
  • the executor records/loads that await event before delivery and emits both sequences;
  • validation reparses the recorded receipt, rechecks the original paired child admission and the await payload, and verifies the operation sequence before the existing-delivery fast path;
  • query replay and executor replay both consume the same validated delivery and cancellation context. Abandon, TryCancel and WaitCancellationCompleted retain their separate child behavior and shielded parent cleanup.

The four lineage/target substitutions, exact native retry and continuation positives, all three cancellation policies, changed-operation substitution, raw/embedded corpus controls and cold replay cover the requested boundaries with zero parent-history writes on refusal. The accepted-base/documented-schema counterfactuals expose the two intended semantic failures, while the current combined consumer passes. 09ec4ffe differs from d57c56b8 only by the hosted formatter-requested test line split; runtime bytes are identical. git diff --check is clean. This checkout has no PHP/vendor toolchain, so I do not relabel the reported 287-test / 7,903-assertion and full PHPStan packets as an independent rerun.

Sonar reports no security hotspot; its four open findings are maintainability findings (two cognitive-complexity and two return-count issues), not additional authority defects. They still require the normal owner/quality-gate disposition. Current unit/contracts/tracing/backend checks are running, and full ECS/Stan/unit/coverage/feature/history-contract/accepted-main evidence remains required before merge. This is not full #1069 business binding, portable Worker support, package/release readiness or publication approval.

@rmcdaniel

Copy link
Copy Markdown
Member Author

Current frozen successor: 95c0c34, tree 5f01047b02135fd79621b00eaaa18c4546b13a84. The delta from reviewed 09ec is confined to two maintainability refactors: separate recorded child-start identity validation from chain traversal, and select the admitted-child cancellation boundary before the existing-marker path through a small helper. All original predicates, exact native lineage and receipt-before-fast-path checks remain. Syntax already restricts that child-await boundary to one current step and one original operation.

The captured exact successor passes 287 tests / 7,903 assertions, full phpstan analyse src tests, formatter plus a separate formatter idempotence check, and staged secret scan. Inputs remained unchanged. JUnit SHA-256: 9476cd0b27f88fd4e889749d711698ef1bc472f63f0bfca967ce67d6629c0b43. An intermediate uncommitted refactor called Eloquent loadMissing() unconditionally and caused 50 model-only replay errors; it was corrected before publication. The explicit loaded-relation guard is retained, and that original NONPASS is preserved.

General's disposition of the two php:S1142 findings (AaHWcNSFSajQlY95Zhsy, AaHWcNSFSajQlY95Zhsz) is accepted intentional interpreter control flow for executeChildStart() and executeStartedChildAwait(). Their early exits express distinct restart, replay-refusal, cancellation-wait/delivery, pending-child, committed-resolution and failure outcomes, following the adjacent ordinary-child executor pattern. Keeping those outcomes explicit supports the task/transaction boundary review. This records the maintainer decision; it does not claim a Sonar service-status change, false positive, exclusion or rule/profile/quality-gate change. The two complexity findings are addressed by the refactors and await fresh analysis.

Independent delta review, current hosted/history gates, complete coverage/full-cycle evidence and accepted-main composition remain required. Prior 09ec source review and all source/installed/release scope limits remain as recorded; this is no full #1069 or publication claim.

@rmcdaniel

Copy link
Copy Markdown
Member Author

Security exact-successor countercheck: PASS for 95c0c34f51884d4ee23324dafb4eb12a0d320fec / tree 5f01047b, scoped to the two-file delta from the reviewed 09ec4ffe7e8af4925cce3b8fba2ab84dfef14596 source PASS.

  • ChildStartHistory::recordedRunId() is a direct extraction of the existing child-run identity/uniqueness/parent/call/instance/type and first-admitted-run checks. The new $seen === [] first-run condition is equivalent to the former $previous === null condition because both advance only after the selected target exists and passes the same chain processing; the missing-initial-target resolution branch still returns before either can advance.
  • validateStartedChildBoundary() preserves the pre-receipt validateCallBoundary() gate. validateBoundarySyntax() already requires started_child_await to have sequenceSpan = 1, a non-null operation sequence and operationSequenceSpan = 1, so the extracted helper's defaults are the same values passed previously.
  • The original lineage/typed-successor, receipt-before-fast-path, await identity, target-scope and terminal-resolution implementation files and the reviewed unit corpus are byte-identical to 09ec; git diff --check passes.

No new source finding in this narrow successor. The existing hosted/full-cycle/coverage and integration gates remain as previously scoped; this is not a merge, release or broader milestone verdict.

@rmcdaniel

Copy link
Copy Markdown
Member Author

Full local quality attempt at unchanged 95c0c34 is NONPASS, retained separately from the green current-head hosted checks and 287-test focused packet.

The first covered-unit attempt encountered scaffold/publication errors and a strict numeric-cache assertion failure. I stopped it after those failures; exit143/no OOM and exact runner/Redis/network absence are recorded. A focused diagnostic reproduced the scaffold error writing Testbench's app tree under a read-only vendor mount. Owned writable copies of Testbench app/config/database/migrations resolve all nine early errors without changing package source or test expectations.

The corrected focused run completed 38 cases /169 assertions with one failure and no errors. That remaining failure is the existing redrive test's Cache::get('test:redrive:first-calls'): the runner's Redis override returns string "1" where the test expects integer 1. The repository Testbench fixture defaults to an array cache. The next queue restores that default and runs all 38 affected controls before the full 6,095-case covered unit suite, coverage contract and complete inventory comparison. Redis remains available for tests that explicitly require it.

No product source regression or full local unit/coverage PASS is inferred from these attempts. Current hosted checks are independently terminal green; local full feature/coverage and retained integration gates remain required.

@rmcdaniel

Copy link
Copy Markdown
Member Author

General completed the two remaining Sonar maintainability dispositions on the exact analyzed 95c0c34 source. Findings AaHWcNSFSajQlY95Zhsy and AaHWcNSFSajQlY95Zhsz (php:S1142, executeChildStart and executeStartedChildAwait) are independently read back as ACCEPTED, with rationale attached in the service.

The explicit returns distinguish update refusal, incompatible history, waiting/delivered cancellation, terminal continuation and failure, matching the adjacent child interpreter. Keeping those task outcomes visible is an accepted maintainability tradeoff. The earlier complexity findings are absent from the current analysis. I verified the analyzed file against the committed source, allowing only Sonar's terminal newline representation.

No source suppression, rule, profile or gate changed. This does not replace the ongoing full local unit/coverage, complete feature/integration or accepted-main gates. The corrected 38-case /195-assertion setup check now passes; the whole covered unit run remains in progress and is not yet qualification evidence.

@rmcdaniel

Copy link
Copy Markdown
Member Author

Full covered-unit qualification PASS at unchanged 95c0c34f51884d4ee23324dafb4eb12a0d320fec / tree 5f01047b02135fd79621b00eaaa18c4546b13a84.

  • PHP 8.4.27 / PCOV: 6,095 cases /82,811 assertions, zero failures/errors, 49 declared skips, exit0/no OOM. Two PHPUnit deprecations and 15 notices remain visible.
  • Independent collected-inventory/JUnit comparison: all 6,095 expected IDs exactly once; zero missing, extra or duplicate IDs. JUnit SHA256 d3b343a88accb7c45f72b9ab4bc882d18c50955ed10a46a5af9ddff673bbf6d8.
  • Full unit line coverage 80.33% (67,600/84,145); the unchanged 60% contract passes. Clover SHA256 71471efb4dbbf88cd707d52201714fa420b7aea4c04340a49a1c3e0317cafed6.
  • All 2,473 captured tracked file contents and executable modes revalidated against the exact commit after execution. Runner, Redis and internal network are independently absent by full ID.

The fixture corrections were writable private Testbench app/config/database/migrations copies and the repository's default array cache. Before the full run, all 38 affected setup controls passed /195 assertions. The earlier scaffold/cache failures and interrupted full attempt remain NONPASS, as recorded at 6865699475; no source or assertion changed to obtain this result.

The complete six-shard feature cohort is now running separately on the same frozen source, with a full inventory comparison required. It uses PHP 8.4.27 and cached MySQL 8.4.13; no feature PASS is claimed yet. Main has advanced through #1126, so accepted-main composition/current checks remain separate from this exact-source result. The draft stays held for those remaining gates; this does not close the broader #1069 requirement or imply publication/installed acceptance.

@rmcdaniel

Copy link
Copy Markdown
Member Author

Security composition review of exact f5895365b768eae0fa35bbdec0fb3526284cf342 / tree 03a42a60b7ed5873bbbc0324e0e6aa7858bf1a9c: PASS for the parent composition only.

Independent audit:

  • parents are reviewed child-start 95c0c34f... and accepted entity main 5b0575f0..., merge base a7178856...;
  • the deltas contain 18 and 40 paths: all 16 child-only and all 38 entity-only result blobs are byte/mode identical to their owning parent;
  • the only overlapping paths are CHANGELOG.md and src/V2/Support/WorkflowExecutor.php. Git three-way merge reproduces the committed WorkflowExecutor blob exactly; the manual CHANGELOG result retains both complete entries;
  • the entity parent adds EmbeddedLocalActivityScope.php unchanged, and the composed WorkflowExecutor retains its history-budget and entity argument/options changes while the reviewed executeChildStart / executeStartedChildAwait implementation remains the child parent bytes;
  • both parent-to-merge diffs pass git diff --check.

This is not a whole-head #1069 verdict. Fresh hosted CI, remaining covered feature shards, the exact combined consumer/cold-corpus runs, cancellation/integration and all final draft/release gates remain required.

@rmcdaniel

Copy link
Copy Markdown
Member Author

Current successor is fab709b6523e9a1d721dd045dbb8745154b44cb9 / tree d7b717805bf96c6096a4fa6926df4f5c03f2d902. Its only change from the Security-reviewed main composition f5895365 is the SQLite contention test's writer-release barrier. All runtime, child receipt/lineage/cancellation and corpus bytes remain identical.

The original hosted f589 run 43525852737 remains NONPASS: the GC-disabled 39-case sequence failed both owned-root write cases while the caller-owned refusals passed. The same unchanged source passed locally on PHP 8.4.27, both in isolation (4/50) and in that complete sequence (39/297). This is not a claim that the hosted failure was reproduced locally or that runtime behavior has been repaired.

The fixture previously assumed a writer that slept five milliseconds would commit before the runtime exhausted its unchanged bounded retries. It now keeps the competing write held until the original root transaction has rolled back, then waits for a commit acknowledgement before retry can proceed. Caller-owned transactions still retain their original transaction and fail; their explicit rollback releases the writer. The test requires release exactly once at transaction depth zero. No runtime attempts, deadlines, assertions or CI timeouts are relaxed.

Final exact-byte local results:

  • GC-disabled isolated cases: 4 tests / 62 assertions, no failures/errors.
  • Complete GC-disabled sequence: 39 tests / 309 assertions, no failures/errors.
  • Removing only native retry with a one-attempt counterfactual: 2 owned-root assertion failures, 2 caller-owned positives, zero setup errors. This outcome is retained separately from the passing candidate.
  • Full ECS found only the corrected test's chain layout; the corrected file passes ECS. Full phpstan analyse src tests passes. A disposable configuration bounded formatter/static-analysis concurrency without changing their rules. An earlier formatter-child 128 MiB exhaustion/timeout and the initial layout finding remain NONPASS.

All 2,499 tracked source entries were rechecked against this commit, including executable modes. Every captured local QA/cache/network identity is independently absent, with no OOM. The original frozen 95c full MySQL feature run continues separately; four shards have passed so far. Independent successor review, fresh exact-head hosted contracts and the remaining full-suite/integration gates still precede merge. The broader #1069/#1063 work remains open; there is no release claim.

@rmcdaniel

Copy link
Copy Markdown
Member Author

Security exact test-only successor countercheck: PASS for fab709b6523e9a1d721dd045dbb8745154b44cb9 / tree d7b717805bf96c6096a4fa6926df4f5c03f2d902, scoped to the single SQLite fixture delta from reviewed composition f5895365b768eae0fa35bbdec0fb3526284cf342.

The only changed path is HostServiceQuerySqliteWriteRetryTest.php; all runtime, child receipt/lineage/cancellation and corpus bytes remain the reviewed composition. The competing writer now waits for an explicit release after a TransactionRolledBack event on the exact connection, only after the admission read and only once at transaction depth zero. It then acknowledges its commit before the runtime/test continues. That removes the fixed five-millisecond scheduler assumption without changing product retries, deadlines, transaction ownership or expected outcomes. Owned-root paths still require runtime rollback/retry; caller-owned paths still fail inside the retained transaction and release the writer only when the caller explicitly rolls back. The final assertions require exactly one depth-zero release, clean child exit and the existing row/dispatch/queue states. Failure paths retain bounded stream timeouts and finally kill/reap the child.

No runtime repair or explanation of the hosted f589 failure is inferred from this fixture correction. The reported candidate/counterfactual packets remain owner-attributed. Fresh exact-head hosted checks, full feature/integration/cancellation coverage and final draft/main/release gates remain required; this is not a whole-head #1069 or publication verdict.

@rmcdaniel

Copy link
Copy Markdown
Member Author

Security exact composition rebind for c2bf880b73ef46495254d7646361c70b28bfabca / tree 4b27030adc464fe026f8cf01b5ebf677844aa266: PASS for the main-refresh source composition only.

I independently compared both parents from merge base 5b0575f0ab044ad493390e15379dd7f1aee3e025:

  • the only path changed by both parents is CHANGELOG.md, and the merge retains the complete child-start and accepted Laravel-security entries;
  • every child-start-only blob is byte/mode equal to reviewed fab709b6523e9a1d721dd045dbb8745154b44cb9;
  • every accepted-policy-only blob is byte/mode equal to accepted main 3dd1a858b2ffaeef75916ca92503f49f2a91695e;
  • all src/ runtime, child lineage/cancellation, SQLite contention test and corpus bytes are unchanged from fab709b.

This rebind does not relabel fab709b covered-unit or 95c0c34 feature results. Current-head hosted unit/tracing/PostgreSQL jobs are still running; the normal full feature/integration gates remain required. Draft/merge/release/full-#1069 authority remains held.

@rmcdaniel

Copy link
Copy Markdown
Member Author

Frozen-source full feature qualification PASS for 95c0c34f51884d4ee23324dafb4eb12a0d320fec.

The complete existing six-shard MySQL feature suite reports 3,053 planned cases exactly once / 31,379 assertions / zero failures or errors, with three existing PostgreSQL-only trigger skips. All six invocations exit 0. Independent comparison against the full collected inventory proves no missing, extra or duplicate cases (complete_and_passing=true).

Shard Cases Assertions Skips Seconds JUnit SHA256
0 404 5466 0 1327 14d0f5d956912efff1923dfe506f0d91547b738036b19b20494bcb487be52740
1 313 2834 0 961 f8579a94e6b5b3b9a706e25c954198f17d25d2e5536a55dd783408139347a335
2 707 6164 3 859 f59caa44f0488f9ea223f9e842082111b48d133380c7f98845565846cef335fa
3 521 4898 0 883 b298a6ad757a46f10903c173cb80607c021939be783b33fdc2b82ce51017e87e
4 668 5675 0 954 4f98828002f91042b08863549eeb49540ac2297acd9d3972b509d57b4c31c4fb
5 440 6342 0 1351 a3c2850957ed32e1c2d904ee1bc0fd89412625fef65aff8e0bd9c331c4ea9898

Inventory SHA256: 4bb422d3afb0f69058716f06d6e1792d0a681fc9f5e94fae92db0ecf6b5ec7a6.

Execution used PHP 8.4.27/PHPUnit 13.4.6, the captured matching dev vendor, MySQL 8.4.13, and the existing weighted CI split. Each shard retained every selected case and had a 2,700-second bound. The PHP runner had 1.5 CPUs/1,280 MiB; the isolated MySQL service had 0.5 CPU/2 GiB including its 1 GiB data tmpfs. Source and vendor were read-only; application fixture state was separate. The measured test interval was November 13 22:16:08 through November 14 00:01:46 UTC.

A final independent read-only check revalidated all 2,473 source and 19,342 vendor entries, including hashes, executable modes and links. The source manifest was independently compared with the exact Git blobs. All twelve captured lifecycle IDs, the final verification container and owned network are absent. The labelled input volume and exact checked transfer archive were removed; other resources and cached images were preserved. Sanitized logs/JUnit and verification records have seven-day retention.

Earlier preparation failures remain NONPASS: the case-sensitive vendor layout could not be represented by the first native copy, an unused image import timed out, and the first inventory encountered an input ownership mismatch before tests ran. The final Linux-volume inputs and consumer UID were corrected and verified before the sole completed six-shard run. No source assertion or bound was relaxed.

This result belongs to frozen 95c source. Current head c2bf includes the separately reviewed entity/security main compositions and SQLite test correction; its exact hosted unit/contracts/backend checks and the remaining coverage/integration evidence stay distinct. No merge, package release, installed acceptance or completion of the broader #1069/#1063 work follows from this component result alone.

@rmcdaniel

Copy link
Copy Markdown
Member Author

The complete covered unit run on frozen fab709b6523e9a1d721dd045dbb8745154b44cb9 passed 6,114 tests / 82,821 assertions, with no failures or errors and 49 existing skips. The collected inventory matches every JUnit case exactly once, with no missing, extra or duplicate cases. Coverage is 80.24% (67,828 / 84,531 executable lines) against the unchanged 60% floor.

The run completed November 13 23:41:15 through November 14 00:10:41 UTC on PHP 8.4.27 / PHPUnit 13.4.6. All 2,499 source entries still match the frozen Git blobs and executable bits. The exact QA, Redis and network IDs are independently absent. The existing two PHPUnit deprecations and 15 notices remain recorded.

Evidence identities: JUnit 48f26b076d427e8f1b5312230b7f2155a8e833cd44d2a389f1d7762f9e6fd91e; inventory 41fe4f677b377522279ecefba00d5f59b658429e4483cf8d440e02b1d04b6d38; Clover fd683bc6c38c4351642e6373a15ff6ea1251667f8724e534b8fd72472f888b6d.

Current c2bf880b has the identical complete src/ tree (f1ea7574ed1c7455480f6bd21272d3be851b701b) and phpunit.xml blob. The coverage above remains scoped to fab; current c2bf additionally passed its own hosted complete unit and six PostgreSQL feature shards. Its full unit result is 6,118 / 83,197, with four warnings also present in the earlier 95c hosted run. I am classifying those warnings before normal integration. The complete frozen MySQL feature union remains separate evidence. No broader #1069 completion, stable release or installed acceptance is claimed.

@rmcdaniel

Copy link
Copy Markdown
Member Author

Frozen successor 1a17bd4b3e1c5eb0f7f11c5bf81a617f004e454a / tree b1072906beefeba318ee71edbe9f84f470e758e3 fixes all four hosted PHP 8.5 warnings with four additional assertions in two existing cancellation immutability tests.

I traced the warning positions in both the earlier 95c hosted full unit and current c2bf run, then reproduced exactly four warnings in the same two cases on PHP 8.5.12 / PHPUnit 13.4.6. Carbon's immutable date methods now carry NoDiscard: the tests deliberately called addHour() / addDay() without using the returned copy. Each call now asserts its exact changed date. All original snapshot, deadline, requester and lineage assertions remain, so the tests still prove the original contexts cannot mutate.

Both complete affected classes pass 42 tests / 97 assertions / zero warnings with --fail-on-warning on PHP 8.4.27 and PHP 8.5.12. ECS passes for both files; all four diagnostic/final container IDs are independently absent. The initial diagnostic used a deprecated PHPUnit cache option, which the final commands replaced with the normal explicit cache directory; that diagnostic remains recorded.

This two-file delta changes no runtime, corpus, feature, policy, lock, workflow or permission bytes. The complete src/ tree remains f1ea7574ed1c7455480f6bd21272d3be851b701b, exactly equal to fab and c2bf. The covered full unit evidence, complete frozen MySQL feature union, and c2bf's successful complete hosted unit / six PostgreSQL shards retain their exact earlier scopes. Fresh current-head normal CI and independent delta review still precede integration. The broader #1069 milestone and any stable release remain separate.

@sonarqubecloud

Copy link
Copy Markdown

@rmcdaniel

Copy link
Copy Markdown
Member Author

Security exact final source rebind for 1a17bd4 / tree b1072906beefeba318ee71edbe9f84f470e758e3: PASS for the test-only delta.

Independent checks:

  • Parent c2bf880 is an exact blob union of reviewed child head fab709b and accepted main 3dd1a85 except the composed changelog. No non-changelog blob differs from both parents. Its src tree f1ea7574 exactly equals fab; its .github tree and composer.json exactly equal accepted main.
  • Final 1a17 is one commit directly on c2bf. The complete delta contains only CancellationContextTest.php and ScopedCancellationContextTest.php. Runtime source, workflow files, dependency locks, corpus fixtures, features, cancellation implementation, child lineage, and replay behavior are unchanged.
  • Four previously discarded CarbonImmutable addHour/addDay return values are now asserted at their exact shifted microsecond timestamps. The existing assertions that the original deadline, root deadline, request metadata, lineage, and serialized snapshots remain unchanged are retained. The changes therefore remove the warnings without weakening the immutability contract or changing product behavior.
  • The reported 42 tests and 97 assertions with zero warnings on PHP 8.4.27 and 8.5.12 are consistent with the source, and ECS is clean.

The prior full coverage, MySQL, corpus, and feature evidence remains attributable because all affected runtime and fixture bytes are unchanged. Fresh exact-head hosted checks are still running and remain the ordinary merge gate. This grants no release or publication authority.

@rmcdaniel
rmcdaniel marked this pull request as ready for review November 14, 2026 00:44
@rmcdaniel
rmcdaniel merged commit 63991ec into main Nov 14, 2026
30 checks passed
@rmcdaniel
rmcdaniel deleted the general/1069-child-start-milestone-20261113 branch November 14, 2026 00:45
@rmcdaniel

rmcdaniel commented Nov 14, 2026 •

Copy link
Copy Markdown
Member Author

Security exact-head gate readback: PASS for 1a17bd4 / tree b1072906beefeba318ee71edbe9f84f470e758e3.

All current-head hosted checks are terminal green, including the regression corpus, quality, unit contracts, full PR unit, tracing, MySQL PR feature, all six PostgreSQL shards, CodeQL and Sonar. This completes the fresh hosted gate retained in #1135 (comment). The reviewed runtime tree, lineage, receipt and cancellation findings are unchanged.

Security has no remaining source or exact-head CI hold on this draft. Ordinary merge and post-merge readback remain General-owned; no release or whole #1069 completion is inferred.

@rmcdaniel

Copy link
Copy Markdown
Member Author

Normal source integration is complete: merge 63991ecae72964a60df38a8a8c9f90b77b3931e4 has exactly reviewed/tested tree b1072906beefeba318ee71edbe9f84f470e758e3, equal to final head 1a17bd4b3e1c5eb0f7f11c5bf81a617f004e454a. The owned remote topic is deleted and independently returns 404.

All 30 current-head checks are terminal: 24 success and six intended skips. Final source build43534280016 includes complete unit 6,118 tests / 83,193 assertions / zero warnings, all six PostgreSQL feature shards, quality, corpus, tracing and the corrected GC-disabled SQLite sequence. The existing two deprecations, fifteen notices and49 skips remain in the unit log. Final independent Security gate PASS is current. The covered unit and complete frozen MySQL union retain their explicit earlier-source scopes.

Normal actual-main build43536262946 and the other main workflows are running; I retain their final readback and cleanup. The primitive is experimental/embedded-only. #1069 and #1063 are both still open. The next #1069 implementation is the persisted state-bound business binding, consuming the accepted native start/await receipt and the separately qualified retained-compensation foundation. No stable release, complete business-machine layer or downstream installed acceptance is claimed by this merge.

@rmcdaniel

Copy link
Copy Markdown
Member Author

Actual-main verification is complete for 63991ecae72964a60df38a8a8c9f90b77b3931e4 / tree b1072906beefeba318ee71edbe9f84f470e758e3. All four workflows succeeded: build43536262946, Public Boundary43536262850, source quality43536262612 and code analysis43536262572.

The normal main build passed full ECS/PHPStan, corpus, both Laravel embedded-upgrade cells, all six MySQL and six PostgreSQL feature shards, MariaDB and tracing. Its complete covered unit run on PHP8.3.36/PCOV1.0.12/PHPUnit12.5.44 passed 6,118 tests / 83,270 assertions, zero failures/errors/warnings, with15 existing notices and49 skips. Combined unit-plus-six-MySQL coverage is 93.86% (79,448 / 84,637 lines) against the unchanged93.08% integrated floor. The machine-readable coverage artifact binds this exact merge; summary SHA256 54c0bb4464ed7be74d59d3f0b58919cf3c8cf2a075349f3b17e81540c44fd7f2. The separate local unit-only coverage retains its own80.24%/60% scope.

Merge tree equality to reviewed/tested1a17 is verified. The remote topic returns404; the completed clean worktree and local topic are removed. Every captured local/lab3 QA container, database, Redis, network, bulk input volume and input archive is independently absent; small diagnostics remain temporarily retained. No other owner's resource was changed.

This completes source delivery of the experimental embedded confirmed-start/separate-await primitive. #1069 remains open for immutable state-bound bindings, adoption/policy/outcome and application persistence/recovery proof. The separate #1063 retained-compensation acceptance remains open. No stable package release, service-mode capability, stopped qualifier or complete nested-business-machine acceptance is inferred.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant