SSMT – Field Definitions, Payload Keys, and Staying Backwards-Safe (2.4–2.6)

Exactly what every field means, how devices must emit, and how receivers should interpret it.

2.4 Field definitions (normative)
These definitions make Shunyaya Symbolic Mathematical Temperature (SSMT) predictable. Every receiver, auditor, downstream AI, or safety system should interpret these fields the same way.

We’ll walk through each block in the manifest:

  1. version
    • Spec version string, for example "1.1".
    • Purpose: lets you know which SSMT ruleset this manifest follows.
  2. compliance_level
    • "S1" → only e_T.
    • "S2" → adds phase dial and hysteresis memory (a_phase, Q_phase).
    • "S3" → adds bounded fleet dial (a_T), pooling, gating hooks.
    • You must be honest. Don’t claim "S3" if you’re only emitting e_T.
  3. lens
    • "log" | "linear" | "beta" | "kBT" | "hybrid" | "qlog" | "smooth_hybrid".
    • One lens per stream/study/mission. No silent switching.
  4. anchors block
    • T_ref (K): required. This is the zero point where e_T = 0.
    • DeltaT (K): only if lens == "linear". Must satisfy DeltaT > 0.
    • E_unit (J/mol): only if lens == "kBT". Must satisfy E_unit > 0.
    • c_T > 0: required only if you emit a_T. This controls how sharp the bounded dial responds to e_T.
    • tau > 0 (K): only if lens == "hybrid" or lens == "smooth_hybrid".
    • alpha > 0: only if lens == "qlog" (or qlog-style near-zero form).
    • Optional T_ref_policy: "fixed", "seasonal", "diurnal", or "rolling-<window>".
      • If you are not strictly fixed at one baseline (for example, you track human comfort that shifts day/night), you must say so.
      • You still cannot silently change policy mid-run.
  5. guards block
    • clamp_a_eps in (0, 1e-3], default 1e-6.
      • This is the clamp for any bounded dial like a_T or a_phase, enforcing |a| <= 1 - clamp_a_eps.
    • eps_w in (0, 1], default 1e-12.
      • Guard in pooling math so denominators never go to zero.
      • Only needed if you do pooling / averaging across sensors.
    • eps_TK > 0, default 1e-6.
      • Kelvin floor after conversion. Keeps math stable near 0 K.
    • T_valid_range_K = [T_min, T_max], with 0 < T_min < T_max.
      • Declares the physical/safe range expected for that deployment.
      • Used to set health flags and oor (“out of range”) later.
  6. phase_block (optional)
    • T_m_list: list of pivots representing material or safety thresholds.
      • Each pivot is { tag, T_m, DeltaT_m > 0, c_m > 0 }.
      • Example tags: "water_freeze", "hull_warp", "skin_burn".
    • rho in (0,1)
      • Memory factor for hysteresis (Q_phase). Higher → slower to flip state.
    • k_side > 0
      • Controls how sharp p_side flips across the pivot.
    • If you don’t provide T_m_list, you are not emitting a phase dial. That’s allowed. That’s S1.
  7. pooling (optional)
    • weight_rule: "equal", "inv_var", or "health".
    • This declares how you weight multiple dials (like a_T from many sensors) before doing rapidity pooling.
    • Critical for fleets, arrays, or multi-sensor fusion — auditors need to know how you aggregate.
  8. health_flags
    • enable_range_ok (true/false)
    • enable_sensor_ok (true/false)
    • enable_drift (true/false)
    • You’re telling downstream consumers which health flags to expect in payloads.
    • If you turn these on, you’re committing to emit them.
  9. validation (optional)
    • dataset_ref, test_vectors_ref: where your comparison data lives.
    • metrics: named thresholds like { E_hot: 0.8, Phi_freeze: 0.10 }.
    • This is how you prove that your alerting choices weren’t magic.
    • It’s also how Shunyaya Symbolic Mathematical Temperature (SSMT) builds credibility over time (regulators, QA, safety boards).
  10. privacy (optional)
    • { mode: "P0"|"P1"|"P2", step?, b?, eps? }
    • This declares any quantization/noise policy if you’re trying to hide exact Kelvin.
    • If it’s not declared here, you should not claim privacy later.
  11. gate (optional)
    • { enabled, lane, w, L, kappa, mu, rho_g, theta_g }
    • This is your declared environmental gate (env-gate) recipe.
    • If you say “we throttle chemistry when it’s unsafe,” this block is where you prove you’re not improvising per incident.
    • lane expresses how you combine a_T, Q_phase, and/or a_phase to form risk.
    • theta_g is the published policy threshold.
  12. outputs
    • Explicit booleans like:
      • emit_e_T: true
      • emit_a_T: false
      • emit_a_phase: true
      • emit_Q_phase: true
    • You’re telling the world which symbolic channels you actually put on the wire.
    • This prevents downstream confusion like “why is a_T missing on this site?”
  13. notes
    • Free text.
    • Store intent, deployment context, safety rationale.
    • Do not put PII here.

Summary: after reading a manifest, a downstream system should be able to:

  • Recompute e_T from Kelvin.
  • Interpret a_phase and Q_phase near critical pivots.
  • Understand what range_ok and sensor_ok mean.
  • Know exactly what was emitted and why.

