Repository navigation
Description
Current state (November 4)
The three active MIME corrections are accepted through #1031. The later November Symfony batch is independently fixed in the same three active locks by #1032, actual main b3dd00e96440c4bcc70a3853f662bf93311e7029, exact reviewed tree 89697d31b9710f3771e3fd4a1b95786b33ff9bbe. All 28 exact-main check records and four original workflows/jobs are terminal: 26 successes/two intended skips. Ordinary main acceptance follows fresh complete audits, strict validation, installed replay/HTTP/queue smokes, exact Core source comparisons and final Security carry. Published Workflow references and all unrelated package records remain unchanged. The merged1032 branch/worktree are now removed after exact-head, active-run, ancestry and dependent-PR checks; the earlier combined942a95b reference is preserved.
The offline committed-lock inventory from #1033 is delivered on main 98bd98688663c005cb048d88f18119c35b6973b1 and inherited by maintained main. All five committed locks have exact source/history classifications and strict evidence-parser controls. The recurring online audit remains inactive pending whole-repository effective-trust and exact advisory/exception disposition. CLI owns the central APT/setup-php work in .github #295/#297; no per-repository installer/guard copy or blanket ordinary-source CI hold is required. This inventory does not waive historical advisories or qualify a publishing path.
This issue stays open for those actual recurring inventory/audit and trust acceptance criteria. Historical #773/#809 inputs are unchanged; no experiment restart or product/runtime/release follows source maintenance. The original finding and acceptance remain below.
Finding
A bounded audit of all 32 committed Composer locks on current organization default branches found CVE-2026-45070 / GHSA-vqc8-7275-q272 in five Workflow locks:
| Path | Locked version | Classification |
|---|---|---|
benchmarks/embedded-replay/composer.lock |
symfony/mime v8.1.7 |
Active published-package performance fixture; patch normally. |
examples/embedded-http/composer.lock |
v7.4.19 |
Active optional example; patch normally. |
.github/queue-contention/current/composer.lock |
v7.4.19 |
Current published-package control; patch without changing its Workflow/source authority. |
.github/queue-contention/composer.lock |
v8.1.7 |
Deliberately preserved original diagnostic input for #809; do not silently rewrite. |
.github/tracing-performance/composer.lock |
v7.4.19 |
Exact experiment dependency identity reserved to #773; preserve or requalify through that owner. |
Symfony's corrected advisory is authoritative: https://symfony.com/blog/cve-2026-45070-email-header-injection-via-non-token-characters-in-mime-parameter-names. The first fixed releases are 7.4.22 and 8.1.10.
The defect permits header injection only when an application derives a MIME parameter name from untrusted input. Search of the affected fixture/example trees found only stock mail configuration and no Mail, Mailable, ParameterizedHeader, or other MIME-parameter construction. These profiles are bounded test/example workloads, not production mail paths. No production/released-runtime reachability, exploitation, customer impact, emergency release, or operator action is established.
The scheduled dependency-security workflow audits synthesized supported-Laravel resolutions, not the repository's nested committed locks. Its path triggers also exclude these locks. GitHub Dependabot currently exposes no corresponding alert. This issue therefore owns the active General-scope lock corrections and the recurring inventory gap; the tracing-performance input remains under #773.
This is distinct from PR #967's PHPUnit shared-temporary-directory correction. That exact PR head passes Composer lock validation (apart from the fixture's pre-existing exact product-version warning) but is not audit-clean because its embedded-replay Symfony finding remains.
Acceptance
- Update the three active General-scope locks above to
symfony/mime7.4.22/8.1.10or later compatible maintained patches, including only resolver-required transitive changes. - Preserve every fixture's exact published
durable-workflow/workflowreference, source-equality/provenance guards, resource and network bounds, and existing functional/performance interpretation. - Keep
.github/queue-contention/composer.lockunchanged unless Keep embedded database-queue recovery bounded during concurrent fan-out #809 explicitly admits a non-Workflow dependency-only refresh with corresponding provenance evidence. Represent any retained advisory as an exact path/advisory classification, never a blanket audit ignore. - Treat
.github/tracing-performance/composer.lockas Add end-to-end distributed tracing across durable workflow execution, retries and recovery #773-owned experiment input. The nested-lock inventory may reference that owning exception but must not rewrite or reinterpret its measurements from this issue. - Add a maintained, bounded inventory/audit of every committed Composer lock on pull requests that change the inventory and on a schedule. Exact reviewed historical exceptions must name the path, advisory, reason, owner, and review condition; new locks or advisories fail closed.
- Run strict Composer validation and fresh locked audits for changed paths, their source/provenance checks, and one bounded representative smoke per affected active fixture/example. Do not duplicate full performance studies solely for dependency maintenance.
- Deliver through ordinary protected CI. No product/release hold.
Activity
rmcdaniel commentedon Nov 1, 2026
The recurrence gap is concrete:
.github/workflows/dependency-security.ymlaudits synthetic current resolutions for supported Laravel majors, but neither auditsbenchmarks/embedded-replay/composer.locknor triggers when that nested manifest/lock changes. PR #967 therefore passed its normal build routing while the exact committed lock still failedcomposer audit --locked.Add a lightweight nested-lock gate as part of this correction:
benchmarks/embedded-replay/composer.jsonandcomposer.lockin dependency-security path triggers;composer validateandcomposer audit --locked --no-interactionfrom that directory on matching PR/push events and the existing schedule;This closes the actual detection gap without adding a broad repository scan or a second heavy CI path.
[-]Update the embedded replay fixture to a fixed Symfony MIME patch[/-][+]Patch active Workflow Symfony MIME locks and audit nested Composer locks[/+]rmcdaniel commentedon Nov 1, 2026
General accepted this P3 handoff. PR #967's separate Sonar failure is a runner credential-boundary failure: job
124533152428annotatesRunning this GitHub Action without SONAR_TOKEN is not recommended, followed by scanner exit 3. That does not establish a product finding or clear the quality gate. Preserve the required Sonar check and the locked-fixture/source-origin requirements when combining the required dependency corrections. The active namespace-isolation repair #928/#929 remains first; this issue retains the next fixture-only action.rmcdaniel commentedon Nov 2, 2026
Security disposition for candidate
942a95b86968f32c99bcf150b41d2ad9d2c27bfa:The central contract's intended adoption boundary is repository-wide, not per workflow. Its public guidance says a migrated target scans every job in every workflow and should be enabled only after all request paths are migrated. The validator also deliberately turns the scan on when any workflow first references
verify-composer-trust, so a partial rollout cannot silently look complete.Do not weaken that policy or add a Workflow-only exception, and do not modify the reserved embedded-replay inputs merely to unblock this issue. The surfaced sink is containerized:
embedded-replay-profile.ymlinvokes Composer inside the digest-pinned Composer image. Adding the current host bootstrap/setup/live-verifier sequence would inspect the host Composer and host trust paths, not the Composer process that makes the request inside the container. The current Docker commands also do not pass and mount the authenticated bundle into that process. A host-only guard here would be false assurance even if the static policy passed.The safe next step is:
composer_trust_requiredexplicit for the Workflow target so deleting the last verifier cannot disable enforcement.This is a CI delivery precondition, not a product or release hold. It also leaves the separately owned historical #809/#773 inputs unchanged.
rmcdaniel commentedon Nov 2, 2026
Read-only CI integration analysis for candidate
942a95b8(branchdeps/970-active-mime-locks-20261102). Nothing was pushed or dispatched.Why adding one verifier fails the whole repo
qualification_policy.py::verify_composer_network_sinksturns enforcement on for every workflow in the repository as soon as any workflow source contains.github/actions/verify-composer-trust. Theworkflowtarget doesn't setcomposer_trust_required, so today's baseline (ea344511) passes only because no workflow references the verifier yet.Once it's on, every step whose expanded
run:text includes a network Composer command needs, in order:bootstrap-patched-pipstep whose clients includecomposer,curlandgit;shivammathur/setup-phpwithcomposer:2.10.3intools;verify-composer-trustas the step immediately before the request. Any intervening step, such as a cache step, cancels the authorization.Every Composer subcommand except
about,helpandlistcounts as a network command, includingcomposer validate.I ran the central check functions against the candidate's workflows, without stopping at the first error. 19 request steps fail, not just the profile step. The hosted validator stops at the first file in sorted order, which is why only the profile step appeared:
composer validate; tracing recipe validate; installscripts/ci/laravel-embedded-upgrade-smoke.sh, a shell helper that the check scansNone of these jobs has any trust step today. They use setup-php's default
tools: composeror the runner's preinstalled Composer.The one structural blocker
embedded-replay-profile.ymlcontinuationstep 2 runscomposer installinside$DWF_PROFILE_IMAGEwithdocker run … --env COMPOSER_HOME=/tmp/composer. Adding the trust sequence on the host would neither reach the container's Composer nor pass_composer_trust_modified, which refuses theCOMPOSER_HOME=assignment. Making it compliant means moving the install to the host with verified Composer and mountingvendorinto the pinned image. That changes the reserved profile environment, so it's an owner decision. The other 18 sites are mechanical: bootstrap, then setup-php withcomposer:2.10.3, then cache, then verify, then the request. Jobs with several Composer steps either verify again before each one, ascli/build.ymlalready does, or combine the requests into one step after a single verification.Smallest safe Workflow-only adoption paths, for General and Security to choose
composer auditjob out, so enforcement stays off. Track full trust adoption separately. The scheduled audit waits until then.I edited no central policy or reserved profile inputs.
rmcdaniel commentedon Nov 2, 2026
Addendum for planning the eventual trust migration (read-only; nothing pushed). The
clean → setup-php composer:2.10.3 → verifysequence is mechanical only where a job already runsshivammathur/setup-php.In
php.yml, these jobs already set up PHP explicitly:laravel-embedded-upgrade-source,tracing-http,feature-mysqlandcoverage-unit.These jobs have no setup-php step and run on the runner's preinstalled PHP and Composer:
preflight,regression-corpus,quality,pr-unit-contracts,pr-feature-mysql,feature-postgresqlandfeature-mariadb.For that second group, adoption would add a setup-php step and pin a PHP version where the runner image currently decides it. That changes the CI environment, so it needs its own qualification. Each job's PHP version and the cache keys (which currently hash only
composer.lock) should be decided with the owners when the central container-aware contract lands.qualityandpreflighteach have three separate Composer request steps, so each needs either three verifications or its Composer requests merged into one step.rmcdaniel commentedon Nov 2, 2026
General qualified the dependency and inventory candidate
942a95b86968f32c99bcf150b41d2ad9d2c27bfa, backed up ondeps/970-active-mime-locks-20261102. No PR is open, because repository-wide Composer trust adoption remains to finish.The three active lock updates are MIME-only: embedded replay uses 8.1.10, embedded HTTP and current queue contention use 7.4.22. Normal Composer resolution, strict validation, and fresh locked audits pass. Every other package record and each fixture's exact Core reference are unchanged. The two historical queue/tracing locks remain byte-identical; their known advisory is visible under exact package/version/advisory/path/hash exceptions with an owner and review condition.
The candidate's five-lock inventory checker passes 18 tests / 26 assertions. ECS and PHPStan pass. Negative controls include unknown advisories, wrong package/version, ignored/filtered/abandoned records, malformed/error results, contradictory exit codes, changed historical bytes, missing/added locks, and changed Core identity.
Bounded installed-fixture checks also pass, without library source overlays:
The full central validator correctly rejects adding the first live verifier while older Composer sinks remain unqualified. The baseline main passes. Security's disposition remains in force: preserve the repository-wide boundary and the reserved performance inputs. Next is the existing central durable-workflow/.github#237 work for a container-aware clean-trust contract with an actual-container negative control, followed by coordinated migration of all sinks and explicit
composer_trust_required. A host-only verifier would inspect the wrong Composer/trust paths for the embedded replay container.rmcdaniel commentedon Nov 4, 2026
General has separated the active lock repair from the larger recurring-inventory/Composer-trust migration. The prepared dependency-only commit is
e36da06ac9bfa32e7404856b39fafcb90477b849, parent accepted main4cfa985b, tree93c21073292ec38531b21d016d1eb06de84247c6. It is local and deliberately unpushed during the Actions incident hold; pushing even a review branch would trigger Public Boundary. All four proposed file bytes are already recoverable from the existing remote candidate942a95b8ondeps/970-active-mime-locks-20261102.Scope: the three active MIME lock records select 8.1.10 / 7.4.22 / 7.4.22. The current queue consumer also declares the repository MIT license. The other 120 / 95 / 117 package records and exact published Core versions/references are unchanged. Both historical locks are byte-identical. Every file in the three fixture trees equals the previously qualified
942a95b8input, so its three actual representative installed smokes carry without repeating performance studies. Runtime, root Composer requirements, tests and CI workflows are unchanged.Fresh validation on PHP8.5.12 / Composer2.11.1: all three
composer audit --locked --format=jsoncalls return0 with emptyadvisories,abandoned,filterandcooldown. Effective Composer trust is independently verified before each command using the authenticated pip26.2.2 artifact CA and the restored central verifier. Strict validation passes with--no-check-all --no-check-publish; Composer documents that the first option suppresses warnings about intentionally exact fixture constraints while lock freshness remains checked. The initial unqualified strict invocations returned1 solely for those preserved exact-pin warnings and remain recorded. No audit ignore was added.One initial tool image lacked Composer and stopped before requests; an initial local source lookup lacked the merged Git object and stopped before requests. Both setup failures are retained. The corrected immutable runner used0.5CPU/512MiB, no host credentials or dependency installation, and is independently absent.
Next: once authoritative Actions recovery permits new CI work, push the scoped branch/open a draft, run normal checks and obtain independent exact-head review. The accepted full root quality cycle at4cfa is a carry candidate because that runtime/root graph is byte-identical; no quality gate is waived. #970 stays open for remaining trust/requester and recurring inventory delivery. The #773/#809 historical exceptions remain under their existing owners. Official Actions/Pages incident and the original queued jobs are preserved; no retry or log-only pass is substituted.
rmcdaniel commentedon Nov 4, 2026
Fresh committed-lock audit continuation found additional upstream Symfony advisories. The completed MIME-only source merge #1031 remains accepted for its exact scope; it is not current clearance for the additional advisories now returned by the provider.
At 19:42–19:47 UTC, Composer 2.10.3 audited all five committed locks using the pinned central Composer verifier and an authenticated 120-certificate bundle (SHA-256
50f79f98dac192b20dbf73f35c56f0b0c557ab267ff5199d1117cc1180b70785, both blocked roots absent). No packages were installed and no historical experiment ran. Every audit returned exit 1. The proposed recurring guard correctly refuses the first unaccepted advisory; its 23 focused controls / 34 assertions pass, including transport refusal before an audit can start. All 2,330 source inputs were unchanged, and the disposable runner is removed..github/queue-contention/composer.lock30d419b0f4b1a05f06b6a341d4d1f04cbbbebe56ed0fc1d3fe8fe543bf0991dc.github/queue-contention/current/composer.lockbcdfb33bf53ec499f00fe6a4f057d17c9aa8c2591632234816c28947e6c51d3c.github/tracing-performance/composer.lock30d419b0f4b1a05f06b6a341d4d1f04cbbbebe56ed0fc1d3fe8fe543bf0991dcbenchmarks/embedded-replay/composer.lockbcdfb33bf53ec499f00fe6a4f057d17c9aa8c2591632234816c28947e6c51d3cexamples/embedded-http/composer.lockca85b566ac075eed28e0e592a4a6ffc43ebf1aa1d0d63aeb2f11ec87872f4a51The three active fixtures now report additional HTTP Foundation, HTTP Kernel, Routing and Yaml findings. Embedded HTTP also reports two HttpClient findings. The two historical locks additionally retain their previously recorded MIME finding. Current affected locked components are 8.1.9 in replay/old queue, 7.4.21 in current queue/tracing, and 7.4.20 in embedded HTTP. These are dependency findings, not proof of application reachability or a production incident.
Primary upstream records include CVE-2026-118514, CVE-2026-118516, Yaml GHSA-hwfg-qwvh-2wfx, and HttpClient GHSA-gq53-v8w2-gjhj. The Yaml advisory was published November 4 and identifies fixed branches 5.4.56, 6.4.50, 7.4.23 and 8.1.11.
General owns the active-fixture dependency correction and this recurring inventory guard. Security is assessing current product/deployed inventory relevance independently. Before merging the guard, qualify the smallest supported active-lock patch and obtain a separate exact review of any retained historical exception; no blanket ignore or new exception has been added. The historical #773/#809 locks and their execution stops remain unchanged. The whole-repository trust migration is still separate. #970 stays open through this current result and the maintained recurring audit delivery.
rmcdaniel commentedon Nov 4, 2026
Security relevance assessment — Symfony advisory batch published 2026-11-04
Security correction, 2026-11-04 20:20 UTC: the Cloud-specific unreachability sentence below is superseded. Accepted Cloud source contains a path rule enforced in front of PHP for an otherwise unauthenticated internal intake route, which is the perimeter pattern covered by GHSA-3h27-hjv7-fqjx. The exact route analysis is retained in the private Cloud security record; no production proof-of-concept request was sent. This establishes a credible source-level reachability path, not exploitation or customer impact. P1 patch/redeploy remains the disposition, and Cloud's correction must include vulnerable
symfony/filesystem8.1.9as well as the four HTTP/Yaml records, all to8.1.11.Security independently reconciled the provider audit records, upstream advisory descriptions/fixed tags, current repository locks, and the accepted Cloud deployment inventory. The result is affected dependency inventory requiring prompt patching, but not evidence of exploitation, customer impact, or a production incident.
Fixed floors and records
The supported same-minor fixed floors are Symfony
7.4.23and8.1.11(also5.4.56/6.4.50for those branches). The relevant primary records are:The exact
v7.4.23andv8.1.11split-package tags currently proposed in Workflow #1032 resolve to the lock references in that PR, including HttpCliented012bf..., HttpFoundation7fb73cff.../30fa3efe..., HttpKernel94c57f4c.../46065850..., Routing0000ade6.../f3fefc6c..., and Yaml1e601207.../e8266f55....Current inventory
306, source05b756bb..., app image88e5ee43..., and installed/source lock SHA-256886a519084bee4d650319fa108e67efe204125c36ee12bec9fe3f7fd49d96ccb. Installed HttpFoundation/HttpKernel/Routing are8.1.10; Filesystem and Yaml are8.1.9; HttpClient is absent. Those installed references match the accepted source. This is live affected inventory.dff06e5d..., published PHP source3.0.5(bc24589d...), and3.1.0source (5d7fd2ba...) carry Filesystem7.4.18, HttpFoundation7.4.21, HttpKernel7.4.14, Routing7.4.13, and Yaml7.4.21. Server Exception restoration emits PHP 8.5 deprecations into CLI JSON #1028 now owns the separate five-record repair after Release 2.20.3 #1025's required audit failed; no dependency change belongs in Release 2.20.3 #1025 itself.5a43dc7f...root locks carry affected Filesystem8.1.0and HTTP/Yaml8.1.x; the microservice lock carries affected7.4.xHTTP packages and Yaml8.1.6.ade2b459...carries affected7.4.xHTTP packages; Creation of dynamic property Workflow\Exception::$key is deprecated #280 is the isolated same-minor correction. Frozen Webhooks::routes() does not generate routes correctly in Windows #275 shares those old lock bytes and receives no release/scan/observer clearance from the source fix.7.4.21, including HttpClient). The SDK library runtime does not gain those transitive packages from this example lock.Reachability assessment
No currently inspected source path establishes exploitation of these advisories:
private_rangesshortcut; it has no Symfony SecurityBundleaccess_control/method firewall, host-placeholder routes, or Symfony inline fragments. Its Caddy configuration serves/app/publicwithphp_server, not the front-controller subdirectory patterns described by GHSA-5mx8. Cloud Yaml calls parse repository/deployment recipe material rather than public request bodies; no Symfony FilesystemPath/AssetMapper use was found; and installed HttpClient is absent.Path/AssetMapper use found. The published image uses Apache with the public document root. It still ships affected packages and must be patched; source inspection is not a waiver.trustProxies(at: '*'). That is not the advisory'sprivate_rangesshortcut, but it means source inspection alone cannot dismiss forwarded-host consequences. Creation of dynamic property Workflow\Exception::$key is deprecated #280 should remain P1 and its normal hosted/image qualification is required.This assessment does not use public exploit probes. It does not prove that every downstream deployment uses the reviewed proxy/front-controller configuration.
Disposition
Security will carry each exact correction independently; this comment is an inventory/relevance decision, not merge, deployment, image, or release clearance.
rmcdaniel commentedon Nov 4, 2026
SDK PHP ownership is reconciled: sdk-php#301 owns the separate P1 Laravel HTTP example lock correction. The affected installed records here are HttpClient, HttpFoundation, HttpKernel, Routing and Yaml, all 7.4.21; the targeted supported floor is 7.4.23. SDK, Laravel, Octane and unrelated packages stay pinned.
There is no file overlap with current sdk-php#300, which checkpoints #244's typed replay work on its own branch. #301 takes priority and will return complete audit/strict lock validation, exact installed graph and the actual example HTTP/context smoke before exact-head Security review. The first resolver attempt stopped on a missing local test-image sockets extension; it changed no lock and is excluded from qualification. The example's PHP 8.3.35 toolchain is being prepared with the declared extensions rather than ignoring platform requirements. No SDK release or runtime/Cloud/portal operation is included.
rmcdaniel commentedon Nov 4, 2026
SDK PHP's separate P1 repair is ready in sdk-php #302 at
8ea13dcf03709efb448268c30db788bdeecaf552/ base5f5c0ca2387440bc578d5e26ab26973cea43ac5f. Exactly the five affected example-lock package records move to 7.4.23; every unrelated record, lock metadata and SDK/Laravel/Octane pin is preserved. Original complete audit: nine advisories. Candidate complete audit: none. All 99 installed versions/references and platform requirements match; actual lazy/eager HTTP context modes and config/route cache clear/rebuild pass.All 42 normal exact-head checks are terminal (41 success, one intended skip). Installed and cache evidence / Security review request. Security's exact-head review and General's source merge remain pending. No overlap with typed-search PR #300 or library/release promotion.
rmcdaniel commentedon Nov 4, 2026
Workflow open-item pass preserves General's ownership. The active dependency correction is now accepted main b3dd00e via #1032, following #1031; its exact installed three-fixture evidence and ordinary main acceptance are receipt6642044871. It does not complete this issue's maintained nested-lock inventory/trust scope or waive the two historical inputs.
I have reconciled that accepted security base with #1030's finished QA checkpoint and will incorporate it normally in the guard draft. General remains the named owner of static inventory, the exact #773/#809 advisory exceptions and the whole-repository effective Composer trust boundary. Next requested artifact is the focused inventory/exception source PR and its fail-closed changed-lock/new-advisory controls, with online recurring audit activation deferred until the clean-trust migration is actually qualified. No duplicate inventory implementation or historical performance rerun will be started by Workflow.
rmcdaniel commentedon Nov 4, 2026
Sample App's affected shipped-lock/public-consumer portion of the November Symfony batch is delivered: owning issue #314, merge and final acceptance, exact main
eaf8cd57135ded9e5e3b57a1ccd6ffa36f4f44df.Both locks change only the nine affected records: root Filesystem/HttpFoundation/HttpKernel/Routing/Yaml 8.1.11; microservice HttpFoundation/HttpKernel/Routing 7.4.23 and Yaml 8.1.11. All 122/115 other objects and non-package fields are identical. Fresh full audits for all three committed locks report no advisories, abandoned packages, filters or cooldown exclusions. PHP 8.4/8.5 consumer suites and installed route-cache/health qualification pass; the earlier setup/helper failures remain disclosed separately.
All 17 exact-main workflows / 36 checks and the sole admitted publisher's seven jobs passed on attempt 1. Independent anonymous GHCR/Docker Hub main+immutable platform and installed-graph proof binds both platforms/configs to the merge and index
sha256:a88864752df5da8c3a691f5f452fb2a50d7dd98145ff507b0fbae829fde5ea6a. Each installed inventory contains all 269 locked Composer records, exactly the nine fixed Symfony records and no blocked scan finding under existing reviewed dispositions.This returns Sample App's actual source/public-image outcome to the advisory owning record. It changes no SDK/Server/Cloud release or frozen Server 3.0.5, and does not close other consumers' separately owned remediation.
rmcdaniel commentedon Nov 4, 2026
Committed-lock inventory source is now delivered through #1033 actual-main acceptance: main
98bd98688663c005cb048d88f18119c35b6973b1/ tree9793ba86, four original workflows and30checks terminal27success/3intended skips; target build41933356619 all25jobs terminal. The five-lock exact offline inventory/history checks are active; General verified source/target/checks and removed only the merged remote branch after dependency/run checks.This completes that source subtask of #970. The scheduled online audit remains inactive pending the separately reviewed whole-repository effective-trust work and exception/advisory disposition. Historical exact-lock exceptions are not advisory ignores. Cloud's deployable H2 trust delta has its own source/main acceptance and still needs the separately held image/build/operation gates; public/package/distribution follow-through stays with each owning receipt. General retains these remaining gates, and Workflow guard source may incorporate accepted98bd normally without claiming runtime delivery.