The explicit in-tree plugin registry and shared context. See DESIGN.md §7.
Scope
backend/plugins/__init__.py: @register decorator, discovery of in-tree plugins, PluginContext (raw dict + pystac.Item + loaded extensions.json metadata), enable/disable by name.
- Define the
ValidatorPlugin Protocol: name: str, pure idempotent check(item, context) -> list[Finding].
Depends on
#2
Test approach
TDD. Register a fake plugin; assert discovery, name->source mapping, toggle on/off, and that running a plugin twice yields identical output (idempotence).
Acceptance
The explicit in-tree plugin registry and shared context. See
DESIGN.md§7.Scope
backend/plugins/__init__.py:@registerdecorator, discovery of in-tree plugins,PluginContext(raw dict +pystac.Item+ loadedextensions.jsonmetadata), enable/disable by name.ValidatorPluginProtocol:name: str, pure idempotentcheck(item, context) -> list[Finding].Depends on
#2
Test approach
TDD. Register a fake plugin; assert discovery, name->source mapping, toggle on/off, and that running a plugin twice yields identical output (idempotence).
Acceptance
DESIGN.md§7.