C1: Block Contract Mandatory¶
Enforces P1: Every component is a harness.
Every concrete AIBlock subclass on the production allowlist must carry an @block_contract declaration. The decorator attaches the contract to the class (__g6_block_contract__); the contract is the source for generated harness pages and for reliability routing.
Scope and migration¶
Allow-listed components (per policies/production_harnesses.yaml) must satisfy C1 once promoted. Non-allow-listed components may carry placeholder values and are flagged in the scorecard rather than failing CI — promotion requires filling the placeholders.
Enforced at: tests/contract/test_every_block_has_contract.py.