C4: Extension Points¶
Enforces P6: MCP is extensible.
An MCP-bearing harness either declares ExtensionPoints or explicitly opts out with None. When non-null, it declares:
- training_signal_inputs — what feeds the harness's learning loop
- validation_gate — what validates a proposed new skill
- allowed_mutation_surfaces — which surfaces T3 may mutate
The extension registry registers an extension's tools against the named harness only when extension_points is non-null — the same path customers use to extend G6.
Enforced at: tests/contract/test_extension_points.py.