You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
fix: compose all provider extensions by default - #49
Providers registered separately could return before later extensions ran, or let an earlier extension-only provider shadow a later factory. The helper, factory and builder now select the first callable factory and apply all provider extensions in registration order by default, with no activation API.
Composition state stays in existing classes. AggregateContainer stores source order, required-entry policy and inferred-alias origins internally; ServiceProviderContainer owns provider definitions, extension composition and shared caches. The builder assembles those objects. There are no additional runtime classes or per-provider wrapper objects.
The aggregate can directly compose PSR-11 sources and providers, and the provider adapter accepts an ordered provider list. Selected factories retain their original positions against interleaved external sources. Explicit AggregateServiceProvider keeps its existing last-factory precedence. Selected provider failures propagate instead of becoming successful fallback values; failed chains remain retryable.
Updates regression coverage, the isolated production-consumer CI job, RST/PHPDoc, runnable examples, the bundled consumer skill and a fixed/patch changelog fragment.
The latest local validation ran the configured GrumPHP tasks sequentially, without a hook bypass. The overall gate failed and the PR remains draft.
Composer validation, PHP/JSON/YAML lint, Rector, PHPDoc, ECS and a separate Composer Normalize dry run passed.
The PHP 8.5 suite completed 290 tests and 997 assertions; the explicit 80% coverage requirement passed at 93.92%.
The direct PHP 8.4 suite reached 290 tests and 997 assertions, then emitted a third-party desktop-notification subscriber warning. This is not counted as a clean gate.
The PHP 8.3 suite completed 290 tests and 993 assertions with one existing skip requiring the intl extension.
All four isolated production-consumer combinations (PHP 8.3/8.5 and minimum/current dependencies) passed 33 tests and 205 assertions each, with platform requirements checked against their respective runtimes.
The complete DevTools composite failed in Code Style: its dependency lock refresh triggers plugin synchronization that mishandles Git worktrees. Skill synchronization also encountered a filesystem denial. Report generation additionally produced malformed JUnit output and a notification-subscriber warning. These failures remain visible; no checks, permissions, hooks or vendor code were changed to turn them into a pass.
Dependencies were installed only in the authorized worktree. No new runtime or extension was installed. Generated scaffolding changes were restored, and no implementation changes, commit, push, merge or release followed this validation. Full logs remain local.
The two original published commits used --no-verify, as previously disclosed. That historical bypass was not repeated. The published PR head is unchanged. A clean gate is still required.
Additional diagnostic review:
The published head and main are unchanged, and no new review findings were posted. No full suite was repeated.
A small read-only probe of the installed DevTools result interpreter confirmed two cases: a failed PHPUnit payload with a warning is labeled successful when the process exit is zero; two consecutive success/failure payloads also leave an exit-derived success while the payloads fall back to raw text.
A separate saved-artifact check confirmed the two conflicting PHPUnit snapshots and an invalid JUnit document with a second XML declaration. These are diagnostic reproductions, not passing gates.
This dependency belongs with the existing Testing issue #380 and DevTools PR #376. Their work is not assumed to be present in this consumer. No vendor/runtime patch, check suppression, permission change or code publication was performed here.
Dependency handoff follow-up:
Read back the focused Testing qualification: 40 fixture tests and 110 assertions, with scoped style checking and review. This is not a released runtime or qualification of the real Container incident.
The installed consumer tooling is unchanged. Lock-refresh/plugin synchronization, worktree hook-target resolution and the skills filesystem denial remain independent blockers.
Prepared a bounded replay plan for the exact saved stdout and malformed JUnit. The stdout must retain the late failure; the old JUnit must be rejected rather than repaired into a pass. Regenerating a clean real consumer artifact remains pending.
No new suite, matrix, compilation, installation, vendor substitution, hook/permission change or code publication was performed for this follow-up. The gate remains failed.
Contribution: 1 new valid fragment(s). Policy: ordinary.
compose-provider-extensions.md — fixed, patch
Fixes cross-provider extension composition by default in `container()`, `ContainerFactory::create()` and `ContainerBuilder::build()`. The first callable factory keeps precedence and all provider extensions run in registration order after selection, including earlier extension-only providers. Selected provider failures propagate instead of being masked by fallback. Explicit `AggregateServiceProvider` retains its last-factory precedence.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Providers registered separately could return before later extensions ran, or let an earlier extension-only provider shadow a later factory. The helper, factory and builder now select the first callable factory and apply all provider extensions in registration order by default, with no activation API.
Composition state stays in existing classes.
AggregateContainerstores source order, required-entry policy and inferred-alias origins internally;ServiceProviderContainerowns provider definitions, extension composition and shared caches. The builder assembles those objects. There are no additional runtime classes or per-provider wrapper objects.The aggregate can directly compose PSR-11 sources and providers, and the provider adapter accepts an ordered provider list. Selected factories retain their original positions against interleaved external sources. Explicit
AggregateServiceProviderkeeps its existing last-factory precedence. Selected provider failures propagate instead of becoming successful fallback values; failed chains remain retryable.Updates regression coverage, the isolated production-consumer CI job, RST/PHPDoc, runnable examples, the bundled consumer skill and a fixed/patch changelog fragment.
The latest local validation ran the configured GrumPHP tasks sequentially, without a hook bypass. The overall gate failed and the PR remains draft.
The complete DevTools composite failed in Code Style: its dependency lock refresh triggers plugin synchronization that mishandles Git worktrees. Skill synchronization also encountered a filesystem denial. Report generation additionally produced malformed JUnit output and a notification-subscriber warning. These failures remain visible; no checks, permissions, hooks or vendor code were changed to turn them into a pass.
Dependencies were installed only in the authorized worktree. No new runtime or extension was installed. Generated scaffolding changes were restored, and no implementation changes, commit, push, merge or release followed this validation. Full logs remain local.
The two original published commits used
--no-verify, as previously disclosed. That historical bypass was not repeated. The published PR head is unchanged. A clean gate is still required.Additional diagnostic review:
Dependency handoff follow-up:
Fixes #48.