docs: add a Role in the framework section to every module README

Each module README now says where the module sits in the dependency
graph, why it is its own module, and lists use cases for application
developers.
This commit is contained in:
2026-10-11 00:58:17 +02:00
parent 87953f68bf
commit 602e0412f3
24 changed files with 240 additions and 0 deletions

View File

@@ -10,6 +10,16 @@ Capability interfaces that compiled plugins implement to contribute routes, conf
`pact` is the contract layer between plugins and the framework. It holds interfaces and plain data types, with no behaviour of its own. A plugin opts into a capability by implementing one of the `Has*` interfaces, and the framework package that owns the capability discovers it with a type assertion ([party](../party/README.md) for config, [surf](../surf/README.md) for routes and middleware, [lagoon](../lagoon/README.md) for migrations, [cabana](../cabana/README.md) for admin controllers, [conga](../conga/README.md) for jobs and schedules). It replaces the `register*()` methods of a WinterCMS PluginBase (`registerPermissions`, `registerNavigation`, `registerSettings` and so on) with small, separately implementable interfaces.
## Role in the framework
The contract layer between the framework and plugins; it depends only on `bonfire`. `party`, `lagoon`, `conga`, `cabana`, `phrasebook`, `postcard`, `lighthouse` and `surf` all read it. It holds interfaces only, so a plugin can depend on the contracts without pulling in the modules that implement them.
Use cases:
- Make a plugin contribute routes, migrations, commands and admin screens by implementing the matching interfaces.
- Offer optional features: a plugin implements only the capabilities it needs.
- Write plugins that are compiled in without a runtime loader, checked by the compiler.
## Features
- Plugin capability interfaces: `pact.HasRoutes`, `pact.HasConfig`, `pact.HasMigrations`, `pact.HasCommands`, `pact.HasModels`, `pact.HasJobs`, `pact.HasSchedule`, `pact.HasLang`, `pact.HasLangOverrides` and `pact.HasMailTemplates`.