Pipeline, recap
Where HSI enters Synheart Core
Typed view: HSIState
HSIState.fromJson(json) extracts:
timestampMsfromtimestamp_msorobserved_at_ms.subjectIdfromsubject_id.hsifrommap['hsi'](or the top-level when the engine wraps differently).modalitiesderived frommeta.provenance.sources[*].signalsper the Synheart signal-modality mapping contract.tiersderived from per-sourcesource_tier(physiological) andmeta.synheart.tiers.{kinematic, digital}.
rawJson is preserved on every state so apps that need full payload access can read it directly.
Axes (HSIAxes)
The current SDK emits four axis-shaped accessors:
HSI axis (HSIAxes field) | HSV head (HsvType) |
|---|---|
focus | Focus |
arousal | Emotion.arousal (one component of the Multiscalar value) |
capacity | Capacity |
sleep | Sleep |
physiological / kinematic / digital / cognitive / affective — those describe the modalities that produced a reading, not the head identity. Head names (focus, capacity, etc.) appear as axis_reading.axis strings under those domains.
Missing axes are null (not zero).
Modalities
physiological == false.
Tiers
Hsv.tiers (TierBundle); flux carries them into the HSI envelope.
Modality / tier derivation in the SDK
Signal-name → modality mapping (used byHSIState.fromJson when reading flux output):
| Signal name | Modality |
|---|---|
hr, hrv, rr, ecg, spo2, respiration, temperature, eda | physiological |
accel, gyro, motion, posture, step | kinematic |
tap, scroll, swipe, key, notification, app, screen | digital |
Validation
The SDK does not enforce HSI schema validation — that lives with the producer (flux) and any cloud consumer. Apps that need strict validation can cross-checkrawJson against hsi-1.3.schema.json before consuming.
The HSI repo defines two validation levels:
- HSI-VALIDATE-BASIC — structural + range checks against the JSON Schema for the claimed
hsi_version. - HSI-VALIDATE-STRICT — cross-field integrity (references, time ordering, dimension checks).
Embedding presence
The 64D Johnson-Lindenstrauss embedding from the inference engine is forwarded intoembeddings[] on the HSI envelope when capability level and HSI version permit. The SDK’s typed HSIState does not surface the embedding directly — apps that need it parse rawJson.
Subscribing
BehaviorSubject-backed: late subscribers receive the latest value. Synheart.currentHSIState is also exposed for synchronous access.
Privacy posture
HSI by design carries no PII (privacy.contains_pii = false). The runtime hashes subject_id before emit; cloud-bound HSI carries subject_hash, not the SDK-supplied subjectId.
The 64D JL embedding is privacy-preserving by construction — the random projection is non-invertible, so the original HSVs cannot be reconstructed from the embedding alone.
Related
- HSV Specification — the typed upstream shape produced by the inference engine.
- HSI overview — canonical contract, schemas, RFCs HSI-0008/0010/0011.
- Architecture — full data flow.
- Cloud Protocol — what HSI actually carries upstream.