- Use `find_components`, or rather it's sibling function created in 1.

...

...

@@ -27,10 +27,10 @@

4. Allow multiple callables in `pre_hook` and `post_hook` run in order specified. Also allow callables for when Mailman exits.

-[MR !288](https://gitlab.com/mailman/mailman/merge_requests/288)

- Already a similar [MR #264](https://gitlab.com/mailman/mailman/merge_requests/264).

- Already a similar [MR !264](https://gitlab.com/mailman/mailman/merge_requests/264).

5. Allow Mailman core to send events to Postorius, HyperKitty and any app that subscribes through a new REST api call with a callback.

-Also add an `IEvent` interface, as currently events don't implement any interface at all.

-Implemented in the [mailman-rest-events](https://gitlab.com/J08nY/mailman-rest-events) plugin.

6. Drop `ext_dir`.

-[MR !288](https://gitlab.com/mailman/mailman/merge_requests/288)

...

...

@@ -45,12 +45,19 @@

9. Add `description` attribute to `IStyle` and the default styles, so that mailing list styles have some human readable string to show.

-[MR !289](https://gitlab.com/mailman/mailman/merge_requests/289)

9. ? Make all commands be able to require confirmation and make this a configurable option.

- How?

- Abstract out confirmation of commands (is actually almost there with Pendables)

- Add another field to `MailingList` model, for a list of commands that require confirmation for that list?

10. ?? Add a new attribute to several core models (MailingList, User, Address, ...) in which plugins can store metadata about said objects. This attribute woul be a PickleType, really a dict with, plugin-names as keys. Each plugin could access its and only its metadata attached to a given object.

10. Refactor Subscription and Unsubscription workflow to allow a plugin to add steps to it's state machine.

- Introduces `IWorkflow` interface for the workflow state machine.

- Allows the `WorkflowStateManager` to store more workflow steps than the current one and adds a migration for this change.

- Refactors the monolithic SubscriptionWorkflow and UnsubscriptionWorkflow classes to reusable mixins, allowing to deduplicate their code and create custom workflows.

- Migrates the `subscription_policy` and `unsubscription_policy` attributes from the `SubscriptionPolicy` enum, to store the name of the respective SubscriptionWorkflow class, dynamically loaded.

-[MR !299](https://gitlab.com/mailman/mailman/merge_requests/299)

- On top of [MR !300](https://gitlab.com/mailman/mailman/merge_requests/300) which instantiates components only in the `add_components` utility function and not at lower levels, since Workflow components need to be stored as classes and instantiated on use.