<?xml version='1.0' encoding='UTF-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" xml:lang="en" version="3" category="std" docName="draft-li-cats-context-staging-metric-yang-00" ipr="trust200902" submissionType="IETF" tocInclude="true" tocDepth="3" symRefs="true" sortRefs="true">
  <front>
    <title abbrev="CATS Context-Staging Metrics YANG">YANG Data Model and C-SMA Query Envelopes for Computing-Aware Traffic Steering (CATS) Service Context-Staging Metrics</title>
    <seriesInfo name="Internet-Draft" value="draft-li-cats-context-staging-metric-yang-00"/>
    <author fullname="Zhiqiang Li" initials="Z." surname="Li">
      <organization>China Mobile</organization>
      <address>
        <postal>
          <city>Beijing</city>
          <country>China</country>
        </postal>
        <email>lizhiqiangyjy@chinamobile.com</email>
      </address>
    </author>
    <author fullname="Zongpeng Du" initials="Z." surname="Du">
      <organization>China Mobile</organization>
      <address>
        <postal>
          <city>Beijing</city>
          <country>China</country>
        </postal>
        <email>duzongpeng@chinamobile.com</email>
      </address>
    </author>
    <author fullname="Junjie Wang" initials="J." surname="Wang">
      <organization>Centec</organization>
      <address>
        <postal>
          <city>Shanghai</city>
          <country>China</country>
        </postal>
        <email>wangjj@centec.com</email>
      </address>
    </author>
    <author fullname="Wei Cheng" initials="W." surname="Cheng">
      <organization>Centec</organization>
      <address>
        <postal>
          <city>Shanghai</city>
          <country>China</country>
        </postal>
        <email>chengw@centec.com</email>
      </address>
    </author>
    <author fullname="Ying Zhao" initials="Y." surname="Zhao">
      <organization>Centec</organization>
      <address>
        <postal>
          <city>Shanghai</city>
          <country>China</country>
        </postal>
        <email>zhaoying@centec.com</email>
      </address>
    </author>
    <author fullname="Chunhao Zhao" initials="C." surname="Zhao">
      <organization>SAIA</organization>
      <address>
        <postal>
          <city>Shanghai</city>
          <country>China</country>
        </postal>
        <email>chunhao.zhao@sh-aia.com</email>
      </address>
    </author>
    <author fullname="Xun Sun" initials="X." surname="Sun">
      <organization>Inesa</organization>
      <address>
        <postal>
          <city>Shanghai</city>
          <country>China</country>
        </postal>
        <email>sunxun@inesa.com</email>
      </address>
    </author>
    <date year="2026" month="October" day="30"/>
    <area>RTG</area>
    <workgroup>Computing-Aware Traffic Steering</workgroup>
    <keyword>CATS</keyword><keyword>YANG</keyword><keyword>context-staging latency</keyword><keyword>observation boundary</keyword><keyword>C-SMA</keyword><keyword>deterministic CBOR</keyword><keyword>NMDA</keyword><abstract>
      <t>This document specifies a Standards Track YANG 1.1 data model (ietf-cats-context-staging-metrics) and an on-demand deterministic CBOR query envelope for Computing-Aware Traffic Steering (CATS) service context-staging latency metrics. The specification defines three explicit observation-endpoint boundaries (transport-submit, remote-placement, and consumer-usable), enforces four-tuple snapshot view consistency (producer-id, boot-id, view-id, snapshot-id) with clock-uncertainty bounds, prohibits direct arithmetic addition of marginal latency quantiles across stages, and provides a point-to-point C-SMA to C-PS residency lookup envelope that avoids underlay routing protocol flooding.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>A retrieval estimate can mean a transport submission interval, a lookup-to-placement interval, or a lookup-to-consumer-usability interval. Adding such values to an existing delay metric without their boundaries can count the same time twice. Even with identical units, a mean, a quantile, and an instantaneous prediction are not interchangeable.</t>
      <t>The Computing-Aware Traffic Steering (CATS) framework <xref target="RFC10053"/> establishes the architecture for steering traffic across distributed service sites using computing and network metrics. The CATS use cases and requirements <xref target="CATS-USECASES"/> and metric definition baseline <xref target="CATS-METRICS"/> identify that stateful service instances frequently require external context staging prior to request execution. Within a controlled administrative domain <xref target="RFC8799"/>, this document specifies a Standards Track YANG 1.1 data model and on-demand C-SMA residency query envelopes for CATS service context-staging metrics.</t>
      <t>The augmentation attaches to the service-metric list of <xref target="CATS-MODEL"/>, identified by cs-id, csci-id, and source-type. It imports the routing tree defined by <xref target="RFC8349"/>. It does not add a replacement service identity, modify a base metric value, define a normalized score, or select a forwarding path. The source-type key retains the meaning assigned by the base model; no dynamically learned source is to be mislabeled static.</t>
      <t>The scope is operator-controlled metric exchange within one administrative reporting domain. A management application may consume the data using existing protocols; this document does not define a public application API or an inter-domain context directory. <xref target="NORTHBOUND"/> is related management work, not a dependency on a new northbound protocol. This augmentation is specified against version 00 of <xref target="CATS-MODEL"/>; its path and imports will need review if that work changes before publication.</t>
      <t>The generic units, statistics, observation time, and validity concepts in <xref target="CATS-METRICS"/> and the freshness and unknown-value rules in Section 11.3 of <xref target="CATS-USECASES"/> already address part of this problem. This module does not redefine their metric registry or wire encoding. Its additional endpoint, component, and clock-bound semantics are operational metadata. In particular, quantile and model-estimate <bcp14>MUST NOT</bcp14> be silently encoded as an existing Statistics enumeration with a different meaning. Mapping these observations into a registered CATS metric requires the applicable metric definition; no such registry assignment is requested here.</t>
    </section>
    <section anchor="conventions">
      <name>Conventions and Scope Identifiers</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as described in BCP 14 <xref target="RFC2119"/>
        <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t>
      <t>The data model uses YANG 1.1 <xref target="RFC7950"/> and the Network Management Datastore Architecture (NMDA) <xref target="RFC8342"/>. Tree diagrams use <xref target="RFC8340"/>. JSON examples follow <xref target="RFC7951"/>; in particular, uint64, int64, and decimal64 values are JSON strings.</t>
      <t>A producer is a management server exposing the operational data. A consumer is a management client interpreting it. An authorized reporting domain is a set of producers and consumers that share authenticated definitions of identifiers. Identifiers do not confer access rights.</t>
      <t>A state-class definition <bcp14>MUST</bcp14> identify the model and relevant revision, representation, and state coverage, including required auxiliary state. A workload or population definition <bcp14>MUST</bcp14> identify the inclusion, sampling, and load conditions. A method or boundary definition <bcp14>MUST</bcp14> identify the measured events, estimator, units, and relevant version. These definitions <bcp14>MAY</bcp14> be provisioned outside this module over authenticated management channels. A consumer <bcp14>MUST NOT</bcp14> infer equivalence from an unrecognized identifier or compare data whose required definitions are unavailable. This version does not specify a cross-domain identifier registry.</t>
    </section>
    <section anchor="semantics">
      <name>Retrieval Estimate Semantics</name>
      <section anchor="boundaries">
        <name>Observation Boundaries and Availability</name>
        <t>An estimate <bcp14>MUST</bcp14> identify one source scope, destination scope, state class, workload class, and method. All samples of a measured estimate <bcp14>MUST</bcp14> use those definitions and the advertised start and end events. lookup-start precedes lookup work; transfer-submit precedes submission of the first transfer operation. remote-placement means all transfer bytes required by the state class have been placed at the destination. consumer-usable additionally requires all required state, representation processing, and visibility conditions for the identified consumer.</t>
        <t>A producer <bcp14>MUST NOT</bcp14> infer consumer-usable solely from a local completion event. The method definition <bcp14>MUST</bcp14> identify how the terminal condition is observed or predicted. A prediction of a consumer-usable interval is an estimate of that event; it does not prove that any future transfer will reach it. If an implementation cannot express its endpoint using these definitions, it <bcp14>MUST NOT</bcp14> substitute the nearest enum silently.</t>
        <t>status describes availability of the metric. An available estimate <bcp14>MUST</bcp14> carry latency-us. An unavailable estimate <bcp14>MUST NOT</bcp14> carry latency-us. Context-tier absence, capacity exhaustion, and authorization failure do not imply zero latency and do not become infinite integer values. This model deliberately does not signal whether a particular object can presently be retrieved. Consumers requiring that fact need the applicable state or service protocol.</t>
        <t>Zero is a valid numeric estimate only when supported by the method. A missing uncertainty is unknown, not zero. A measured mean or quantile with available status <bcp14>MUST</bcp14> have a positive sample-count. A model-estimate <bcp14>MAY</bcp14> have sample-count zero. For unavailable metrics sample-count <bcp14>MAY</bcp14> be zero. Percentile <bcp14>MUST</bcp14> be present for a quantile and <bcp14>MUST NOT</bcp14> be present for other statistics.</t>
      </section>
      <section anchor="freshness">
        <name>Freshness and Clock Bounds</name>
        <t>observed-at is the UTC instant to which the estimate applies, not the time a client retrieves the management response. measurement-window-us identifies the preceding aggregation interval; zero identifies an instantaneous prediction. A producer <bcp14>MUST NOT</bcp14> extend validity merely by returning the same estimate in a later snapshot. valid-for-us equal to zero is immediately stale.</t>
        <t>A consumer that relies on bounded UTC timestamps <bcp14>MUST</bcp14> account for both producer and consumer clock uncertainty. Let T be observed-at, Es the producer error bound, N the consumer current time, En the consumer error bound, and V valid-for-us, expressed in a common exact time scale and microseconds. The following sufficient conditions establish freshness throughout the uncertainty intervals:</t>
        <sourcecode type="text">N - En &gt;= T + Es
