Proof of when this statement existed, and in what order
What a stamp is
A stamp turns a reading into evidence by binding:
- time (human-checkable),
- content (digest of canonical bytes),
- order (link to previous digest).
Typical shape:
SSMCLOCK1|<utc>|theta=<deg>|sha256=<hex>|prev=<hex-or-NONE>
utc— an ISO-like UTC time.theta— any monotonic marker available (e.g., rotation/sequence/frame).sha256— digest of the canonical record subset.prev— the previous record’s digest (orNONEfor the first record).
Why it matters
- Integrity: if bytes change, the digest won’t match.
- Ordering: removing/reordering a record breaks the
prevchain. - Replayability: anyone can re-hash the same canonical content offline and verify.
Canonical content (make the hash stable)
Publish exactly what you hash; keep it tiny and deterministic.
Example canonical subset (copy-ready):
canonical(record):
{
"value": <as-emitted>,
"align": <number>,
"band": <string-or-null>,
"manifest_id": <string>
}
Serialization rules (recommendation):
• UTF-8
• no trailing spaces
• stable field order: value, align, band, manifest_id
• integers/floats in plain ASCII (no locale commas)
• true/false/null in lowercase ASCII if used
Digest:
digest := sha256( bytes(canonical(record)) )
Emitting a stamp (sender)
prev := "NONE"
emit(record):
cbytes := bytes( canonical(record) )
digest := sha256(cbytes)
stamp := "SSMCLOCK1|" + utc_now() +
"|theta=" + monotonic_marker() +
"|sha256=" + digest +
"|prev=" + prev
record.stamp := stamp
prev := digest
send(record)
Verifying a stamp (receiver or auditor)
verify(stream):
prev_check := "NONE"
for r in stream_in_arrival_order:
cbytes := bytes( canonical(r) )
expect := sha256(cbytes)
# 1) digest parity
assert parse(r.stamp, "sha256") == expect
# 2) chain continuity
assert parse(r.stamp, "prev") == prev_check
prev_check := expect
Pass ⇒ content is intact and ordering is unbroken.
Failure signatures (what they mean)
digest mismatch → someone edited content after stamping
prev mismatch → record removed/reordered or wrong chain head
time anomaly → clock skew; verify against independent references
theta jump back → non-monotonic source; treat as health signal
Resilience patterns
Outage buffering
# keep local chain even if upstream link drops
append(local_ledger.jsonl, record)
Sharding → merging
# each shard has its own chain; when merging, retain shard heads & order by utc
# (do not re-stamp old records; publish a merge-manifest describing ordering)
Clock discipline
# if clock is corrected, annotate with an out-of-band health flag
health.clock_adjusted := true
Minimal, copy-ready example
{
"value": { "temperature_K": 296.42 },
"align": 0.87,
"band": "GREEN",
"manifest_id": "THERMAL_LINE_COOLING_PLANT_A_v7",
"stamp": "SSMCLOCK1|2025-11-04T11:22:33Z|theta=132.77|sha256=9fde1c...|prev=72af0b..."
}
Checklist (publishers and reviewers)
[ ] canonical(record) is documented and stable
[ ] sha256(canonical(record)) equals stamp.sha256
[ ] first record uses prev=NONE (or declared chain head)
[ ] each next record’s prev equals prior digest
[ ] utc and theta fields are present and sensible
Navigation
Previous: SSMDE – Manifest (1.3)
Next: SSMDE – Putting it together (1.5)
Directory of Pages
SSMDE – Table of Contents