Adds parallel OCR3_1 implementation alongside the existing OCR3 plugin so the CRE consensus DON can move bulk observation payloads onto blobs (>512
KiB customer payloads no longer fit under OCR3_1's halved cap).
- New files: factory_ocr3_1.go, ocr3_1.go, reporting_plugin_ocr3_1.go (+ test). End-to-end blob path wired (Observation broadcasts,
ValidateObservation parses handles, StateTransition fetches with materializeBlobs).
- Versioned KV via OutcomeEnvelope{Version:1}; reads reject unknown versions.
- Deterministic encoder tiebreak fix (count desc, sha asc) for the OCR3 map-iteration bug.
- Proto extended: BlobbedObservation, OutcomeEnvelope, plus 7 OCR3_1-only ReportingPluginConfig fields including the three mandatory blob/KV
rate-limits.
- libocr bumped to v0.0.0-20260403184524-b6409238958d to align with chainlink. Canonical names: ReportingPluginInfo1, KeyValueStateReader/ReadWriter,
*Bytes limit fields.
- Verified: go build/vet/test ./... clean (294 packages).
OCR3_1 scaffold for the CRE production consensus
plugin. Second OCR3_1 user after Vault. Motivated by a customer blocked on >512 KiB observation payloads. Plan + rollout: see internal OCR3_1
migration plan, Part 7/10. Verified locally: go build/vet/test ./... clean. Do not merge until: (1) integration tests cover the OCR3_1 path, (2)
preflight item 4 (libocr blob durability across restart) is answered.