(N + En) - (T - Es) &lt; V</sourcecode>
        <t>If either bound is unknown, or if either condition fails, freshness is not established by this rule. A consumer <bcp14>MUST NOT</bcp14> label the estimate fresh in that case. It <bcp14>MAY</bcp14> omit this estimate, request a refresh, or use a separately identified policy for stale or unverified information. It <bcp14>MUST</bcp14> keep that policy distinct from use of a fresh estimate. These conditions are deliberately conservative and can reject a recently generated estimate whose clock intervals overlap.</t>
        <t>Clock bounds <bcp14>MUST</bcp14> cover timestamp generation error and relevant synchronization uncertainty. Leap-second handling and conversion of UTC to the arithmetic time scale <bcp14>MUST</bcp14> be defined by the clock method. If conversion is ambiguous, a consumer <bcp14>MUST</bcp14> treat freshness as unverified. Validity is an estimator policy, not a guarantee of context residency, service admission, or constant future latency.</t>
      </section>
      <section anchor="composition">
        <name>Cost Components and Composition</name>
        <t>A component-id identifies a particular included cost contribution, not a generic kind of work. The same component identifier within an authenticated reporting domain and boot denotes the same contribution when estimates are compared. Producers <bcp14>MUST</bcp14> preserve that equivalence when they set components-complete to true. Identical kind values alone do not prove duplicate cost.</t>
        <t>components-complete true asserts that every included contribution is represented in the component list. Comparable estimates <bcp14>MUST</bcp14> use the same granularity and identifier for a shared contribution; overlapping bundles with different identifiers do not satisfy this assertion. If that common decomposition cannot be established, the producer <bcp14>MUST</bcp14> set components-complete false. Completeness does not assert independence, temporal disjointness, or serial execution. components-complete false prohibits additive composition based on this representation. A consumer <bcp14>MUST NOT</bcp14> add estimates whose component sets intersect. Because this model has no per-component numeric values, a consumer <bcp14>MUST NOT</bcp14> subtract an assumed overlap from such estimates. It <bcp14>MUST</bcp14> select a directly measured composite estimate or use another explicitly justified model.</t>
        <t>A consumer <bcp14>MUST NOT</bcp14> add quantiles to claim the same quantile of a total interval. It <bcp14>MUST NOT</bcp14> sum overlapping elapsed intervals as if they were serial. Arithmetic means can be added without an independence assumption only when the underlying random variables actually represent the serial decomposition being estimated, their populations and units are compatible, and no contribution is duplicated. Summing model-estimates requires an equally explicit composition method. A list of disjoint identifiers alone is insufficient evidence.</t>
        <t>An existing CATS network metric may already be covered by the retrieval interval. The consumer <bcp14>MUST</bcp14> establish whether it is included before adding it. For example, a lookup-to-usable mean of 1200 microseconds including a transfer contribution must not be augmented by the same 400-microsecond transfer delay to produce 1600. If a reliable decomposition is absent, the consumer can use the end-to-end estimate directly. This specification does not standardize its conversion into a policy score or the decision to prefer a site.</t>
      </section>
    </section>
    <section anchor="management">
      <name>Management Access, Retention, and Conformance</name>
      <t>The ietf-cats-context-staging-metrics module contains only operational state (config false). Its presence container denotes supported exposure; absence is not a zero metric. A server implementing this module <bcp14>MUST</bcp14> advertise the implemented revision using YANG Library <xref target="RFC8525"/>. It <bcp14>MUST</bcp14> expose the model consistently with NMDA. No feature flags, RPCs, actions, or notifications are defined.</t>
      <t>This specification defines data semantics independent of the selected YANG management protocol. NETCONF <xref target="RFC6241"/> and RESTCONF <xref target="RFC8040"/> are applicable existing transports. It does not assign a new URI scheme, HTTP resource outside the existing datastore mapping, port, or packet format. Protocol errors use the selected management protocol; no new error tags are defined.</t>
      <t>A complete retrieval of context-staging-metrics <bcp14>MUST</bcp14> describe one coherent snapshot. The producer <bcp14>MUST</bcp14> change snapshot-id when any exposed content changes and <bcp14>MUST</bcp14> change boot-id when continuity of identifiers or counters is lost. It <bcp14>MUST NOT</bcp14> reuse a snapshot-id within a boot. A consumer combining separate reads <bcp14>MUST</bcp14> verify both identifiers are equal; otherwise it <bcp14>MUST</bcp14> obtain a new complete snapshot or mark the combination unusable. Identical identifiers from different authenticated servers are not equal snapshots.</t>
      <t>The producer <bcp14>MUST</bcp14> enforce the advertised retention limit and the schema maxima. A complete response <bcp14>MUST NOT</bcp14> contain dangling references. If authorization filtering or an incomplete response prevents reference resolution, the consumer <bcp14>MUST NOT</bcp14> treat the response as a complete conforming snapshot. The producer <bcp14>SHOULD</bcp14> expose only the authorized, internally consistent view to each principal. Omitted records <bcp14>MUST NOT</bcp14> be interpreted as successful operations or as zero-valued observations.</t>
      <t>Counters are cumulative within a boot and follow yang:counter64 <xref target="RFC9911"/>, including possible wrap. Consumers <bcp14>MUST NOT</bcp14> calculate deltas across a boot change; they <bcp14>MUST</bcp14> detect or explicitly bound counter wrap before calculating a delta. Limits bound retained records, not the full history or network load. Servers <bcp14>MAY</bcp14> choose a smaller limit, provided they report it accurately.</t>
      <t>All arithmetic requirements in this document use exact integer quantities before division. Implementations <bcp14>MUST</bcp14> detect overflow and <bcp14>MUST NOT</bcp14> wrap, saturate silently, or turn an invalid result into zero. Schema validation does not replace semantic validation: XPath number conversion can lose precision for large 64-bit integers. Producers <bcp14>MUST</bcp14> satisfy, and consumers <bcp14>MUST</bcp14> verify before use, the additional constraints defined in this document. A consumer detecting a violation <bcp14>MUST</bcp14> exclude the affected record from the relevant calculation and <bcp14>SHOULD</bcp14> report the reason through its existing diagnostic interface; it need not discard unrelated valid records.</t>
      <t>Snapshot identity is the tuple (authenticated producer, boot-id, view-id, snapshot-id). view-id identifies one authorized projection and <bcp14>MUST</bcp14> change when its authorization scope, filtering policy, or interpretation definitions change. A consumer <bcp14>MUST NOT</bcp14> join responses or calculate deltas across different views. If a coherent complete view cannot be returned, the server <bcp14>MUST</bcp14> report failure using the management protocol. A filtered response alone does not establish completeness.</t>
    </section>
    <section anchor="conformance">
      <name>Additional Conformance Requirements</name>
      <ul>
        <li>
          <t>The number of retained estimate entries <bcp14>MUST NOT</bcp14> exceed estimate-limit. discarded-estimates counts estimates omitted or removed due to retention, not staging misses or failed service requests. It <bcp14>MUST</bcp14> increase for each retention-driven omission according to the counter semantics.</t>
        </li>
        <li>
          <t>When definitions, boundaries, or measurement populations change, the producer <bcp14>MUST</bcp14> use identifiers that prevent consumers from silently merging incompatible records. A valid identifier is not a substitute for a documented definition.</t>
        </li>
        <li>
          <t>A consumer <bcp14>MUST</bcp14> keep unavailable, stale, and incomparable states distinct from available estimates. It <bcp14>MAY</bcp14> continue ordinary service selection using other metrics according to local policy.</t>
        </li>
        <li>
          <t>Implementations claiming conformance <bcp14>MUST</bcp14> satisfy the module and these interpretation rules. Estimator accuracy thresholds and service-selection policies remain deployment-specific.</t>
        </li>
      </ul>
    </section>
    <section anchor="model-overview">
      <name>Data Model Overview</name>
      <t>The following tree shows the nodes defined by this module. The module text is normative. Read-only nodes are marked ro; a presence container is marked with an exclamation mark.</t>
      <artwork>module: ietf-cats-context-staging-metrics

  augment /rt:routing/cats:cats/cats:service-metrics
            /cats:service-metric:
    +--ro context-staging-metrics!
       +--ro view-id                local-id
       +--ro snapshot-id            local-id
       +--ro boot-id                local-id
       +--ro estimate-limit         uint16
       +--ro discarded-estimates    yang:counter64
       +--ro estimate* [estimate-id]
          +--ro estimate-id              local-id
          +--ro source-scope             local-id
          +--ro destination-scope        local-id
          +--ro state-class              local-id
          +--ro workload-class           local-id
          +--ro method-id                local-id
          +--ro observed-at              yang:date-and-time
          +--ro valid-for-us             uint64
          +--ro measurement-window-us    uint64
          +--ro sample-count             uint64
          +--ro statistic                enumeration
          +--ro status                   enumeration
          +--ro start-boundary           enumeration
          +--ro end-boundary             enumeration
          +--ro components-complete      boolean
          +--ro clock-uncertainty-us?    uint64
          +--ro latency-us               uint64
          +--ro percentile               decimal64
          +--ro component* [component-id]
             +--ro component-id    local-id
             +--ro kind            enumeration</artwork>
    </section>
    <section anchor="yang-module">
      <name>YANG Module</name>
      <t>This module imports common data types from <xref target="RFC9911"/>. RFC XXXX in the module and registration templates is to be replaced by the RFC number assigned to this document; it is not an allocated number.</t>
      <sourcecode type="yang" name="ietf-cats-context-staging-metrics@2026-10-30.yang">module ietf-cats-context-staging-metrics {
  yang-version 1.1;
  namespace
    "urn:ietf:params:xml:ns:yang:ietf-cats-context-staging-metrics";
  prefix ccr;

  import ietf-yang-types {
    prefix yang;
    reference
      "RFC 9911: Common YANG Data Types";
  }
  import ietf-routing {
    prefix rt;
    reference
      "RFC 8349: A YANG Data Model for Routing Management";
  }
  import ietf-cats {
    prefix cats;
    reference
      "I-D.ietf-cats-data-model: CATS Data Model";
  }

  organization
    "IETF Computing-Aware Traffic Steering (CATS) Working Group";
  contact
    "Discussion: IETF CATS and OPSAWG mailing lists
     Web: https://datatracker.ietf.org/group/cats/
     Web: https://datatracker.ietf.org/group/opsawg/
     Author: Zhiqiang Li &lt;lizhiqiangyjy@chinamobile.com&gt;
     Author: Junjie Wang &lt;wangjj@centec.com&gt;";
  description
    "A YANG Data Model for Computing-Aware Traffic Steering
     (CATS) Service Context-Staging Latency Metrics.

     Copyright (c) 2026 IETF Trust and the persons identified as
     authors of the code. All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject
     to the license terms contained in, the Revised BSD License
     set forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX; see the
     RFC itself for full legal notices.";

  revision 2026-10-30 {
    description
      "Initial revision.";
    reference
      "RFC XXXX: A YANG Data Model for Computing-Aware Traffic
       Steering (CATS) Service Context-Staging Latency Metrics";
  }

  typedef local-id {
    type string {
      length "1..128";
    }
    description
      "Opaque identifier scoped to one authorized reporting domain.
       It is not a global content hash or an access credential.";
  }

  augment "/rt:routing/cats:cats/cats:service-metrics/"
        + "cats:service-metric" {
    description
      "Operational context-staging latency observations for an
        existing
       CATS service metric entry. No forwarding metric is changed.";
    container context-staging-metrics {
      presence "Service context-staging latency observations are
        exposed.";
      config false;
      description
        "One coherent snapshot of bounded retrieval estimates.
         Snapshot identifiers change whenever any content changes.";
      leaf view-id {
      type local-id;
      mandatory true;
      description
        "Authorized projection identity; changes when scope
         or interpretation definitions change.";
    }
    leaf snapshot-id {
        type local-id;
        mandatory true;
        description
          "Identifier of the immutable snapshot within this
           server boot.";
      }
      leaf boot-id {
        type local-id;
        mandatory true;
        description
          "Changes after restart or loss of snapshot
           identifier state.";
      }
      leaf estimate-limit {
        type uint16 {
          range "1..256";
        }
        mandatory true;
        description
          "Maximum number of estimates retained by this
           server.";
      }
      leaf discarded-estimates {
        type yang:counter64;
        mandatory true;
        description
          "Estimates not retained since this boot; not
           requests or failed lookups.";
      }
      list estimate {
        must "status = 'unavailable' or "
           + "statistic = 'model-estimate' or sample-count &gt; 0" {
          error-message "Sample statistics require observations.";
          description
            "A measured statistic has a nonempty population.";
        }
        key "estimate-id";
        max-elements 256;
        description
          "A raw latency estimate for a declared state and workload
           scope. Its presence does not reserve staged context.";
        leaf estimate-id {
          type local-id;
          mandatory true;
          description
            "Identifier unique within this snapshot.";
        }
        leaf source-scope {
          type local-id;
          mandatory true;
          description
            "State source tier or source instance in the
             reporting domain.";
        }
        leaf destination-scope {
          type local-id;
          mandatory true;
          description
            "Consumer placement to which the estimate applies.";
        }
        leaf state-class {
          type local-id;
          mandatory true;
          description
            "Shared definition of model, representation and
             state coverage.";
        }
        leaf workload-class {
          type local-id;
          mandatory true;
          description
            "Shared definition of request population and load
             conditions.";
        }
        leaf method-id {
          type local-id;
          mandatory true;
          description
            "Versioned estimator or measurement procedure
             identifier.";
        }
        leaf observed-at {
          type yang:date-and-time;
          mandatory true;
          description
            "UTC instant to which this estimate applies.";
        }
        leaf valid-for-us {
          type uint64;
          units "microseconds";
          mandatory true;
          description
            "Validity duration from observed-at; zero is
             immediately stale.";
        }
        leaf measurement-window-us {
          type uint64;
          units "microseconds";
          mandatory true;
          description
            "Aggregation interval ending at observed-at; zero
             means an instantaneous estimate.";
        }
        leaf sample-count {
          type uint64;
          mandatory true;
          description
            "Number of observations supporting the value; zero
             for a model estimate without samples.";
        }
        leaf statistic {
          type enumeration {
            enum mean {
              description
                "Arithmetic mean for the declared population.";
            }
            enum quantile {
              description
                "Quantile using the identified estimator.";
            }
            enum model-estimate {
              description
                "Prediction rather than a sample statistic.";
            }
          }
          mandatory true;
          description
            "Meaning of the latency value.";
        }
        leaf status {
          type enumeration {
            enum available {
              description
                "A latency estimate is available.";
            }
            enum unavailable {
              description
                "No usable value is provided.";
            }
          }
          mandatory true;
          description
            "Availability of the metric, not availability of
             the state.";
        }
        leaf start-boundary {
          type enumeration {
            enum lookup-start {
              description
                "Before lookup for the specified state starts.";
            }
            enum transfer-submit {
              description
                "Immediately before submitting the first
                 transfer operation.";
            }
          }
          mandatory true;
          description
            "Event at which the estimated elapsed time begins.";
        }
        leaf end-boundary {
          type enumeration {
            enum remote-placement {
              description
                "All required transfer bytes placed at the
                 destination.";
            }
            enum consumer-usable {
              description
                "All required state is usable by the named
                 consumer.";
            }
          }
          mandatory true;
          description
            "Event at which the estimated elapsed time ends.";
        }
        leaf components-complete {
          type boolean;
          mandatory true;
          description
            "True only if all included component instances are
             listed. False prohibits additive composition.";
        }
        leaf clock-uncertainty-us {
          type uint64;
          units "microseconds";
          description
            "Bound on error of observed-at relative to UTC;
             absence means unknown.";
        }
        leaf latency-us {
          when "../status = 'available'";
          type uint64;
          units "microseconds";
          mandatory true;
          description
            "Elapsed latency estimate. Zero is a measured or
             estimated zero, never a missing value.";
        }
        leaf percentile {
          when "../statistic = 'quantile'";
          type decimal64 {
            fraction-digits 2;
            range "0..100";
          }
          mandatory true;
          description
            "Requested percentile, including the estimator
             identified by method-id.";
        }
        list component {
          key "component-id";
          max-elements 32;
          description
            "Included component instances. The same component-id
             denotes the same cost contribution across estimates
             within this boot and authorized reporting domain.";
          leaf component-id {
            type local-id;
            mandatory true;
            description
              "Stable identity of a particular cost
               contribution.";
          }
          leaf kind {
            type enumeration {
              enum lookup {
                description
                  "Lookup activity.";
              }
              enum queueing {
                description
                  "Queueing activity.";
              }
              enum registration {
                description
                  "Registration activity.";
              }
              enum transfer {
                description
                  "Transfer activity.";
              }
              enum conversion {
                description
                  "Conversion activity.";
              }
              enum visibility {
                description
                  "Visibility activity.";
              }
              enum other {
                description
                  "Other activity.";
              }
            }
            mandatory true;
            description
              "Descriptive class, not a deduplication key.";
          }
        }
      }
    }
  }
}

