<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     category="exp"
     ipr="trust200902"
     submissionType="independent"
     docName="draft-luechow-route86-timestamp-00">

  <front>
    <title abbrev="Route86 Timestamp">
      Route86: A Compact Context-Dependent Timestamp Format
    </title>

    <seriesInfo name="Internet-Draft"
                value="draft-luechow-route86-timestamp-00"/>

    <author fullname="Thomas Lüchow"
            initials="T."
            surname="Lüchow">
      <organization>Dorfzwockel</organization>
      <address>
        <email>EMAIL-ADDRESS-HERE</email>
      </address>
    </author>

    <date year="2026" month="August" day="17"/>

    <area>General</area>

    <keyword>timestamp</keyword>
    <keyword>compact encoding</keyword>
    <keyword>constrained networks</keyword>
    <keyword>Route86</keyword>

    <abstract>
      <t>
        This document specifies Route86, a compact textual timestamp
        representation intended for constrained message transports.
        A Route86 timestamp combines a Base36-encoded calendar-day
        component with a three-digit decimal Internet Time component.
      </t>

      <t>
        The representation occupies six ASCII characters in its
        canonical form.  Interpretation of the calendar component
        requires knowledge of a shared reference date, which may be
        application-specific or salted.
      </t>
    </abstract>
  </front>

  <middle>

    <section anchor="introduction" numbered="true">
      <name>Introduction</name>

      <t>
        Conventional textual date and time representations can consume
        a significant portion of a small message.  This is particularly
        relevant to constrained transports in which every octet affects
        payload capacity.
      </t>

      <t>
        Route86 defines a six-character timestamp designed for such
        environments.  It deliberately trades universal
        self-description for compactness by assuming that communicating
        parties share a reference date and the encoding rules defined
        by this document.
      </t>

      <t>
        For example, using the reference date 1970-01-01, the civil
        instant 2026-08-17 10:10:10 CEST is represented by:
      </t>

      <sourcecode type="text">
Q8T340
      </sourcecode>
    </section>

    <section anchor="requirements" numbered="true">
      <name>Requirements Language</name>

      <t>
        The key words "MUST", "MUST NOT", "REQUIRED", "SHALL",
        "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED",
        "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document
        are to be interpreted as described in BCP 14 when, and only
        when, they appear in all capitals, as shown here.
      </t>
    </section>

    <section anchor="format" numbered="true">
      <name>Timestamp Format</name>

      <t>
        A canonical Route86 timestamp consists of exactly six ASCII
        characters:
      </t>

      <sourcecode type="text">
DDDBBB
      </sourcecode>

      <t>
        DDD is the three-character calendar-day component.  BBB is the
        three-digit time-of-day component.
      </t>

      <t>
        No separator occurs between the components.
      </t>
    </section>

    <section anchor="reference-date" numbered="true">
      <name>Reference Date</name>

      <t>
        Route86 calendar encoding operates relative to a reference
        date.  The reference date is external context and is not
        encoded in the six-character timestamp.
      </t>

      <t>
        This document uses 1970-01-01 as its example reference date.
        This date also contains the Unix epoch, although Route86 does
        not encode Unix time.
      </t>

      <t>
        An application profile MAY use another reference date.  In
        particular, the reference date MAY be derived from registration
        information or otherwise salted.
      </t>

      <t>
        A receiver MUST know the applicable reference date before
        interpreting the calendar-day component.
      </t>
    </section>

    <section anchor="day-component" numbered="true">
      <name>Calendar-Day Component</name>

      <t>
        The calendar-day component represents calendar progression
        relative to the shared reference date.
      </t>

      <t>
        The resulting Route86 day value is encoded as a three-character
        Base36 value.
      </t>

      <t>
        The Base36 alphabet is:
      </t>

      <sourcecode type="text">
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
      </sourcecode>

      <t>
        Encoders MUST emit uppercase ASCII letters.  Decoders SHOULD
        reject non-canonical lowercase representations.
      </t>

      <t>
        Route86 applies an encoding offset of 13330 decimal before
        Base36 representation.
      </t>

      <t>
        The precise calendar arithmetic, including treatment of the
        reference day, MUST be identical at encoder and decoder.
        Implementations conforming to this version count the reference
        day according to the Route86 day-numbering algorithm before
        applying the offset.
      </t>
    </section>

    <section anchor="time-component" numbered="true">
      <name>Time-of-Day Component</name>

      <t>
        Route86 divides a day into 1000 decimal units, conventionally
        called beats.
      </t>

      <t>
        Time-of-day is evaluated relative to UTC+01:00, corresponding
        to Biel Mean Time (BMT).
      </t>

      <t>
        One beat therefore represents 86.4 SI seconds.
      </t>

      <t>
        The beat number is encoded as exactly three decimal digits.
        Values smaller than 100 MUST be padded with leading zeroes.
      </t>

      <sourcecode type="text">
