Repository navigation
Add plugin dependency validation and finish lifecycle - #364
Merged
Merged
Conversation
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.
Objective
Introduces explicit plugin dependency declarations and lifecycle validation across the engine. This ensures plugins fail early when required plugins are missing and provides a final initialization stage after all plugins have been registered.
Solution
The plugin system now allows plugins to declare their dependencies through
requires()and perform post-registration setup throughfinish().App.run()registers all plugins, validates their dependencies, invokes their finish callbacks, and then applies queued hooks, aliases, and resources.Root Cause
Plugin dependencies were previously implicit. A plugin could be registered without the plugins it relied on, causing failures later during system execution or resource access.
The registry also did not create a stack trace for duplicate plugins or expose a lifecycle stage for initialization that depends on all plugin registrations being complete.
Why This Approach
This solution was chosen because:
Showcase
Before
Missing dependencies were not detected during application initialization.
After
Running an application without a declared dependency now produces an error identifying the requiring plugin and the missing plugin.
Migration Guide
Custom plugins can declare their dependencies by implementing
requires():Plugins that require post-registration initialization can implement
finish(app).Applications must register every dependency declared by their plugins before calling
run(). Duplicate plugin registrations must also be removed because they now throw an error.Checklist