&lt;CODE ENDS&gt;</sourcecode>
    </section>
    <section anchor="deployment-and-instrumentation">
      <name>Deployment and Instrumentation Boundaries</name>
      <t>The target deployment is a Computing-Aware Traffic Steering (CATS) domain within a single administrative boundary <xref target="RFC10053"/> <xref target="RFC8799"/>. Source and destination scopes identify a CATS Service Contact Instance (CSCI) or an associated state-storage tier under an authenticated operator policy. A <tt>remote-placement</tt> sample and a <tt>consumer-usable</tt> sample represent distinct readiness milestones, even when both are exported in microseconds.</t>
      <t>A CATS Service Metric Agent (C-SMA) instrumentation adapter collects native state-staging and runtime readiness timestamps from local service instances and storage tiers. A transport-level completion event alone does not establish execution-context usability at the target CSCI. Where runtime readiness instrumentation is unavailable, the exporter <bcp14>MUST</bcp14> report the <tt>consumer-usable</tt> metric as unavailable rather than extrapolating it from raw byte counts.</t>
      <t>This YANG module neither reserves compute or storage capacity nor floods fine-grained session residency into underlay routing protocols (IGP or BGP). Probabilistic membership filters <bcp14>MUST NOT</bcp14> be flooded in routing protocols to estimate lower bounds on reusable context units. Fine-grained candidate residency checks use the point-to-point C-SMA to C-PS deterministic CBOR query envelope specified in <xref target="cbor-lookup-envelope"/>.</t>
    </section>
    <section anchor="delay-composition-guard">
      <name>Delay Composition Guard and L0-L2 Metric Separation</name>
      <t>When composing quantities as elapsed time, a consumer <bcp14>MUST</bcp14> establish that the contributions form the claimed interval without overlap or duplicated work. A retrieval-start to consumer-usable interval that already includes a transfer <bcp14>MUST NOT</bcp14> have that transfer or the same network delay added again. Different component names or identifiers do not establish temporal disjointness. If coverage cannot be established, the consumer <bcp14>MUST NOT</bcp14> claim an additive latency result; it <bcp14>MAY</bcp14> use a directly observed composite interval or a separately justified model.</t>
      <t>A consumer <bcp14>MUST NOT</bcp14> add component quantiles and label the result as the same quantile of the total. To obtain an observed total quantile, it can compute totals from matched per-request observations and then apply the declared quantile estimator. Adding arithmetic means requires the same target population and a justified per-request serial decomposition with each contribution counted once; statistical independence is not required for that addition. Overlapping work needs an explicit overlap-aware model. A policy-weighted or normalized score <bcp14>MAY</bcp14> combine inputs for ranking, but <bcp14>MUST NOT</bcp14> be represented as an observed duration or percentile solely because its inputs have those meanings.</t>
    </section>
    <section anchor="cbor-lookup-envelope">
      <name>On-Demand CBOR State-Residency Lookup Envelope for C-SMA to C-PS Exchange</name>
      <t>To prevent high-churn per-prefix state residency identifiers from flooding the CATS control plane while enabling exact candidate verification between a CATS Service Metric Agent (C-SMA) and a CATS Path Selector (C-PS), implementations <bcp14>MAY</bcp14> exchange deterministic CBOR lookup queries and results conforming to Section 4.2.1 of [RFC8949] and defined in CDDL [RFC8610] below.</t>
      <section anchor="cbor-wire-representation">
        <name>Wire Representation</name>
        <t>Both messages use CBOR core deterministic encoding <xref target="RFC8949"/>, with shortest integer and length encodings, definite lengths, and ordered integer map keys. Only the types in the CDDL <xref target="RFC8610"/> below are allowed. Tags, floats, text strings, duplicate keys, unknown keys, trailing bytes, and non-deterministic encodings <bcp14>MUST</bcp14> be rejected. Each message is limited to 32768 octets.</t>
        <sourcecode type="cddl" name="draft-li-cats-context-staging-metric-yang-00.cddl">id16 = bstr .size 16
