SSM-Clock Stamp – Failure Mapping (4.4)

Purpose. Deterministic mapping from observed symptoms to causes and actions for SSM-Clock Stamp verification. All guidance is plain ASCII and ready for audit checklists.


1) HASH_OK=false — File bytes changed

  • Symptom: h' != sha_field (under kv:algo if present).
  • Likely cause: File modified, wrong file, text-mode read, wrong algo.
  • Action: Re-read file in binary; recompute h' = H_algo(file_bytes); ensure algo from kv: is applied; compare lowercase 64-hex strings.

2) CLOCK_OK=false — UTC→angle mismatch

  • Symptom: rasi'_idx != rasi_idx or theta_fmt != theta_deg.
  • Likely cause: iso_utc not YYYY-MM-DDThh:mm:ssZ; subseconds/offsets; wrong rounding; wrong theta_prec.
  • Action:
    • Compute unix_seconds = seconds_since_1970_UTC(iso_utc).
    • wrap360(x) = x - 360*floor(x/360)
    • theta'_deg = wrap360( (unix_seconds/86400)*360 )
    • rasi'_idx = floor(theta'_deg/30)
    • Format theta'_deg with exactly theta_prec digits using IEEE-754 binary64 round-half-to-even; compare as strings.

3) Leap-second violation

  • Symptom: iso_utc has :60.
  • Likely cause: Attempt to stamp at 23:59:60.
  • Action: Reject; producers must not stamp at a leap second.

4) CHAIN_OK=false — Append-only break

  • Symptom: Rewalk mismatch at row k:
    H_chain_k( ascii(chain_{k-1} + "|" + stamp_core_k) ) != chain_k.
  • Likely cause: Deletion/insertion/reorder; wrong chain_algo; non-canonical rebuild of stamp_core_k; whitespace/Unicode in joins.
  • Action: Rebuild stamp_core_k exactly; rewalk from chain_0 = "0"*64; use declared per-row kv:chain_algo; hash ASCII of tip "|" stamp_core_k.

5) ANCHOR_OK=false — Roll-up mismatch

  • Symptom: rollup_D' != rollup_sha256 or n != count.
  • Likely cause: Wrong day selection; non-canonical order; wrong join (newline vs |); missing/extra stamp; inner field reformat.
  • Action: Re-select by UTC day; sort by (iso_utc, stamp_core, chain); join as "Stamp_1|...|Stamp_n"; recompute sha256( ascii(joined) ).

6) KV invalid (syntax/domain)

  • Symptom: Parser fails; domains out of range; duplicate keys.
  • Likely cause: theta_prec not in {3..9}; float != ieee75464; time_mode not in {derived_utc, observed}; |Δ|>30 for ssmc_hint_min; malformed chain_id/device; duplicated key.
  • Action: Enforce domains; ignore unknown keys; reject duplicates and out-of-domain values.

7) Orphan sidecar / missing file

  • Symptom: Sidecar exists; original file missing.
  • Likely cause: File moved/deleted.
  • Action: Report HASH_OK=unknown; cannot pass core without the file bytes.

8) Mixed line endings / locale drift

  • Symptom: Angle/hash differences across machines.
  • Likely cause: Text-mode reads; locale formatting of theta_deg.
  • Action: Always read binary; print with . decimal; fixed digits; binary64 banker’s rounding.

9) Wrong field shapes / separators

  • Symptom: Extra spaces, uppercase hex, trailing |, timezone offsets.
  • Likely cause: Non-canonical formatting.
  • Action: Single ASCII line, pipe-separated, no spaces; sha256(file)/chain are lowercase 64-hex; iso_utc ends with Z, seconds only.

Quick triage order (recommended)

  1. Syntax: stamp arity, shapes, leap-second ban.
  2. HASH: recompute with kv:algo.
  3. CLOCK: discrete rasi_idx then theta_deg string.
  4. CHAIN: rewalk (if ledger).
  5. ANCHOR: canonical day → order → join → hash.
  6. EVIDENCE: only if kv:time_mode=observed.

Navigation
Back: SSM-Clock Stamp – Expected Outputs (4.3)
Next: SSM-Clock Stamp – Minimal Verifier Pseudocode (4.5)