root df2a9d1f77 catalogd: BiometricCollection on Go SubjectManifest reader
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>
2026-05-03 04:55:49 -05:00
..