Scope. Concise, normative clarifications for the stamp string, required fields, and exact computations. All outputs are plain ASCII.
Float determinism (must).
All intermediate math SHALL use IEEE-754 binary64; decimal point is '.'; no thousands separators.
Canonical angle string (must).theta_deg MUST be rendered with exactly theta_prec fractional digits using round-half-to-even. Default theta_prec = 5.
UTC string (must).iso_utc is UTC-only in fixed form YYYY-MM-DDThh:mm:ssZ (no subseconds, no offsets).
Leap-second policy (must).
Stamping during 23:59:60 is forbidden. Verifiers MUST reject any stamp whose iso_utc claims :60.
Algorithm agility (kv: tail).
Declare per-stamp algorithms without changing the base fields:
kv:algo(file digest) ∈{sha256, sha3_256, blake2b-256}kv:chain_algo(chain digest) ∈{sha256, sha3_256, blake2b-256}
Expected hex length for both digests:64(256-bit).
Rule: Verifier MUST recompute using the declared algorithms and compare as lowercase hex.
Deterministic clock from UTC (recap).wrap360(x) = x - 360*floor(x/360)theta_deg = wrap360( (unix_seconds / 86400) * 360 )rasi_idx = floor(theta_deg / 30)
Append-only chain (recap).stamp_core = "SSMCLOCK1|" + iso_utc + "|" + rasi_idx + "|" + theta_deg + "|" + h_filechain_0 = "0"*64chain_k = H_chain( ascii(chain_{k-1} + "|" + stamp_core) ) (H declared by kv:chain_algo, default sha256)
Large files (allowed).sha256(file_bytes) (or algo) MAY be computed via streaming; the digest MUST equal the monolithic hash of the same bytes.
Observed-time mode (optional).
Use kv:time_mode=observed if you set iso_utc from lightweight observations (e.g., OS clock, HTTPS Date, org NTP, GPS).
Typical evidence (ASCII sidecar, not part of the stamp):obs_iso_utc=<ISO_Z> • tolerance_sec=<int> • delta_sec=<int> • obs_sources_ascii=<list> • obs_evidence_sha256=<hex>
Advisory refinement (optional, non-breaking).kv:ssmc_hint_min = Δ with |Δ| <= 30 minutes. Verifiers MAY compute an advisory theta_deg' using unix_seconds + 60*Δ; core verification stays anchored to iso_utc.
Alignment meta (optional, non-breaking).kv:a_stamp ∈ (-1,+1) — a bounded quality scalar carried as metadata; it does not affect pass/fail.
Backdating bound & anchors (policy).
Bound offline backdating by anchor cadence:max_backdating_window_sec <= anchor_period_sec
Daily anchor: rollup_D = sha256( ascii(Stamp_1 "|" ... "|" Stamp_n) ) with canonical sort by (iso_utc, stamp_core, chain).
Provenance helpers (optional, non-breaking).kv:chain_id = <8 hex> (e.g., 1a2b3c4d), kv:device = <ascii_token> with [A-Za-z0-9._-]{1,32} — aids safe multi-device merges; unknown kv: keys are ignored by verifiers.
Acceptance (summary checks).
theta_degstring uses exactlytheta_precdigits (default5) underIEEE-754 binary64rounding.- File and chain digests match recomputation under declared
algo/chain_algo. float == ieee75464;time_mode ∈ {derived_utc, observed}; otherwise FAIL.- If present:
|ssmc_hint_min| <= 30;chain_idanddevicematch their patterns. - Unknown
kv:keys: ignored (forward-compatible).
Navigation
Back: SSM-Clock Stamp – One-line Format & Core Rules (0A)
Next: SSM-Clock Stamp – Quick Q&A: Integrity • Clock • Anchors (0C)