digest = bstr .size 32
query-item = [units: 1..4294967295, context: digest]
lookup-query = {
  0: 1,             ; version
  1: id16,          ; namespace
  2: id16,          ; query ID
  3: digest,        ; deployment profile
  4: digest,        ; import contract
  5: [1*128 query-item]
}
unknown = [0]
miss = [1]
candidate = [2, descriptor: digest]
lookup-result = {
  0: 1,
  1: id16,          ; namespace
  2: id16,          ; query ID
  3: digest,        ; SHA-256 of complete encoded query
  4: id16,          ; serving instance
  5: id16,          ; incarnation
  6: [1*128 (unknown / miss / candidate)]
}</sourcecode>
        <t>The query ID <bcp14>MUST</bcp14> be generated from 128 unpredictable bits and <bcp14>MUST NOT</bcp14> intentionally be reused for a new query. Query items <bcp14>MUST</bcp14> be unique as (units, context) pairs. Response position i corresponds to query position i; the two arrays <bcp14>MUST</bcp14> have exactly the same length. A response <bcp14>MUST</bcp14> include the SHA-256 digest of the exact deterministic query bytes, computed as specified in <xref target="RFC6234"/>. The digest binds profile, contract, order, and all queried keys, so a result cannot be silently reused for a shorter, reordered, or differently configured query.</t>
        <t>These identifiers and hashes provide correlation, not authentication. The enclosing RPC must protect both directions against modification and impersonation and authorize namespace access. It <bcp14>MUST</bcp14> delimit one complete CBOR message and identify whether it carries a query or a result. This document defines the representation, not a universal RPC method name or an independently interoperable transport binding.</t>
      </section>
      <section anchor="cbor-server-semantics">
        <name>Server Processing and Result Semantics</name>
        <t>The server first validates syntax, resource bounds, authenticated namespace authorization, and the supported profile/contract pair. A syntactically invalid or unauthorized request is rejected through the enclosing RPC's error mechanism, without returning a normal result. A well-formed query for an authorized but unsupported profile or contract returns unknown for every item. This behavior avoids misrepresenting an unsupported query as an authoritative miss.</t>
        <t>For each query item, the server returns exactly one of the following values:</t>
        <ul>
          <li>
            <t>Unknown (0): the server cannot establish either a complete candidate or an authoritative negative result. Examples include index reconstruction, incomplete publication, partial component coverage, a Bloom-filter positive that has not been verified, or an internal deadline. Unknown <bcp14>MUST NOT</bcp14> be converted into miss for reporting or routing policy.</t>
          </li>
          <li>
            <t>Miss (1): at the instant this item was checked, the authoritative index contained no published, locally eligible candidate for the exact namespace, profile, contract, context-unit count, and context key. This is limited to this instance; it is not a global absence statement.</t>
          </li>
          <li>
            <t>Candidate (2): at the instant this item was checked, the index associated a published descriptor with the exact query tuple, and the instance's read service tracked every required component as available under that descriptor. The result carries the complete descriptor identity. This does not mean that the recipient has validated the descriptor or acquired read protection.</t>
          </li>
        </ul>
        <t>The server <bcp14>MUST</bcp14> obtain the tuple binding, descriptor ID, publication state, and component-coverage check from one logically consistent index view for each item. A lock, immutable index version, or transaction is sufficient; a mixture of pre- and post-eviction facts is not. Different items <bcp14>MAY</bcp14> be checked at different instants. The result does not claim a snapshot transaction across the whole array.</t>
        <t>If multiple published descriptors match an item, the server <bcp14>MAY</bcp14> select any candidate satisfying the contract. Version 1 returns one candidate per item and provides no enumeration or ranking semantics. A consumer can perform a later query if the selected object disappears. Advertised candidate IDs <bcp14>MUST</bcp14> be resolvable through the serving instance's authorized read interface; a candidate ID is not a URL or an RDMA remote key.</t>
        <t>A positive probabilistic lookup is insufficient for candidate. An absence inferred from a probabilistic or event-derived index is insufficient for miss unless that index is proven complete for the instance and cannot produce false negatives under its deletion, saturation, restart, and event-loss behavior. A server can always return unknown and fall back to an exact lookup. This document deliberately does not standardize Bloom parameters, folding, or counting-filter deletion.</t>
      </section>
      <section anchor="cbor-encoding-examples">
        <name>Encoding Examples</name>
        <t>These fixtures exercise encoding only. Their artifact digests refer to test labels, not a production-approved service profile. Hexadecimal lines are concatenated without whitespace.</t>
        <section anchor="cbor-s13">
          <name>lookup-query</name>
          <t>Encoded length: 147 octets.</t>
          <sourcecode type="text">a600010150000102030405060708090a0b0c0d0e0f0250515151515151515151
