Mirrors lakehouse f1fa6e4 (Phase 1.6 Gate 3a). Adds:
type BiometricCollection struct {
DataPath string
TemplateHash string
CollectedAt time.Time
ConsentVersionHash string (omitempty)
Classifications json.RawMessage (omitempty)
}
SubjectManifest gains *BiometricCollection biometric_collection,omitempty
field so manifests written by the Rust biometric upload endpoint
round-trip through the Go reader without losing the new collection
record.
Cross-runtime parity probe (subject_audit_parity.sh) still 6/6
byte-identical after the field addition — the omitempty pointer means
manifests without a collection record produce identical bytes to
pre-Gate-3a manifests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>