Without naming a schema, a serialized predicate's column references
are ambiguous: the same field name can refer to different field IDs
across schema-evolution events, and Substrait field-reference IDs
mean nothing without saying which schema they index into.
Make the request shape unambiguous:
- Add ParquetPushdownRequest.SchemaId (Iceberg schema id) to the
proto and to the design's API sketch.
- Document the binding contract in the design: the predicate must
carry only field-id references; the connector binds before
sending, the server checks ids against the schema.
- Validation now rejects (predicate set, schema_id == 0) with
InvalidArgument before any work is done. Deeper "every field id
exists in the snapshot's schema" check needs catalog access and
lands in M3.
- Update / add tests covering the new gate.