5151515151515103582072950781c8ae4408fa70d0cf5d9f992406a57f358fe7
971ee5d770127c78d4bb045820bf616ffee52c062d3fbc260143d7a7f77d622e
7f24fc9d4085f8376f058e7336058182035820c8337d9c6ab594881cf8ba1935
276abab7744338df278c1817f527a562869254</sourcecode>
          <t>SHA-256 of these encoded bytes:</t>
          <sourcecode type="text">10d6a27f629f4813913e278f8f8c5681f014169bae6ad58c6241e22287d2062d</sourcecode>
        </section>
        <section anchor="cbor-s14">
          <name>lookup-result</name>
          <t>Encoded length: 148 octets.</t>
          <sourcecode type="text">a700010150000102030405060708090a0b0c0d0e0f0250515151515151515151
5151515151515103582010d6a27f629f4813913e278f8f8c5681f014169bae6a
d58c6241e22287d2062d04504949494949494949494949494949494905504545
45454545454545454545454545450681820258203216099ee80f56e52066194f
e29a4c89851e8d985b4ef2022f6ddab32f73b9ac</sourcecode>
          <t>SHA-256 of these encoded bytes:</t>
          <sourcecode type="text">d05a63c345273e1104e7f01e17ab4722f8c05fbc36a0404a55e74cbc2d0d53a0</sourcecode>
        </section>
      </section>
    <section anchor="lookup-incarnation-and-conformance">
      <name>Incarnation Continuity and Producer/Consumer Conformance</name>
      <t>Each authoritative lookup responder (C-SMA directory agent) maintains a 16-octet opaque <tt>incarnation-id</tt>. An outstanding lookup query is bound to the authenticated responder identity and the <tt>incarnation-id</tt> captured from the responder's capabilities. If a subsequent authenticated capability refresh advertises a changed <tt>incarnation-id</tt>, the querying C-PS MUST immediately invalidate all outstanding queries and retained residency hints from the prior incarnation. A delayed reply carrying an older <tt>incarnation-id</tt> MUST NOT re-establish the superseded incarnation.</t>
      <t>A lookup result of <tt>candidate(2)</tt> is a point-in-time observation by one authoritative instance; it is neither a memory reservation nor a guarantee that a subsequent state read will succeed. Furthermore, independent <tt>candidate</tt> observations from distinct service instances MUST NOT be combined by bitwise OR or set union into a synthetic claim that a single instance holds the complete prefix.</t>
      <t>A metric producer claiming conformance to this specification MUST export the explicit observation-endpoint identifier (<tt>transport-submit</tt>, <tt>remote-placement</tt>, or <tt>consumer-usable</tt>), the four-tuple snapshot view identifier <tt>(producer-id, boot-id, view-id, snapshot-id)</tt>, and the clock uncertainty bound. A consumer (C-PS) MUST reject metrics with unknown endpoint semantics or stale view generations, and MUST NOT construct a quantile of a sum by adding marginal P95 or P99 quantiles across network and state-preparation stages.</t>
    </section></section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>The security analysis for the ietf-cats-context-staging-metrics module follows the approach in <xref target="RFC9907"/>. YANG management access requires a secure transport and mutual authentication. Deployments using NETCONF over SSH follow <xref target="RFC6242"/>; RESTCONF uses HTTPS with authentication appropriate to the deployment and current TLS guidance <xref target="RFC9846"/>. Peer authentication alone does not authorize a metric or its scope.</t>
      <t>Access control <bcp14>MUST</bcp14> be enforced using the Network Configuration Access Control Model (NACM) <xref target="RFC8341"/> when this module is accessed by NETCONF or RESTCONF. Deployments <bcp14>MUST</bcp14> restrict readable observations to authorized principals in the reporting domain and <bcp14>SHOULD</bcp14> deny them to other principals by default. The module introduces no writable data nodes, RPCs, actions, or notifications. It does not weaken access controls on nodes in imported or augmented modules.</t>
      <t>The context-staging-metrics subtree exposes source and destination scopes, state classes, workload classes, observation times, component relationships, and latency. These can disclose model placement, context residency patterns, tenant activity, and contention. Pseudonymous identifiers still permit correlation. Servers <bcp14>SHOULD</bcp14> minimize identifying detail, bound retention, and avoid placing user payloads, input sequences, content hashes, credentials, or customer names in identifiers.</t>
      <t>A forged cheap estimate or replayed old estimate can attract traffic to an unsuitable site. Consumers <bcp14>MUST</bcp14> authenticate the reporting peer and verify freshness and scope before using a value for steering. Freshness does not establish truthfulness or context-tier availability. Operators <bcp14>SHOULD</bcp14> monitor estimator error and apply independent service-health and admission controls. Invalid clock bounds or unavailable estimates <bcp14>MUST NOT</bcp14> be interpreted as zero cost. Component identifiers are scoped to an authenticated domain; an attacker-controlled identifier <bcp14>MUST NOT</bcp14> suppress another domain's cost as a duplicate.</t>
      <t>Long retention, frequent polling, and large authorized responses can consume server resources. Producers <bcp14>SHOULD</bcp14> rate-limit collection and reads using existing management facilities, and <bcp14>MUST</bcp14> enforce the stated cardinality bounds. A consumer <bcp14>MUST</bcp14> distinguish filtering, eviction, missing instrumentation, and failures from actual zero measurements. Confidentiality and integrity protect transport but do not eliminate information exposed to an authorized reader.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document requests registration of the following URI in the IETF XML Registry <xref target="RFC3688"/>. These registrations follow the IANA review procedures specified in RFC 3688 and RFC 9890.</t>
      <table>
        <thead>
          <tr>
            <th>Field</th>
            <th>Value</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>URI</td>
            <td>urn:ietf:params:xml:ns:yang:ietf-cats-context-staging-metrics</td>
          </tr>
          <tr>
            <td>Registrant Contact</td>
            <td>The IESG</td>
          </tr>
          <tr>
            <td>XML</td>
            <td>N/A; the requested URI is an XML namespace.</td>
          </tr>
        </tbody>
      </table>
      <t>This document requests registration of the following module in the YANG Module Names registry, following <xref target="RFC7950"/>.</t>
      <table>
        <thead>
          <tr>
            <th>Field</th>
            <th>Value</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>Name</td>
            <td>ietf-cats-context-staging-metrics</td>
          </tr>
          <tr>
            <td>Maintained by IANA?</td>
            <td>N</td>
          </tr>
          <tr>
            <td>Namespace</td>
            <td>urn:ietf:params:xml:ns:yang:ietf-cats-context-staging-metrics</td>
          </tr>
          <tr>
            <td>Prefix</td>
            <td>ccr</td>
          </tr>
          <tr>
            <td>Reference</td>
            <td>RFC XXXX</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="implementation-status">
      <name>Implementation Status</name>
      <t>This section follows <xref target="RFC7942"/> and is to be removed before RFC publication. The accompanying review package reports schema, example, and semantic checks for this document. Earlier validation counts are not transferred to this revision. No production framework integration, independent management endpoint interoperability, or hardware performance result is claimed.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <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="Bradner, S."/>
            <date year="1997" month="03"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC7950" target="https://www.rfc-editor.org/info/rfc7950">
          <front>
            <title>The YANG 1.1 Data Modeling Language</title>
            <author fullname="Bjorklund, M., Ed."/>
            <date year="2016" month="08"/>
          </front>
          <seriesInfo name="RFC" value="7950"/>
          <seriesInfo name="DOI" value="10.17487/RFC7950"/>
        </reference>
        <reference anchor="RFC7951" target="https://www.rfc-editor.org/info/rfc7951">
          <front>
            <title>JSON Encoding of Data Modeled with YANG</title>
            <author fullname="Lhotka, L."/>
            <date year="2016" month="08"/>
          </front>
          <seriesInfo name="RFC" value="7951"/>
          <seriesInfo name="DOI" value="10.17487/RFC7951"/>
        </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="Leiba, B."/>
            <date year="2017" month="05"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8341" target="https://www.rfc-editor.org/info/rfc8341">
          <front>
            <title>Network Configuration Access Control Model</title>
            <author fullname="Bierman, A."/>
            <author fullname="M. Bjorklund"/>
            <date year="2018" month="03"/>
          </front>
          <seriesInfo name="STD" value="91"/>
          <seriesInfo name="RFC" value="8341"/>
          <seriesInfo name="DOI" value="10.17487/RFC8341"/>
        </reference>
        <reference anchor="RFC8342" target="https://www.rfc-editor.org/info/rfc8342">
          <front>
            <title>Network Management Datastore Architecture (NMDA)</title>
            <author fullname="Bjorklund, M."/>
            <author fullname="Schoenwaelder, J."/>
            <author fullname="Shafer, P."/>
            <author fullname="Watsen, K."/>
            <author fullname="R. Wilton"/>
            <date year="2018" month="03"/>
          </front>
          <seriesInfo name="RFC" value="8342"/>
          <seriesInfo name="DOI" value="10.17487/RFC8342"/>
        </reference>
        <reference anchor="RFC8349" target="https://www.rfc-editor.org/info/rfc8349">
          <front>
            <title>A YANG Data Model for Routing Management (NMDA Version)</title>
            <author fullname="Lhotka, L."/>
            <author fullname="Lindem, A."/>
            <author fullname="Y. Qu"/>
            <date year="2018" month="03"/>
          </front>
          <seriesInfo name="RFC" value="8349"/>
          <seriesInfo name="DOI" value="10.17487/RFC8349"/>
        </reference>
        <reference anchor="RFC8525" target="https://www.rfc-editor.org/info/rfc8525">
          <front>
            <title>YANG Library</title>
            <author fullname="Bierman, A."/>
            <author fullname="Bjorklund, M."/>
            <author fullname="Schoenwaelder, J."/>
            <author fullname="Watsen, K."/>
            <author fullname="R. Wilton"/>
            <date year="2019" month="03"/>
          </front>
          <seriesInfo name="RFC" value="8525"/>
          <seriesInfo name="DOI" value="10.17487/RFC8525"/>
        </reference>
        <reference anchor="RFC9911" target="https://www.rfc-editor.org/info/rfc9911">
          <front>
            <title>Common YANG Data Types</title>
            <author fullname="Schönwälder, J., Ed."/>
            <date year="2025" month="12"/>
          </front>
          <seriesInfo name="RFC" value="9911"/>
          <seriesInfo name="DOI" value="10.17487/RFC9911"/>
        </reference>
        <reference anchor="RFC8949" target="https://www.rfc-editor.org/info/rfc8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="RFC8610" target="https://www.rfc-editor.org/info/rfc8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC6234" target="https://www.rfc-editor.org/info/rfc6234">
          <front>
            <title>US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="May" year="2011"/>
            <abstract>
              <t>Federal Information Processing Standard, FIPS</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6234"/>
          <seriesInfo name="DOI" value="10.17487/RFC6234"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="CATS-METRICS" target="https://datatracker.ietf.org/doc/html/draft-ietf-cats-metric-definition-14">
          <front>
            <title>CATS Metrics Definition</title>
            <author fullname="Kehan, Y."/>
            <author fullname="Li, C."/>
            <author fullname="Contreras, L. M."/>
            <author fullname="Ros-Giralt, J."/>
            <author fullname="G. Zeng"/>
            <date year="2026" month="10"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cats-metric-definition-14"/>
        </reference>
        <reference anchor="NORTHBOUND" target="https://datatracker.ietf.org/doc/html/draft-ftzhswj-cats-northbound-api-00">
          <front>
            <title>Computing-Aware Traffic Steering (CATS) Northbound Interface (NBI) Specification</title>
            <author fullname="Fu, T., Ed."/>
            <author fullname="Zhang, H., Ed."/>
            <author fullname="J. Wang, Ed."/>
            <date year="2026" month="05"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ftzhswj-cats-northbound-api-00"/>
        </reference>
        <reference anchor="RFC10053" target="https://www.rfc-editor.org/info/rfc10053">
          <front>
            <title>A Framework for Computing-Aware Traffic Steering (CATS)</title>
            <author fullname="Li, C., Ed."/>
            <author fullname="Du, Z."/>
            <author fullname="Boucadair, M., Ed."/>
            <author fullname="Contreras, L. M."/>
            <author fullname="J. Drake"/>
            <date year="2026" month="10"/>
          </front>
          <seriesInfo name="RFC" value="10053"/>
          <seriesInfo name="DOI" value="10.17487/RFC10053"/>
        </reference>
        <reference anchor="RFC3688" target="https://www.rfc-editor.org/info/rfc3688">
          <front>
            <title>The IETF XML Registry</title>
            <author fullname="Mealling, M."/>
            <date year="2004" month="01"/>
          </front>
          <seriesInfo name="BCP" value="81"/>
          <seriesInfo name="RFC" value="3688"/>
          <seriesInfo name="DOI" value="10.17487/RFC3688"/>
        </reference>
        <reference anchor="RFC6241" target="https://www.rfc-editor.org/info/rfc6241">
          <front>
            <title>Network Configuration Protocol (NETCONF)</title>
            <author fullname="Enns, R., Ed."/>
            <author fullname="Bjorklund, M., Ed."/>
            <author fullname="Schoenwaelder, J., Ed."/>
            <author fullname="A. Bierman, Ed."/>
            <date year="2011" month="06"/>
          </front>
          <seriesInfo name="RFC" value="6241"/>
          <seriesInfo name="DOI" value="10.17487/RFC6241"/>
        </reference>
        <reference anchor="RFC6242" target="https://www.rfc-editor.org/info/rfc6242">
          <front>
            <title>Using the NETCONF Protocol over Secure Shell (SSH)</title>
            <author fullname="Wasserman, M."/>
            <date year="2011" month="06"/>
          </front>
          <seriesInfo name="RFC" value="6242"/>
          <seriesInfo name="DOI" value="10.17487/RFC6242"/>
        </reference>
        <reference anchor="RFC8040" target="https://www.rfc-editor.org/info/rfc8040">
          <front>
            <title>RESTCONF Protocol</title>
            <author fullname="Bierman, A."/>
            <author fullname="Bjorklund, M."/>
            <author fullname="K. Watsen"/>
            <date year="2017" month="01"/>
          </front>
          <seriesInfo name="RFC" value="8040"/>
          <seriesInfo name="DOI" value="10.17487/RFC8040"/>
        </reference>
        <reference anchor="RFC8340" target="https://www.rfc-editor.org/info/rfc8340">
          <front>
            <title>YANG Tree Diagrams</title>
            <author fullname="Bjorklund, M."/>
            <author fullname="L. Berger, Ed."/>
            <date year="2018" month="03"/>
          </front>
          <seriesInfo name="BCP" value="215"/>
          <seriesInfo name="RFC" value="8340"/>
          <seriesInfo name="DOI" value="10.17487/RFC8340"/>
        </reference>
        <reference anchor="RFC9846" target="https://www.rfc-editor.org/info/rfc9846">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="Rescorla, E."/>
            <date year="2026" month="07"/>
          </front>
          <seriesInfo name="RFC" value="9846"/>
          <seriesInfo name="DOI" value="10.17487/RFC9846"/>
        </reference>
        <reference anchor="RFC9907" target="https://www.rfc-editor.org/info/rfc9907">
          <front>
            <title>Guidelines for Authors and Reviewers of Documents Containing YANG Data Models</title>
            <author fullname="Bierman, A."/>
            <author fullname="Boucadair, M., Ed."/>
            <author fullname="Q. Wu"/>
            <date year="2026" month="03"/>
          </front>
          <seriesInfo name="BCP" value="216"/>
          <seriesInfo name="RFC" value="9907"/>
          <seriesInfo name="DOI" value="10.17487/RFC9907"/>
        </reference>
        <reference anchor="RFC7942" target="https://www.rfc-editor.org/info/rfc7942">
          <front>
            <title>Improving Awareness of Running Code: The Implementation Status Section</title>
            <author fullname="Sheffer, Y."/>
            <author fullname="A. Farrel"/>
            <date year="2016" month="07"/>
          </front>
          <seriesInfo name="BCP" value="205"/>
          <seriesInfo name="RFC" value="7942"/>
          <seriesInfo name="DOI" value="10.17487/RFC7942"/>
        </reference>
      <reference anchor="CATS-MODEL" target="https://datatracker.ietf.org/doc/html/draft-ietf-cats-data-model-00">
          <front>
            <title>Data Model for Computing-Aware Traffic Steering (CATS)</title>
            <author fullname="Yao, H."/>
            <author fullname="Lin, C."/>
            <author fullname="Li, Z."/>
            <author fullname="Xiong, Q."/>
            <author fullname="L. M. Contreras"/>
            <date year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cats-data-model-00"/>
        </reference>
        <reference anchor="CATS-USECASES" target="https://datatracker.ietf.org/doc/html/draft-ietf-cats-usecases-requirements-14">
          <front>
            <title>Computing-Aware Traffic Steering (CATS) Problem Statement, Use Cases, and Requirements</title>
            <author fullname="Kehan Yao" initials="K." surname="Yao"><organization>China Mobile</organization></author>
            <date year="2026" month="February"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cats-usecases-requirements-14"/>
        </reference><reference anchor="RFC8799" target="https://www.rfc-editor.org/info/rfc8799">
          <front>
            <title>Limited Domains and Internet Protocols</title>
            <author fullname="B. Carpenter" initials="B." surname="Carpenter"/>
            <author fullname="B. Liu" initials="B." surname="Liu"/>
            <date year="2020" month="November"/>
          </front>
          <seriesInfo name="RFC" value="8799"/>
        </reference></references>
    </references>
    <section anchor="json-example">
      <name>JSON Instance Example</name>
      <t>This illustrative operational snapshot uses a pre-existing statically sourced service entry. The estimate is a mean, with an explicit usable-state endpoint. The string identifiers stand for definitions provisioned within the reporting domain; they are not globally registered values.</t>
      <sourcecode type="json">{
  "ietf-routing:routing": {
    "ietf-cats:cats": {
      "service-metrics": {
        "service-metric": [
          {
            "cs-id": 1,
            "csci-id": 2,
            "source-type": "ietf-cats:source-type-static",
            "ietf-cats-context-staging-metrics:context-staging-metri
              "boot-id": "b1",
              "view-id": "view-a",
    "snapshot-id": "s1",
              "estimate-limit": 16,
              "discarded-estimates": "0",
              "estimate": [
                {
                  "estimate-id": "e1",
                  "source-scope": "tier-host-a",
                  "destination-scope": "csci-tier-b",
                  "state-class": "dense-fp16-v1",
                  "workload-class": "arrival-mix-v1",
                  "method-id": "mean-direct-v1",
                  "observed-at": "2026-10-24T00:00:00Z",
                  "valid-for-us": "1000000",
                  "measurement-window-us": "10000000",
                  "sample-count": "50",
                  "statistic": "mean",
                  "status": "available",
                  "start-boundary": "lookup-start",
                  "end-boundary": "consumer-usable",
                  "components-complete": true,
                  "clock-uncertainty-us": "10",
                  "latency-us": "1200",
                  "component": [
                    {
                      "component-id": "lookup-queue-transfer-1",
                      "kind": "other"
                    }
                  ]
                }
              ]
            }
          }
        ]
      }
    }
  }
}</sourcecode>
    </section>
    <section anchor="test-vectors">
      <name>Interoperability Test Vectors</name>
      <table>
        <thead>
          <tr>
            <th>Case</th>
            <th>Input or mutation</th>
            <th>Expected behavior</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>C01</td>
            <td>Example snapshot</td>
            <td>Accept structure and semantics.</td>
          </tr>
          <tr>
            <td>C02</td>
            <td>unavailable; remove latency; samples 0</td>
            <td>Accept as unavailable, never zero cost.</td>
          </tr>
          <tr>
            <td>C03/C04</td>
            <td>available without latency, or unavailable with latency</td>
            <td>Reject affected estimate.</td>
          </tr>
          <tr>
            <td>C05/C06</td>
            <td>quantile without percentile; available mean with 0 samples</td>
            <td>Reject affected estimate.</td>
          </tr>
          <tr>
            <td>S02</td>
            <td>T=0, Es=2, N=50, En=2, V=100 us</td>
            <td>Freshness established.</td>
          </tr>
          <tr>
            <td>S03/S04</td>
            <td>Age equals V, or Es unknown</td>
            <td>Freshness not established.</td>
          </tr>
          <tr>
            <td>S06/S07</td>
            <td>Duplicate component or sum of quantiles</td>
            <td>Reject additive interpretation.</td>
          </tr>
          <tr>
            <td>S08</td>
            <td>components-complete=false</td>
            <td>Do not add this estimate to another cost.</td>
          </tr>
        </tbody>
      </table>
      <t>These test vectors verify representation and semantic validation rules. Operational evaluations <bcp14>SHOULD</bcp14> compare direct lookup-to-usable observations with model estimates under controlled load and record both rejection reasons and estimator error.</t>
    </section>
  </back>
</rfc>