2.5 Emitted payload (normative keys)
Devices must emit stable keys that match the manifest. Human dashboards can still show °C/°F for comfort or regulatory forms, but that is display-only. Machine logic consumes the symbolic fields.

Here is the canonical SSMT payload:

{
  "timestamp_utc": "2025-09-24T12:00:00Z",
  "e_T": 0.0331,

  "a_T": -0.12,                // optional, only if emit_a_T == true
  "a_phase": -0.31,            // optional, single pivot form
  "a_phase_fused": 0.42,       // optional, multi-pivot form
  "Q_phase": 0.31,             // optional, hysteresis memory in [0,1]

  "T_m_tag": "water_freeze",   // optional if single pivot
  "T_m_tag_list": ["water_freeze","hull_warp"], // optional if fused

  "manifest_id": "SSMT-CITY-2025-09-001",

  "health": {
    "range_ok": true,
    "sensor_ok": true,
    "drift": false
  },

  "oor": false,                // or "below_min" or "above_max"

  "uncertainty": {
    "e_T_std": 0.004,
    "a_T_std": 0.02,
    "method": "delta"
  }
}

Normative expectations:

  • timestamp_utc must be ISO-8601 UTC with Z. No local time.
  • manifest_id must correspond to a published manifest. No orphan streams.
  • e_T must always be present.
  • health.range_ok must always be present.
  • If you emit a phase dial:
    • Use either a_phase (single pivot) OR a_phase_fused (multi-pivot), not both.
    • If a_phase is present, include a single T_m_tag.
    • If a_phase_fused is present, include T_m_tag_list (non-empty).
  • Q_phase is optional but becomes important in freeze / melt / warp edges. It tells you if you’ve been “effectively unsafe” for long enough to care.
  • oor (“out of range”):
    • false means you’re inside T_valid_range_K.
    • "below_min" or "above_max" tells you how you violated it.
  • uncertainty is optional. If you include it, you must say how you computed those std-like numbers.

MQTT-friendly minimal (Lite / S1 style) example:

{
  "timestamp_utc": "2025-09-24T12:00:00Z",
  "e_T": 0.0331,
  "a_phase": -0.12,
  "Q_phase": 0.31,
  "manifest_id": "SSMT-CITY-2025-09-001",
  "health": { "range_ok": true, "sensor_ok": true, "drift": false },
  "oor": false
}

Guidance:

  • Keep MQTT payloads pure ASCII JSON.
  • Do NOT inject raw “°C” or “°F” into the machine payload. If a dashboard wants to show “21.4 °C,” that belongs in display/UI code, not in the core stream.

2.6 Validity and domain-violation semantics (must)
This section explains how to behave when the world gets ugly: broken sensors, Kelvin going out of range, or math that’s not defined.

  1. Out-of-range Kelvin
    • You publish T_valid_range_K = [T_min, T_max] in the manifest.
    • At runtime: if T_K < T_min or T_K > T_max: health.range_ok := false oor := "below_min" or "above_max" T_K_eff := clamp(T_K, T_min, T_max) e_T_eff := encode_eT(T_K_eff, ...)
    • You continue computing symbols using T_K_eff only to maintain numeric stability.
    • You do NOT “pretend it’s fine.” You mark it as out-of-range.
  2. Lens domain violations
    Some lenses are not valid for bad inputs:
    • log / beta: require T_K > 0 AND T_ref > 0.
    • linear: requires DeltaT > 0.
    • kBT: requires E_unit > 0.
    • qlog: requires T_ref > 0 and alpha > 0.
    • If you violate these guards:
      • set health.sensor_ok := false.
      • You are telling downstream systems: “do not trust this reading as physically meaningful.”
  3. Kelvin floor
    • After converting to Kelvin from °C/°F/K, you must apply the floor: T_K := max(T_K, eps_TK)
    • eps_TK is declared in guards.
    • Purpose: keep math from blowing up near 0 K and keep contrasts well-behaved.
  4. No silent coercion of decision thresholds
    • Clamping to T_K_eff is for numeric stability and continuity of e_T.
    • It does NOT mean you’re allowed to say “everything is normal.”
    • Consumers must still look at range_ok, sensor_ok, drift, and oor.

Why this matters:

  • You get reproducibility. Anyone replaying this data later can see exactly when a sensor wandered off the rails and how you handled it.
  • You get auditability. You can defend why an alert did or didn’t fire, without saying “the code panicked, so we fudged it.”

Where we are now
By the end of 2.6, we’ve locked down three things:

  • The meaning of every manifest field (2.4).
  • The exact JSON each device must emit (2.5).
  • The mandatory safety behavior when readings go weird (2.6).

This is the heart of compliance. It’s how Shunyaya Symbolic Mathematical Temperature (SSMT) becomes acceptable to legal, operations, ML, reliability, and regulators — all from the same surface.


Navigation
Previous: SSMT – Field-Level Contract for Each Stream (2.0–2.3)
Next: SSMT – Profiles and Upgrade Path (2.7–2.9)


Directory of Pages
SSMT – Table of Contents