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(underkv:algoif present). - Likely cause: File modified, wrong file, text-mode read, wrong
algo. - Action: Re-read file in binary; recompute
h' = H_algo(file_bytes); ensurealgofromkv:is applied; compare lowercase 64-hex strings.
2) CLOCK_OK=false — UTC→angle mismatch
- Symptom:
rasi'_idx != rasi_idxortheta_fmt != theta_deg. - Likely cause:
iso_utcnotYYYY-MM-DDThh:mm:ssZ; subseconds/offsets; wrong rounding; wrongtheta_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'_degwith exactlytheta_precdigits using IEEE-754 binary64 round-half-to-even; compare as strings.
- Compute
3) Leap-second violation
- Symptom:
iso_utchas: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 ofstamp_core_k; whitespace/Unicode in joins. - Action: Rebuild
stamp_core_kexactly; rewalk fromchain_0 = "0"*64; use declared per-rowkv:chain_algo; hash ASCII oftip "|" stamp_core_k.
5) ANCHOR_OK=false — Roll-up mismatch
- Symptom:
rollup_D' != rollup_sha256orn != 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"; recomputesha256( ascii(joined) ).
6) KV invalid (syntax/domain)
- Symptom: Parser fails; domains out of range; duplicate keys.
- Likely cause:
theta_precnot in{3..9};float != ieee75464;time_modenot in{derived_utc, observed};|Δ|>30forssmc_hint_min; malformedchain_id/device; duplicatedkey. - 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)/chainare lowercase 64-hex;iso_utcends withZ, seconds only.
Quick triage order (recommended)
- Syntax: stamp arity, shapes, leap-second ban.
- HASH: recompute with
kv:algo. - CLOCK: discrete
rasi_idxthentheta_degstring. - CHAIN: rewalk (if ledger).
- ANCHOR: canonical day → order → join → hash.
- 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)