<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc [
  <!ENTITY nbsp "&#160;">
  <!ENTITY zwsp "&#8203;">
  <!ENTITY nbhy "&#8209;">
  <!ENTITY wj "&#8288;">
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     category="info"
     docName="draft-vandemeent-tibet-causal-time-02"
     ipr="trust200902"
     submissionType="IETF"
     consensus="true"
     version="3">

  <front>
    <title abbrev="TIBET Causal Time">TIBET Causal Time Substrate</title>

    <seriesInfo name="Internet-Draft"
                value="draft-vandemeent-tibet-causal-time-02"/>

    <author fullname="Jasper van de Meent" initials="J."
            surname="van de Meent">
      <organization>Humotica</organization>
      <address>
        <postal>
          <country>Netherlands</country>
        </postal>
        <email>info@humotica.com</email>
        <uri>https://humotica.com/</uri>
      </address>
    </author>

    <date year="2026" month="May" day="9"/>

    <area>Security</area>
    <workgroup>Internet Engineering Task Force</workgroup>

    <keyword>causal time</keyword>
    <keyword>Lamport</keyword>
    <keyword>TIBET</keyword>
    <keyword>logical clocks</keyword>
    <keyword>forward-only recovery</keyword>

    <abstract>
      <t>This document describes the TIBET Causal Time Substrate, a
      forward-only causal ordering model for identity-bound distributed
      systems.</t>
      <t>TIBET does not treat wall-clock time as the primary ordering
      primitive. Instead, it uses a cryptographically bound logical-time
      structure encoded through append-only linkage, monotonic generation
      counters, and signed causal references. External wall-clock sources,
      including NTP, RFC 3161 timestamping services, Roughtime, GNSS, or
      public ledger timestamps, are treated as auxiliary alignment
      anchors rather than as the constitutive source of event order.</t>
      <t>The core claim is simple: TIBET is a forward-only causal
      substrate that enables recovery and reversibility without rewriting
      history.</t>
    </abstract>
  </front>

  <middle>
    <section anchor="status">
      <name>Status of This Memo</name>
      <t>This memo is an Internet-Draft revision (-02) of
      draft-vandemeent-tibet-causal-time, derived from operational
      architecture notes, prototype implementations, and forensic
      delivery work produced in the Humotica / TIBET stack during
      May 2026. The -01 revision added Section 12.4 (Filename-Surface
      Contract) following external peer review by Red Specter Security
      Research (RS-2026-001). The -02 revision adds Section 13
      (Position in the Four-W Vault Family) following the family
      naming agreed with the implementation team on 12 May 2026:
      tibet-vault (WHEN), tibet-keychain (WHERE/HOW), tibet-sam (WHY),
      tibet-gateway (WHERE-EXEC). The Causal Time Substrate underpins
      all four.</t>
      <t>It is intended to capture and formalize an already deployed
      structural property of TIBET rather than to introduce a greenfield
      timing model.</t>
      <t>This document is an initial public framing and substrate document
      intended to align distributed-systems theory, identity-bound
      execution, off-grid or degraded-network operations, and forward-only
      recovery semantics.</t>
    </section>

    <section anchor="problem">
      <name>Problem Statement</name>
      <t>Many distributed systems continue to over-privilege wall-clock
      time. They assume that safe ordering, freshness, replay defense, and
      reversibility can be grounded primarily in synchronized UTC.</t>
      <t>That assumption is fragile under intermittent connectivity, NTP
      outage or misconfiguration, GNSS disruption, clock drift across edge
      nodes, compromised or ambiguous time authorities, and adversarial
      replay after restore or rollback.</t>
      <t>This document argues that causal order should be primary,
      wall-clock time auxiliary, recovery forward-only, and history
      non-rewritable.</t>
    </section>

    <section anchor="terminology">
      <name>Terminology</name>
      <dl>
        <dt>Causal Time:</dt>
        <dd>The ordering of events by their dependency and sequence
        relationships, rather than by globally synchronized wall-clock
        timestamps.</dd>
        <dt>Forward-Only Causal Substrate:</dt>
        <dd>A substrate in which valid state evolution occurs only by
        appending new causally linked events.</dd>
        <dt>Logical Counter:</dt>
        <dd>A monotonic counter associated with event generation and
        ordering. Within TIBET this corresponds to the generation
        field.</dd>
        <dt>External Time Anchor:</dt>
        <dd>An observation of an external time-bearing source, recorded
        into the causal substrate as a signed event.</dd>
        <dt>Drift Record:</dt>
        <dd>A signed record describing observed offset between local time
        and an external anchor or between two time-bearing
        participants.</dd>
        <dt>Triage Fork:</dt>
        <dd>A forward-causal isolation path created in response to
        anomaly, mismatch, or uncertain continuity.</dd>
      </dl>
    </section>

    <section anchor="design-goals">
      <name>Design Goals</name>
      <t>The TIBET Causal Time Substrate is intended to preserve causal
      ordering without dependence on absolute time, support cryptographic
      identity binding of events, permit recovery and revocation without
      history rewriting, and remain meaningful under offline or
      degraded-network conditions.</t>
      <t>It is also intended to integrate with external time anchors,
      support replay-sensitive freshness checks, and surface time
      uncertainty honestly.</t>
    </section>

    <section anchor="model-overview">
      <name>Model Overview</name>
      <t>TIBET encodes causal order through a set of existing structural
      primitives including append-only linkage, signatures, generation
      counters, and parent references.</t>
      <t>These map naturally onto a Lamport-style logical ordering model:
      happened-before pointers, tamper-evident order proof, authenticated
      event origin, logical counters, causal predecessors, and event-line
      roots.</t>
      <t>The important consequence is that TIBET already behaves as a
      causally ordered logical-time substrate. This document formalizes
      that fact.</t>
    </section>

    <section anchor="related-work">
      <name>Relation to Lamport and Related Work</name>
      <t>This document is directly aligned with Lamport's logical-time
      model and the later vector-clock tradition associated with Fidge and
      Mattern.</t>
      <t>TIBET extends that tradition by binding logical ordering to
      cryptographic identity, append-only lineage, and explicit fork,
      merge, and tombstone semantics.</t>
    </section>

    <section anchor="forward-only">
      <name>Forward-Only Property</name>
      <t>The defining property of TIBET causal time is not merely that
      events are ordered, but that valid evolution occurs only by moving
      forward.</t>
      <t>Restore becomes fork rather than rewind, revocation becomes
      successor event rather than mutation, correction becomes amendment
      rather than overwrite, and cancellation becomes compensating action
      rather than erasure.</t>
    </section>

    <section anchor="event-classes">
      <name>Event Classes</name>
      <ul>
        <li>ordinary application or system action events</li>
        <li>fork or snapshot-reference events</li>
        <li>merge or transfer-pair events</li>
        <li>tombstone events</li>
        <li>triage or quarantine events</li>
        <li>external time-anchor events</li>
        <li>drift-record events</li>
      </ul>
      <t>These classes are not all necessarily already standardized in
      TIBET registries, but they align structurally with the substrate
      described here.</t>
    </section>

    <section anchor="external-anchors">
      <name>External Time Anchors</name>
      <t>External time anchors provide auxiliary alignment between local
      causal order and broader time-bearing reference systems such as NTP,
      timestamping authorities defined by <xref target="RFC3161"/>,
      Roughtime, GNSS, PTP, public ledger timestamps, or observed
      environmental anchors.</t>
      <t>External time anchors may improve alignment. They must not
      redefine already established causal order.</t>
    </section>

    <section anchor="drift-alignment">
      <name>Drift and Alignment</name>
      <t>Clock drift is expected in real systems, especially edge systems
      and off-grid nodes. TIBET treats drift as a recordable condition,
      not as a collapse of ordering truth.</t>
      <t>Implementations should be able to represent locally observed
      time, externally anchored time, offset between them, uncertainty
      window, and validity scope of the observation.</t>
    </section>

    <section anchor="processing-model">
      <name>Processing Model</name>
      <section anchor="local-event">
        <name>Local Event</name>
        <t>When a local event is committed, the implementation increments
        or derives a monotonic generation value, binds the event to prior
        causal state, signs the event, and appends it.</t>
      </section>
      <section anchor="incoming-reference">
        <name>Incoming Causal Reference</name>
        <t>When a remote or transferred event enters local reasoning, the
        implementation evaluates causal relation and derives successor
        progression in Lamport style as max(local generation, remote
        generation) plus one for any new local successor event that
        depends on both.</t>
      </section>
      <section anchor="recovery">
        <name>Recovery</name>
        <t>Recovery produces successor state by fork, compensation,
        revocation, or new forward-causal action. It must not pretend to
        restore the system to an earlier pre-committed causal state.</t>
      </section>
      <section anchor="time-anchoring">
        <name>Time Anchoring</name>
        <t>When external time is sampled, the implementation may write an
        external-anchor event and may write drift information, but must
        not use the anchor to invalidate already committed causal
        order.</t>
      </section>
    </section>

    <section anchor="example-flows">
      <name>Example Flows</name>
      <section anchor="snapshot-resume">
        <name>Snapshot and Resume</name>
        <t>In the TIBET model, a snapshot references a chain position and
        resume becomes a fork from that position. The new line advances
        with its own forward-only history.</t>
      </section>
      <section anchor="transfer-pair">
        <name>Transfer Pair</name>
        <t>In TAT or TIBET Drop, transfer_out records sender-side causal
        commitment, transfer_in records receiver-side causal
        acknowledgement, and successor generation derives from the maximum
        of local and sender generation plus one.</t>
      </section>
      <section anchor="surface-mismatch">
        <name>Semantic Surface Mismatch</name>
        <t>If routing surface and sealed manifest differ, content may
        still be valid, but the causal substrate should treat the
        situation as anomaly and create a triage fork or isolation
        path.</t>
      </section>

      <section anchor="filename-surface-contract">
        <name>Filename-Surface Contract</name>
        <t>The semantic surface of a sealed continuity envelope is carried
        in two layers: the filename layer, observable without unpacking,
        and the manifest layer, authoritative only after Ed25519 signature
        verification.</t>
        <t>These two layers MAY agree, partially agree, or conflict. A
        verifying implementation produces one of four surface_status
        verdicts: MATCH (all surface_* fields agree), PARTIAL (some agree,
        others absent or differ), MISMATCH (both layers present and at
        least one field conflicts -- potential rename attack), or NONE
        (neither layer has surface_* fields -- legacy bundle).</t>
        <t>Filename construction is the operator's responsibility. The
        packing library SHOULD provide a helper that derives a canonical
        filename from the manifest's surface_* fields, so MATCH is the
        default for freshly packed envelopes. However, this specification
        does not require it.</t>
        <t>PARTIAL is therefore a valid and expected verdict for envelopes
        that an operator has consciously renamed for human navigation
        (e.g. "vergadering-dinsdag.pdf"). It is NOT a defect; it is a
        recorded statement that the human-applied name diverges from the
        canonical-from-manifest name.</t>
        <t>Implementations MUST be able to reconstruct the canonical
        filename from the manifest alone, so that any peer with the bundle
        can recover the original SSM-derived name after operator rename,
        record both the human name and the canonical name in audit so that
        rename events become explicit instead of silent, and detect
        MISMATCH as a candidate rename-attack signal distinct from PARTIAL
        (operator-renamed) and MATCH (no rename or aligned rename).</t>
        <t>Audit records emitted by a verifying implementation SHOULD carry
        the field name "canonical_name" alongside the on-disk "name" field,
        with a boolean "renamed_by_operator" derived from their inequality.
        This naming convention is referred to as the canonical_name field
        throughout this specification; the helper function that computes
        it from a manifest is named canonical_filename().</t>
        <t>This contract anchors causality to the visible surface: a peer
        seeing only the filename has a hint; a peer seeing the sealed
        content has the truth; the audit chain records the relationship
        between the two.</t>
      </section>
    </section>

    <section anchor="vault-family-position">
      <name>Position in the Four-W Vault Family</name>
      <t>The Causal Time Substrate defined in this document does not
      stand alone. It underpins a four-part family of credential and
      continuity primitives, agreed informally by the implementation
      team on 12 May 2026 and elaborated in companion specifications.</t>

      <section anchor="family-overview">
        <name>Overview</name>
        <t>The four-W family arose from the recurring observation that
        secret-handling systems consistently fail to answer four
        distinct questions: when may a sealed result be disclosed, how
        is the underlying secret stored and tracked, why is a specific
        bounded act permitted, and where is the act safely performed.
        Each W maps to its own primitive in the family.</t>
        <t>The family members are: tibet-vault, the WHEN primitive,
        which is a temporal trigger that releases a sealed payload on
        a date or upon a dead-man-switch condition; tibet-keychain,
        the WHERE/HOW primitive, which records custody and timeline
        for where a secret currently lives, who touched it, when it
        was rotated or exposed, and how it moved between owner,
        custodian, and active operator; tibet-sam, the WHY primitive,
        which is a Sealed Authentication Module that permits a single
        bounded act without releasing the underlying secret and is
        specified as an extension to the Semantic Surface Manifest
        (see related document draft-vandemeent-tibet-semantic-surface-
        manifest, Section 13); and tibet-gateway, the WHERE-EXEC
        primitive, which is the execution boundary runtime in which a
        SAM envelope is unsealed, validated, executed against an
        upstream credential, and the ephemeral session destroyed.</t>
      </section>

      <section anchor="family-causal-relation">
        <name>Causal relation between the family members</name>
        <t>The Causal Time Substrate provides the verifiable
        ordering and identity-bound action chain that lets the four
        family members interoperate. Every meaningful event in the
        family produces an entry in a TIBET audit chain: secret
        creation in tibet-keychain, SAM materialisation linking back
        to the issuing keychain action, gateway execution linking to
        the materialised SAM, and disclosure events in tibet-vault
        when applicable.</t>
        <t>The forward-only property defined in Section 7 of this
        document ensures that none of these events can be retroactively
        altered: a credential-handling system built on this substrate
        cannot pretend that a secret was rotated earlier than it was,
        nor that an authorisation was granted before the prior
        revocation event.</t>
      </section>

      <section anchor="family-regulatory-fit">
        <name>Regulatory fit</name>
        <t>The four-W family answers four distinct regulatory
        questions that traditional secret-store products do not
        natively address: who has access (custody timeline, WHERE/HOW
        primitive); why was a specific use authorised (intent and
        scope record, WHY primitive); where did the use occur
        (execution boundary record, WHERE-EXEC primitive); and when
        may the result be disclosed (temporal trigger, WHEN
        primitive). Implementations of any subset of these primitives
        SHOULD record their events into a shared Causal Time Substrate
        chain so that audit walkers (such as tibet-cbom) can
        reconstruct the full sequence after the fact.</t>
      </section>
    </section>

    <section anchor="security">
      <name>Security Considerations</name>
      <t>This document assumes an attacker may replay previously valid
      artifacts, re-inject old state through backup or restore channels,
      manipulate wall-clock sources or exploit clock drift, rename or
      relabel artifacts outside sealed causal truth, or attempt
      destructive rollback semantics through operational tooling.</t>
      <t>The forward-only causal model is specifically designed to reduce
      replay-after-restore, replay-after-revoke, backup injection,
      clock-spoofing ambiguity, drift concealment, and destructive
      rollback.</t>
      <t>The key invariant is that security-sensitive reversibility must
      be implemented as forward causal compensation, not as history
      rewrite.</t>
    </section>

    <section anchor="interop">
      <name>Interoperability Considerations</name>
      <t>This substrate is designed to compose with JIS identity, UPIP
      continuity, TAT transfer flow, TBZ or ICC container semantics, and
      semantic routing surfaces.</t>
      <t>Interoperability therefore depends less on UTC agreement and more
      on shared causal encoding, verifiable linkage, explicit anchor
      semantics, and clear distinction between order and alignment.</t>
    </section>

    <section anchor="broader-stack">
      <name>Relationship to the Broader Humotica Stack</name>
      <t>Within the broader architecture, Turing answers what computes,
      Lamport-style causal time answers when in event order, JIS answers
      who is permitted, and semantic framing layers answer within what
      semantic frame a process is interpreted.</t>
      <t>TIBET occupies the causal-time substrate role while composing
      with the other axes.</t>
    </section>

    <section anchor="future-work">
      <name>Future Work</name>
      <ul>
        <li>standardized external time-anchor token shape</li>
        <li>standardized drift-record token shape</li>
        <li>explicit uncertainty handling</li>
        <li>causal freshness proofs for intermittently connected
        devices</li>
        <li>zero-disclosure continuity proofs over long time horizons</li>
        <li>alignment with RFC 3161, Roughtime, and public-ledger
        anchoring profiles</li>
      </ul>
    </section>

    <section anchor="future-questions">
      <name>Questions for Future Revisions</name>
      <t>The following topics are non-blocking for the present -00
      version and are recorded here to guide later discussion and
      interoperability work.</t>
      <ul>
        <li>whether drift should be standardized as its own token type or
        as a subclass of time-anchor event</li>
        <li>whether external anchor trust levels should be formally
        graded</li>
        <li>whether causal freshness should be defined as a reusable
        verification primitive</li>
        <li>how uncertainty and stale-anchor conditions should be surfaced
        in operator tooling</li>
        <li>whether some domains should require time-anchor presence while
        others permit purely local causal mode</li>
      </ul>
    </section>

    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions in the present version.</t>
      <t>Future revisions may define registries for external time-anchor
      token shapes, drift-record token shapes, or causal freshness proof
      types, likely under Expert Review policy as described in
      <xref target="RFC8126"/>.</t>
    </section>
  </middle>

  <back>
    <references>
      <name>References</name>
      <reference anchor="LAMPORT1978">
        <front>
          <title>Time, Clocks, and the Ordering of Events in a Distributed System</title>
          <author fullname="Leslie Lamport" surname="Lamport" initials="L."/>
          <date year="1978"/>
        </front>
        <seriesInfo name="Communications of the ACM" value="21(7)"/>
      </reference>
      <reference anchor="RFC3161" target="https://www.rfc-editor.org/info/rfc3161">
        <front>
          <title>Internet X.509 Public Key Infrastructure Time-Stamp Protocol (TSP)</title>
          <author fullname="C. Adams" surname="Adams" initials="C."/>
          <date month="August" year="2001"/>
        </front>
        <seriesInfo name="RFC" value="3161"/>
      </reference>
      <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126">
        <front>
          <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
          <author fullname="M. Cotton" surname="Cotton" initials="M."/>
          <author fullname="B. Leiba" surname="Leiba" initials="B."/>
          <author fullname="T. Narten" surname="Narten" initials="T."/>
          <date month="June" year="2017"/>
        </front>
        <seriesInfo name="BCP" value="26"/>
        <seriesInfo name="RFC" value="8126"/>
      </reference>
    </references>

    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The author thanks the Humotica team for editorial assistance,
      internal peer review, and operational tooling that made this
      substrate framing concrete rather than theoretical.</t>
      <t>The substrate framing also builds on the logical-time tradition
      established by <xref target="LAMPORT1978"/>.</t>
      <t>The author also thanks Richard Barron of Red Specter Security
      Research for adversarial validation that helped sharpen the
      forward-only recovery property under realistic attack
      conditions.</t>
    </section>
  </back>
</rfc>
