12E: Resolve a standalone conflict behind an interface a host can rebind - #26
Open
nikolaystrikhar wants to merge 2 commits into
Open
12E: Resolve a standalone conflict behind an interface a host can rebind#26nikolaystrikhar wants to merge 2 commits into
nikolaystrikhar wants to merge 2 commits into
Conversation
Adds Conflict\Resolver behind Conflict\Contracts\Resolver_Interface, the Provider binding and the Absorber::resolver() accessor. Nothing wires it yet -- the plugins_loaded step that runs it arrives at the priority ahead of the load pass, and the resolver is the half a host is invited to replace. It switches on the policy: DEFER no-ops, NOTICE_ONLY queues a notice, and DEACTIVATE (the default) deactivates network-aware, queues a merge notice and redirects. An unknown policy is normalised to NOTICE_ONLY through Conflict_Policy::is_valid() before the switch, so a typo like 'defered' is never read as consent to turn off a plugin the site owner deliberately turned on. Every collaborator is a constructor argument with no default -- the registry reader, the detector, the deactivator, the notice queue and the redirector -- so the object a test builds is the object the provider builds, and a host's rebinding of either plugin seam reaches it without the resolver knowing a container exists.
Every new PHP file declares strict_types, so the rule arrives with the file rather than as a sweep over it afterwards. PR 21 covers everything that already existed on main.
nikolaystrikhar
force-pushed
the
12D-hook-guard
branch
from
August 13, 2026 11:01
e7d7a7a to
f3e63d9
Compare
nikolaystrikhar
force-pushed
the
12E-conflict-resolver
branch
from
August 13, 2026 11:01
1849ac3 to
fbc6a5c
Compare
d4mation
approved these changes
Aug 13, 2026
d4mation
left a comment
There was a problem hiding this comment.
Being able to rebind this from the Host Plugin could be super powerful 👀
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
What: adds
Conflict\ResolverbehindConflict\Contracts\Resolver_Interface, theProviderbinding and theAbsorber::resolver()accessor.Usage:
Why this way:
Nothing wires it in this PR. The
plugins_loadedstep that runs it lands at the priority ahead of the load pass, and separating the class from its timing keeps the seam a host rebinds reviewable on its own.An unrecognised policy normalises to the branch that only queues a notice.
Conflict_Policy::is_valid()decides before the switch, so a typo like'defered'— in an option a host persisted, or in whatever the filter returned — is never read as consent to turn off a plugin the site owner deliberately turned on.Every collaborator is a constructor argument with no default — the registry reader, the detector, the deactivator, the notice queue and the redirector — so the object a test builds is the object the provider builds, and a host's rebinding of either plugin seam reaches it without the resolver knowing a container exists.