7   -> 007
42  -> 042
340 -> 340
999 -> 999
      </sourcecode>

      <t>
        The commercial "@" notation sometimes associated with Internet
        Time is not part of the Route86 representation.
      </t>
    </section>

    <section anchor="canonical" numbered="true">
      <name>Canonical Representation</name>

      <t>
        A canonical Route86 timestamp:
      </t>

      <ul>
        <li>MUST contain exactly six ASCII characters;</li>
        <li>
          MUST contain three Base36 characters followed by three
          decimal digits;
        </li>
        <li>MUST use uppercase letters;</li>
        <li>MUST NOT contain whitespace;</li>
        <li>MUST NOT contain separators;</li>
        <li>MUST NOT contain an "@" character; and</li>
        <li>SHOULD be transported as an opaque string.</li>
      </ul>

      <t>
        The following is canonical:
      </t>

      <sourcecode type="text">
Q8T340
      </sourcecode>

      <t>
        The following representations are not canonical:
      </t>

      <sourcecode type="text">
q8t340
Q8T@340
Q8T-340
Q8T 340
      </sourcecode>
    </section>

    <section anchor="example" numbered="true">
      <name>Example</name>

      <t>
        The following example uses a reference date of 1970-01-01.
      </t>

      <sourcecode type="text">
Reference date:   1970-01-01
Civil time:       2026-08-17 10:10:10 CEST
Route86 day:      Q8T
Route86 beat:     340
Route86 timestamp: Q8T340
Encoded length:   6 octets
      </sourcecode>
    </section>

    <section anchor="entities" numbered="true">
      <name>Use in Message Entities</name>

      <t>
        A Route86 timestamp MAY be used as the temporal component of a
        message entity or identifier.
      </t>

      <t>
        A Route86 timestamp MUST NOT be assumed to be globally unique.
        Applications requiring uniqueness MUST combine it with
        additional information such as an origin identifier, recipient
        identifier, nonce, sequence value, or cryptographic value.
      </t>
    </section>

    <section anchor="precision" numbered="true">
      <name>Precision and Ordering</name>

      <t>
        Because one day is divided into 1000 units, the nominal
        resolution of the time component is 86.4 seconds.
      </t>

      <t>
        Route86 MUST NOT be used where second-level timestamp precision
        is required.
      </t>

      <t>
        Within a shared Route86 reference context, canonical values can
        be decoded into their corresponding calendar and time values
        for chronological comparison.
      </t>
    </section>

    <section anchor="security" numbered="true">
      <name>Security Considerations</name>

      <t>
        Route86 is an encoding format and provides no confidentiality,
        integrity, authentication, or replay protection.
      </t>

      <t>
        A salted reference date can make casual interpretation of a
        timestamp more difficult, but MUST NOT be treated as a
        cryptographic secret or security mechanism.
      </t>

      <t>
        Protocols requiring authenticated timestamps MUST provide
        authentication independently of Route86.
      </t>
    </section>

    <section anchor="iana" numbered="true">
      <name>IANA Considerations</name>

      <t>
        This document has no IANA actions.
      </t>
    </section>

  </middle>

  <back>

    <references>
      <name>Normative References</name>

      <reference anchor="RFC2119"
                 target="https://www.rfc-editor.org/info/rfc2119">
        <front>
          <title>
            Key words for use in RFCs to Indicate Requirement Levels
          </title>
          <author fullname="Scott Bradner"
                  initials="S."
                  surname="Bradner"/>
          <date year="1997" month="March"/>
        </front>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="BCP" value="14"/>
      </reference>

      <reference anchor="RFC8174"
                 target="https://www.rfc-editor.org/info/rfc8174">
        <front>
          <title>
            Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words
          </title>
          <author fullname="Barry Leiba"
                  initials="B."
                  surname="Leiba"/>
          <date year="2017" month="May"/>
        </front>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="BCP" value="14"/>
      </reference>
    </references>

  </back>
</rfc>