SSMT – The Record You Emit and the Rules You Must Publish (1.9–1.11)

How an SSMT stream becomes trusted, auditable infrastructure.

1.9 Emitted record (Full SSMT)
This is the portable object every system downstream should consume. It is intentionally self-describing.

{
  "timestamp_utc": "...",
  "e_T": <number>,

  "a_T": <number, optional>,             # bounded alignment dial
  "a_phase": <number, optional>,         # single-pivot phase dial
  "a_phase_fused": <number, optional>,   # fused multi-pivot dial (if used)
  "Q_phase": <number, optional>,         # soft hysteresis memory
  "T_m_tag": "<string, optional>",       # label if using single pivot
  "T_m_tag_list": ["<string>", ...],     # labels if using fused pivots

  "manifest_id": "<string>",

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

  "oor": false | "below_min" | "above_max",

  "uncertainty": {                       # optional
    "e_T_std": <number, optional>,
    "a_T_std": <number, optional>,
    "method": "delta"
  }
}

Read this slowly:

  • timestamp_utc
    ISO-8601 UTC with Z. All streams must timestamp in UTC, not “local device time.”
  • e_T
    The core contrast, unitless, zero-centric at T_ref. This is mandatory.
  • a_T (optional)
    A bounded stress / alignment dial in (-1,+1). Only emit this if you are in a “bounded pooling / ML prior / fleet alignment” world. If you’re Lite, you probably skip it.
  • a_phase vs a_phase_fused
    • a_phase: one pivot (“freeze line”, “warp temp”, “human skin burn limit”, etc.).
    • a_phase_fused: multi-pivot survival dial that blends several pivots into one safety posture.
      You typically emit exactly one of these, not both.
  • Q_phase
    Memory dial (0..1). This is “how long we’ve effectively been on the risky side.” It suppresses flicker and tells you exposure, not just momentary spike.
  • T_m_tag / T_m_tag_list
    Human-auditable labels like "freeze", "warp", "crew_skin". Auditors love this. Keeps policy explainable.
  • manifest_id
    This is critical. This ties every reading back to the exact recipe: lens choice, pivots, ranges, clamps, etc. The manifest is how you prove you didn’t move the goalposts after an incident.
  • health
    Minimal truth flags:
    • range_ok: did we stay within declared T_valid_range_K?
    • sensor_ok: is the reading physically valid under the declared lens and anchors? (Example: if lens = "log" and T_K <= 0, that’s not physically valid → sensor_ok := false.)
    • drift: optional flag saying “this sensor looks like it’s drifting / miscalibrated.”
  • oor
    Either false, or "below_min", or "above_max". This lets downstream logic acknowledge “we were literally below safe declared range” without guessing.
  • uncertainty (optional)
    Only include this if you are actually tracking noise (for example, standard deviation over a recent sliding window). If you emit faked numbers here, your audit story collapses.

Machine logic rule (non-negotiable):

  • Downstream machine rules should consume only e_T, (and if relevant) a_phase or a_phase_fused, and Q_phase.
  • User-facing dashboards can still render °C/°F for comfort, but those displays do not feed back into logic.

MQTT / telemetry example (copy/paste friendly):

topic: ssmt/{station_id}/s1
payload:
{
  "timestamp_utc": "2025-09-24T12:00:00Z",
  "e_T": 0.0331,
  "a_phase": -0.12,
  "Q_phase": 0.31,
  "uncertainty": { "e_T_std": 0.004, "method": "delta" },
  "manifest_id": "SSMT-CITY-2025-09-001",
  "health": { "range_ok": true, "sensor_ok": true, "drift": false },
  "oor": false
}

Notes:

  • ASCII JSON only.
  • You don’t need to ship raw °C/°F in the machine payload. If you want to show °C to a human later, you can regenerate it from local context. Keep the machine contract clean.

1.10 Commissioning checklist (must-do before first byte)
Commissioning = freezing the contract. After this, you are auditable.

You must decide and publish:

  1. Lens and anchors
    • Pick one lens (log, linear, beta, kBT, hybrid, qlog, or smooth_hybrid).
    • Declare T_ref.
    • Declare knobs (DeltaT, E_unit, tau, alpha, width).
    • These must not silently change mid-run.
  2. Phase pivots (if any)
    • For each pivot: { tag, T_m, DeltaT_m, c_m }.
    • Publish hysteresis knobs: k_side, rho.
    • If you emit a fused dial, also publish the ordered pivot tag list.
  3. Guards and clamps
    • eps_TK (Kelvin floor).
    • eps_a (alignment clamp so |a| <= 1 - eps_a).
    • eps_w (pooling denominator guard).
    • T_valid_range_K = [T_min, T_max].
  4. Health flags
    • Decide if you emit range_ok, sensor_ok, drift.
    • Say what “drift” means.
  5. Emission tier
    • S1 (Lite): only e_T.
    • S2: add a_phase + Q_phase.
    • S3: add a_T, pooling, etc.
    • Declare your tier. Don’t toggle ad hoc.
  6. Manifest ID
    • Assign manifest_id.
    • Every record must carry it so anyone can replay the math and prove you didn’t move thresholds.
  7. UTC timestamp discipline
    • ISO-8601 timestamp_utc with Z. No “local time.”
  8. (If relevant) Privacy / gating hooks
    • If you quantize or noise e_T, publish how.
    • If you drive an environment gate (g_t) downstream, publish that this gate exists and where its knobs live.

Why this matters:
After commissioning, “what did this alert mean?” is answerable without begging your ops lead. That’s the difference between “neat math” and “regulator-ready.”


1.11 Optional — lens_mode = “auto” (resolve once, not per packet)
Extreme fleets get one concession: you can auto-select the lens at commissioning, then lock it.

Policy sketch:

lens_mode := "auto"

if min(T_K) <= T_qsafe:
    lens := "qlog"
elif span_K >= 500:
    lens := "log"
elif min(T_K) < 100:
    lens := "beta"
elif span_K <= 50:
    lens := "linear"
else:
    lens := "hybrid"

Where:

  • span_K := max(T_K) - min(T_K) over your commissioning window.
  • T_qsafe is a published guard (example: 1.0 K) for near-zero regimes.

Rules:

  • You document lens_mode := "auto" and the exact decision logic.
  • You also publish the resolved lens (for example "log") and its knobs in the manifest.
  • You do not re-run this decision every minute. No “we quietly switched to linear for this alarm.” That kills auditability.

Why “auto” exists:

  • Cryogenic → desert → re-entry is real.
  • Manual guessing is brittle.
  • Silent per-packet switching is unacceptable.
    This gives you flexibility without letting policy drift in the dark.

Where we are now
You now have:

  • How to encode temperature into e_T.
  • How to express survivability and stress (a_phase, a_T, Q_phase).
  • How to pool multiple sensors safely.
  • The canonical emitted record.
  • The commissioning ritual that freezes meaning.
  • The one-time “auto lens” rule for extreme deployments.

This is enough to run SSMT in production and defend it.


Navigation
Previous: SSMT – Pooling Sensors, Declaring Valid Ranges, and Staying Honest (1.6.x–1.8)
Next: SSMT – The Manifest: One Tiny Contract Instead of 1,000 Ambiguous Rules (2.0–2.3)


Directory of Pages
SSMT – Table of Contents