Port the extension heuristics from eodh-validator as the first registered plugin, and ship the metadata it needs. See DESIGN.md §6, §7.
Scope
backend/plugins/extensions.py: port test_item_extensions logic — maturity warnings, Item-vs-Collection scope, declared-but-unused extensions, used-but-undeclared prefixes, unknown prefixes, nested-property advice.
- Emit
Finding(category=extension, confidence=heuristic) (normative only where genuinely spec-grounded).
- Ship pre-built
data/extensions.json as package data. Generation (get_extensions.py) stays offline — do NOT fetch at validation time.
Depends on
#7
Test approach
TDD. Fixtures per heuristic branch; assert tailored messages and heuristic confidence.
Acceptance
Port the extension heuristics from
eodh-validatoras the first registered plugin, and ship the metadata it needs. SeeDESIGN.md§6, §7.Scope
backend/plugins/extensions.py: porttest_item_extensionslogic — maturity warnings, Item-vs-Collection scope, declared-but-unused extensions, used-but-undeclared prefixes, unknown prefixes, nested-property advice.Finding(category=extension, confidence=heuristic)(normative only where genuinely spec-grounded).data/extensions.jsonas package data. Generation (get_extensions.py) stays offline — do NOT fetch at validation time.Depends on
#7
Test approach
TDD. Fixtures per heuristic branch; assert tailored messages and
heuristicconfidence.Acceptance
eodh-validatorextension branches reproduced.extensions.jsonbundled and loaded viaPluginContext.