<?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" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-elmasri-qr-trust-residuals-00" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="QR Trust Residuals">Trust Residuals for Navigation QR Codes</title>
    <seriesInfo name="Internet-Draft" value="draft-elmasri-qr-trust-residuals-00"/>
    <author fullname="Hassan El-Masri">
      <organization>Independent Researcher</organization>
      <address>
        <postal>
          <country>United States of America</country>
        </postal>
        <email>hassan@unixtime.com</email>
      </address>
    </author>
    <date year="2026" month="September" day="03"/>
    <area>sec</area>
    <workgroup>Dispatch</workgroup>
    <keyword>QR code</keyword>
    <keyword>trust residuals</keyword>
    <keyword>quishing</keyword>
    <keyword>phishing</keyword>
    <keyword>issuer verification</keyword>
    <keyword>destination binding</keyword>
    <abstract>

<t>Navigation QR codes carrying absolute HTTP or HTTPS URIs initiate web
interactions, including payment, ordering, and institutional workflows.
Selected deployed scanners decode and hand off those URIs without an
interoperable account of whether the navigation is authorized.  This
document defines an Informational architecture and candidate decision-
semantics surface based on trust residuals: typed, evidence-bearing
deviations between a scanned artifact and issuer-chain, destination-
policy, redirect-flow, runtime-safety, freshness, and artifact-integrity
constraints.  Given a residual vector and a declared verification
profile, explicit precedence rules map the result to a bounded set of
scanner decision states.  Security invariants prevent reputation, HTTPS
transport, or runtime-safety signals from upgrading an otherwise
untrusted issuer path.  This document does not define a payload carrier
or a final wire format for signed governance objects; those belong in a
future binding specification.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-elmasri-qr-trust-residuals/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Dispatch Working Group mailing list (<eref target="mailto:dispatch@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/dispatch/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/dispatch/"/>.
      </t>
    </note>
  </front>
  <middle>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Navigation QR codes are a routine interface between the physical and
digital worlds.  They appear on restaurant tables, payment terminals,
parking meters, public notices, posters, invoices, and enterprise
workflows.  Their success comes from frictionless interaction: a user
points a camera at a code and is offered navigation to an HTTP or HTTPS
resource.</t>
      <t>That same frictionlessness creates a trust problem.  A QR code can be
syntactically valid <xref target="ISO18004"/>, visually plausible, and hosted
behind HTTPS while still directing a user to a malicious,
unauthorized, compromised, or contextually misleading destination.
The scanner may decode the payload correctly, and the browser may
establish an encrypted connection, yet the user's central trust
question remains unanswered: should this scanned destination be
trusted in this context?</t>
      <t>Measured user behavior supports the concern.  An early field
experiment found smartphone users willing to scan unsolicited QR codes
out of curiosity <xref target="VIDAS"/>.  A study with 1,876 participants found
that only 13% recognized fraudulent QR-based payment requests,
compared with 46% for the same requests entered manually
<xref target="KOWALEWSKI"/>.  A 556-participant evaluation of a secure scanner
reported 93.35% correct trust decisions with the secure scanner versus
75.24% and 65.11% with two widely deployed stock scanners <xref target="SEQR"/>.
Decoding-centric scanner interfaces leave users to make trust
decisions without trust evidence, and scanner interfaces that display
a decoded URL can be mistaken for having validated it.</t>
      <t>Prior work argued that navigation QR security is not primarily a
cryptography problem: signed payloads, certificate checks, and HTTPS
transport are necessary but insufficient to establish issuer
legitimacy, continued destination authorization, or present-time
destination safety <xref target="QRTRUST"/>.  That work proposed a hierarchical but
federated trust model in which root trust programs, delegated
authorities,
issuer records, destination policies, and signed status artifacts
allow verifiers to evaluate QR trust without relying on payload
decoding alone.</t>
      <t>A scanner needs machine-checkable inputs, failure conditions,
cache-freshness rules, deterministic decision semantics, and a
user-visible state that does not overclaim what has been proven.
Interoperability also requires issuers and status publishers to identify
what a verifier appraises, verifiers to use a common residual model, and
relying parties to receive the same bounded result for equivalent facts.
A private scanner label or user-interface convention cannot provide that
agreement.  This document calls the appraising component the QR verifier
and the component consuming its result the relying party; one scanner can
implement both roles.</t>
      <t>This document specifies that decision-semantics layer.  It defines trust
residuals -- typed, evidence-bearing deviations between a scanned QR
artifact and the constraints that must hold for a positive trust state
-- and maps residual outcomes through explicit precedence rules to a
bounded set of scanner decision states.  "Residual" is used in the
ordinary constraint-checking sense: a residual records what remains
unsatisfied after applying a verifier policy.  Nothing in this
document requires machine learning.  Evidence acquisition, complete
signed-object encodings, and carrier bindings are separate layers.</t>
      <t>This -00 asks DISPATCH to advise where the decision-semantics work belongs
and whether a Standards Track signed-object and carrier binding should
remain a separate document.  It does not ask the IETF to modify QR
symbology or standardize scanner user interfaces.</t>
      <section anchor="relationship-to-the-research-papers">
        <name>Relationship to the Research Papers</name>
        <t>The model and evaluation methodology were developed in <xref target="RESIDUALS"/>,
building on the trust-model framework of <xref target="QRTRUST"/>.  This document
specifies the residual input model, states, invariants, profiles, and
decision procedure.  <xref target="RESIDUALS"/> reports the measured comparison
against weaker baselines, the ablation analysis, and the full evaluation
methodology.
Independent implementation, longitudinal operation, privacy
measurement, issuance-time witness experiments, and human-subject
evaluation remain research work rather than protocol guarantees.</t>
      </section>
      <section anchor="scope-and-non-goals">
        <name>Scope and Non-Goals</name>
        <t>The conformance scope of this version is a Navigation QR Code whose
decoded payload contains an absolute HTTP or HTTPS URI.  Native app
intents, deep links, non-HTTP payment schemes, and other action types
require separate, versioned mappings and are outside this version.</t>
        <t>The conformance claim is narrow and testable.  Given a residual vector
constructed from issuer, destination, status, freshness, safety, and
artifact evidence, a decision engine maps it to a scanner state through
the precedence rules in <xref target="decision-table"/>.</t>
        <t>This version defines decision-semantics conformance.  It does not
define a QR payload carrier, complete signed governance-object schemas,
cryptographic envelope, discovery or distribution protocol, media
type, or registry.  The object examples and binding requirements in
<xref target="gov-objects"/> are design input to a future Standards Track binding.
Evidence acquisition and the complete mapping from observations to
residual severities likewise are not claimed as interoperable by the
Delta conformance corpus.</t>
        <t>The following remain outside the conformance claim:</t>
        <ul spacing="normal">
          <li>
            <t>Enrollment coverage, business identity from a bare signature or URL
reputation, universal maliciousness detection, and any requirement for
machine learning.</t>
          </li>
          <li>
            <t>DNS resolution, hosting continuity, resource bytes, page content, and
post-navigation browser state.  R_D authorizes normalized URL
components only; R_S and separately specified content-integrity
mechanisms answer different questions.</t>
          </li>
          <li>
            <t>App intents, native deep links, payment URI schemes, complete governance
objects, and an interoperable wire protocol.</t>
          </li>
          <li>
            <t>Improved user behavior without empirical testing of scanner states and
warnings.</t>
          </li>
        </ul>
        <t>Deployment also requires root selection, issuer enrollment, revocation
authority, scanner adoption, and tested user-interface behavior.  This
document does not specify those functions, presentation-mode QR payments
inside closed ecosystems, brand recognition, governance selection, or
liability.</t>
      </section>
      <section anchor="relationship-to-existing-mechanisms">
        <name>Relationship to Existing Mechanisms</name>
        <t>The RATS architecture <xref target="RFC9334"/> is the closest role-level
comparison.  A RATS Verifier appraises Evidence and emits Attestation
Results; a Relying Party applies its own policy to decide an action.
Here a QR verifier appraises the decoded payload and available signed
state into R, then Delta produces <tt>(S,A,L)</tt> for the QR relying party
that offers or blocks navigation.  One scanner process can combine
those two roles, but their policy responsibilities remain distinct.</t>
        <t>This is an analogy, not a RATS profile.  RATS Evidence is produced by
an Attester about an attested environment.  A merchant organization or
authorized URL is not an EAT entity: EAT <xref target="RFC9711"/> reserves that
notion for hardware or software, although a scanner's own platform
attestation could separately use EAT.  The active AR4SI work
<xref target="AR4SI"/> defines reusable Attestation Result elements, categories,
tiers, and JSON/CBOR serializations for consistent relying-party
policy.  QR Trust instead defines six navigation-specific residuals
and Delta; it does not claim to extend AR4SI.  The RATS Conceptual
Message Wrapper <xref target="RFC9999"/> also demonstrates that an architecture's
conceptual messages can remain separate from their typed wire wrapper;
this document does not claim that CMW already types QR messages.</t>
        <t>W3C Verifiable Credentials <xref target="VCDM"/> define a general credential data
model.  Separate W3C Recommendations define JOSE/COSE securing
<xref target="VCJOSECOSE"/> and privacy-conscious suspension or revocation via
Bitstring Status Lists <xref target="VCSTATUS"/>.  A future QR binding could
evaluate a VC representation or status mechanism, but VC alone does
not define accepted-root policy, destination authorization, redirect
observation, runtime-safety residuals, or Delta.  QR capacity,
processing cost, and privacy need measurement before such a binding
is selected.</t>
        <t>JWS <xref target="RFC7515"/> and COSE <xref target="RFC9052"/> are established signature
envelopes, with their own protected-header, key, and algorithm
machinery <xref target="RFC7517"/> <xref target="RFC8725"/> <xref target="RFC9053"/>.  A future binding needs
to select and fully profile one primary envelope rather than require
both or invent a parallel generic signature envelope.  JWS signs a
JWS Signing Input, while COSE signs its <tt>Sig_structure</tt>; even when
they carry the same application payload octets, their signature
inputs and values are not byte-identical.</t>
        <t>The Internet X.509 profile <xref target="RFC5280"/>, TLS service-identity rules
<xref target="RFC9525"/>, and browser root-program governance are three separate
layers.  Together they can authenticate a TLS service under a locally
accepted public root, but do not establish QR publisher legitimacy,
authorize a path or query, or supply the decision semantics here.
Domain-control evidence can support enrollment without turning a TLS
certificate into business identity.  Browser safe-browsing feeds
likewise answer destination-reputation questions; invariants I1 and
I2 prevent either signal from creating issuer trust.</t>
        <t>RPKI <xref target="RFC6480"/> is a narrower design analogy.  It uses resource
certificates and CRLs, route-origin authorizations, signed manifests,
untrusted repositories, and relying-party caches to constrain
authorization over hierarchically allocated Internet number
resources.  QR Trust can learn from signed-object publication,
revocation, manifest completeness, and cache freshness, but RPKI does
not define QR status-event streams or <tt>previous_sequence</tt> chains, and
QR issuer and destination identity do not inherit Internet-number
allocation semantics.</t>
        <t>SCITT <xref target="RFC9943"/> is the candidate substrate if a later QR binding
needs statement transparency.  SCITT defines COSE-enveloped Signed
Statements, protected issuer and subject claims <xref target="RFC9597"/>,
registration with a Transparency Service, receipts, and verifiable
history.  A receipt can support audit and equivocation detection; it
does not decide current QR trust, distribute urgent revocation, or
replace local root acceptance and Delta.  This -00 therefore defines
no parallel transparency-log protocol.</t>
        <t>A future binding should select one primary cryptographic envelope and
application schema instead of stacking JOSE, COSE, VC, EAT, SCITT, and
RPKI.  Optional ecosystem and transparency bindings need separate
implementation evidence.</t>
        <t>ISO/IEC JTC 1/SC 31 owns QR symbology <xref target="ISO18004"/>, which this document
does not modify.  Scanner user interfaces remain platform concerns.
The DISPATCH question concerns the security architecture and decision
semantics between issuers, status publishers, verifiers, and relying
parties.  A separate document can define signed-object and carrier
bindings using established IETF mechanisms.</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</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>This document is submitted as Informational for dispatch discussion;
the category is a placeholder pending that discussion.  Normative
keywords are used so that the decision semantics are stated testably
-- the conformance corpus of <xref target="impl-status"/> exercises them today.
This document does not define wire-format conformance.  If the work is
adopted, a separate binding specification would be a candidate for
Standards Track.</t>
      <dl>
        <dt>Navigation QR code:</dt>
        <dd>
          <t>A QR code <xref target="ISO18004"/> whose payload initiates navigation to an
absolute URI <xref target="RFC3986"/> with scheme <tt>http</tt> or <tt>https</tt>, as opposed
to a presentation-mode code that merely displays data to a
counterparty device.  Other action types are outside this version.</t>
        </dd>
        <dt>Governance producer:</dt>
        <dd>
          <t>A root program, delegated operator, issuer, status publisher, or
runtime-safety provider that makes evidence available for appraisal.
This role describes production of state, not whether a particular
wire object or transport has been standardized.</t>
        </dd>
        <dt>Verifier:</dt>
        <dd>
          <t>The component (in a scanner app, operating-system service, or
gateway) that appraises a scanned artifact and available trust state,
constructs the residual input, applies Delta, and emits a structured
decision result.</t>
        </dd>
        <dt>Relying party:</dt>
        <dd>
          <t>The component that consumes the verifier's structured result and
decides whether navigation is offered or blocked under local policy.
A scanner application can combine the Verifier and Relying Party
roles, but their policy responsibilities remain distinct.</t>
        </dd>
        <dt>Accepted root:</dt>
        <dd>
          <t>A trust anchor that the verifier's local policy accepts as a root
trust program.  Acceptance is a local policy decision; no global
root list is assumed.</t>
        </dd>
        <dt>Delegation path:</dt>
        <dd>
          <t>The chain from an accepted root through zero or more delegated
operators to the issuer that signed a managed trust claim.</t>
        </dd>
        <dt>Managed trust claim:</dt>
        <dd>
          <t>A signed claim carried with (or referenced by) a QR payload that
binds the payload's destination to an issuer enrolled under a root
trust program (see <xref target="payload-claim"/>).</t>
        </dd>
        <dt>Trust residual:</dt>
        <dd>
          <t>A typed, evidence-bearing record of what remains unsatisfied after
evaluating one family of constraints against a scanned artifact.</t>
        </dd>
        <dt>Residual family:</dt>
        <dd>
          <t>One of the six constraint families evaluated by the verifier:
issuer chain, destination policy, redirect flow, runtime safety,
freshness, and artifact integrity.</t>
        </dd>
        <dt>Mandatory family:</dt>
        <dd>
          <t>A residual family that the active profile (or deployment policy)
marks as requiring decision-grade, positive-eligible evidence before
any positive state may be emitted.  The exact eligible tiers are
defined by D4 and D14; they are not uniformly named <tt>pass</tt>.</t>
        </dd>
        <dt>Decision state:</dt>
        <dd>
          <t>One of the five bounded user-visible states defined in
<xref target="decision-states"/>.</t>
        </dd>
        <dt>Positive state:</dt>
        <dd>
          <t>The decision state "verified issuer" (<xref target="decision-states"/>), with
or without annotations.  It is the only state that asserts full
positive eligibility (rule D4), and the only state the invariants
and the conformance clause of <xref target="profiles"/> refer to as positive.
"Verified issuer destination risky" asserts a verified issuer
chain but is a warning state, not a positive state.  The positive
attention level is narrower still: only an unannotated "verified
issuer" carries it.</t>
        </dd>
        <dt>Issuer-verification terminal:</dt>
        <dd>
          <t>A decision state asserting a verified issuer chain: "verified
issuer" or "verified issuer destination risky" (rules D4 and D5).</t>
        </dd>
        <dt>Annotation:</dt>
        <dd>
          <t>A machine-readable qualifier attached to an emitted decision state
(for example, limited visibility, stale bound, artifact warning,
testing posture, or cross-root contradiction).  Any annotation
raises the required attention of "verified issuer" to warning
(<xref target="decision-states"/>).</t>
        </dd>
        <dt>Attention level:</dt>
        <dd>
          <t>The minimum user attention a decision state demands, on the ordered
scale positive &lt; neutral &lt; warning &lt; block.</t>
        </dd>
        <dt>Verification profile:</dt>
        <dd>
          <t>A named, closed parameterization of the decision semantics
(<xref target="profiles"/>) that fixes how insufficiency, staleness, and
optional families are treated.</t>
        </dd>
        <dt>Controlled resolution:</dt>
        <dd>
          <t>Resolution of a payload's redirect chain inside an isolated
environment operated by the verifier, rather than in the user's
browsing context.</t>
        </dd>
        <dt>Resolver:</dt>
        <dd>
          <t>An intermediary host (for example, a short-link service) through
which a payload passes before reaching its final destination.
Such policies bind the first-hop resolver as well as that
final destination (<xref target="gov-objects"/>).</t>
        </dd>
        <dt>Trusted mode:</dt>
        <dd>
          <t>The evaluation mode entered when the payload carries a managed
trust claim, and therefore the only mode in which a positive state
is reachable.  Redirect-flow evaluation (<xref target="family-rr"/>) and rule D7
(<xref target="decision-table"/>) apply in trusted mode only: a payload with no
claim cannot reach a positive state, so resolving its chain would
spend a network action and its privacy cost (<xref target="privacy"/>) on a
decision it cannot change.</t>
        </dd>
      </dl>
      <t>Similar names recur in three namespaces: severity tiers ("warn",
"block") describe residual evidence (<xref target="lattice"/>); attention levels
("warning", "block") describe demanded user attention; decision
states ("blocked") are the emitted outcome.  The namespaces are
related but never interchangeable.</t>
    </section>
    <section anchor="model">
      <name>Trust-Residual Model</name>
      <section anchor="verification-function">
        <name>Verification Function</name>
        <t>A complete verifier implements a function:</t>
        <artwork><![CDATA[
V(q, t, C_t, P) -> (S, A, L, R, E)
]]></artwork>
        <t>where q is the scanned artifact (decoded payload plus capture
metadata), t is the evaluation time, C_t is the verifier's cached
signed trust state at time t, and P is the active verification
profile.  The outputs are a decision state S (<xref target="decision-states"/>),
a residual vector R, and an evidence set E that records the artifacts,
hashes, sequence numbers, and freshness windows consulted.  A is the
ordered annotation list and L is the derived attention level.</t>
        <t>The decision-semantics function specified by this document is the
narrower function:</t>
        <artwork><![CDATA[
Delta(R, P) -> (S, A, L)
]]></artwork>
        <t>where P is the decision context defined in <xref target="profiles"/>, A is the
ordered annotation list, and L is the derived attention level.  Delta
does not acquire evidence or decide whether an observation justifies a
residual tier.  It consumes the closed input below.</t>
        <t>The residual vector has one entry per family:</t>
        <artwork><![CDATA[
R = [R_I, R_D, R_R, R_S, R_F, R_A]
]]></artwork>
        <t>for issuer chain (R_I), destination policy (R_D), redirect flow
(R_R), runtime safety (R_S), freshness (R_F), and artifact integrity
(R_A).</t>
      </section>
      <section anchor="residual-record">
        <name>Residual Record</name>
        <t>Each residual is a record <tt>(tier, causes, evidence_refs,
freshness_ref)</tt>:</t>
        <dl>
          <dt>tier:</dt>
          <dd>
            <t>One token permitted for the family by <xref target="lattice"/>.  Delta consumes
this field.</t>
          </dd>
          <dt>causes:</dt>
          <dd>
            <t>An ordered, duplicate-free list drawn from the family's enumeration
in <xref target="families"/>.  A passing residual has an empty cause list.  Causes
explain appraisal but do not alter Delta independently of <tt>tier</tt>.</t>
          </dd>
          <dt>evidence_refs:</dt>
          <dd>
            <t>An ordered, duplicate-free list of opaque references into E that
identify the signed artifacts, observations, or measurements used by
the appraiser.  Delta preserves but does not inspect them.</t>
          </dd>
          <dt>freshness_ref:</dt>
          <dd>
            <t>An opaque reference into E for the validity window, sequence, and
evaluation-time facts used by appraisal, or null when the family is
not applicable or no time-bound source applies.  Delta does not
re-evaluate time.</t>
          </dd>
        </dl>
        <t>Mandatory-family membership is carried once in P, not duplicated in
each residual.  Confidence is outside the conformance
record: an appraiser can retain a calibrated score in E, but Delta <bcp14>MUST</bcp14>
ignore it.</t>
      </section>
      <section anchor="lattice">
        <name>Severity Lattice</name>
        <t>The generic evidence tiers form the ordered set:</t>
        <artwork><![CDATA[
pass < unknown < stale < warn < fail < block
]]></artwork>
        <t>The generic <tt>unknown</tt> class is represented in the closed family
vocabularies by three explicit tier tokens that decision rules can
distinguish:</t>
        <dl>
          <dt>not-applicable:</dt>
          <dd>
            <t>The family does not apply to this artifact under the active
profile (for example, redirect-flow evaluation for a payload with
no redirect and a profile that does not require controlled
resolution).</t>
          </dd>
          <dt>not-checked:</dt>
          <dd>
            <t>The verifier did not evaluate the family (for example, artifact
integrity on a platform without capture forensics).</t>
          </dd>
          <dt>unavailable:</dt>
          <dd>
            <t>The verifier attempted evaluation and could not obtain the
required state (for example, a runtime-safety provider that did
not answer within its budget).</t>
          </dd>
        </dl>
        <t>The decision input uses the following closed family-specific tier
sets.  <tt>no-issuer</tt>, <tt>unaccepted-issuer</tt>, <tt>invalid-managed-claim</tt>,
<tt>revoked-issuer</tt>, and <tt>cross-root-contradiction</tt> retain issuer meaning
that a generic severity would erase.</t>
        <table anchor="tab-residual-tiers">
          <name>Closed residual-tier vocabulary</name>
          <thead>
            <tr>
              <th align="left">Family</th>
              <th align="left">Permitted tier tokens</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">R_I</td>
              <td align="left">pass, no-issuer, unaccepted-issuer, invalid-managed-claim, revoked-issuer, cross-root-contradiction</td>
            </tr>
            <tr>
              <td align="left">R_D</td>
              <td align="left">pass, fail, not-applicable, unavailable</td>
            </tr>
            <tr>
              <td align="left">R_R</td>
              <td align="left">pass, warn, fail, not-applicable, unavailable</td>
            </tr>
            <tr>
              <td align="left">R_S</td>
              <td align="left">pass, warn, block, stale, unavailable, not-checked</td>
            </tr>
            <tr>
              <td align="left">R_F</td>
              <td align="left">pass, warn, block, not-applicable</td>
            </tr>
            <tr>
              <td align="left">R_A</td>
              <td align="left">pass, warn, fail, block</td>
            </tr>
          </tbody>
        </table>
        <t>A decision engine <bcp14>MUST</bcp14> reject a missing family, an extra family, or a
tier outside the permitted set before applying Delta.  This validation
turns unknown extensions into a loud version mismatch rather than the
D15 caution default.  D15 provides totality over valid combinations of
the vocabulary above; it is not an extension mechanism.</t>
        <t>The lattice orders evidence classes, not decision precedence.  An
insufficiency tier in a mandatory family can outweigh a warn tier in
an optional family: rule D14 in <xref target="decision-table"/> makes a mandatory
family that lacks positive-eligible evidence fatal to positive
eligibility, regardless of lattice position.  Runtime safety has no
<tt>not-applicable</tt> tier; see <xref target="family-rs"/>.</t>
      </section>
    </section>
    <section anchor="families">
      <name>Residual Families</name>
      <t>Each family defines a pass condition and an enumeration of residual
causes.  Cause identifiers are lowercase kebab-case tokens carried in
the evidence set.  These enumerations are closed for
<tt>qr-trust-delta-v1</tt>; a future document can extend them only with a new
semantics version.</t>
      <section anchor="family-ri">
        <name>Issuer Chain (R_I)</name>
        <t>Pass condition: the payload carries a managed trust claim whose
signature verifies under a key bound to an issuer record, the issuer
record chains through a valid delegation path to an accepted root,
and every element of the path is within its validity window and free
of revocation or suspension.</t>
        <t>Residual causes: no-trust-claim, invalid-signature,
invalid-trust-claim, unaccepted-root, unknown-issuer,
malformed-chain, delegation-depth-exceeded, issuer-revoked,
issuer-suspended, key-revoked, key-suspended, record-expired,
record-not-yet-valid, key-window-mismatch, and
trust-state-unavailable.  The cause
invalid-trust-claim marks a claim that is present but fails
validation, used when a profile carve-out routes such a payload to
"unverified" instead of "blocked" (<xref target="decision-table"/>).</t>
        <t>A verifiable signature from an issuer outside every accepted root is
not an error condition; it is the distinct "signed unaccepted
issuer" outcome (<xref target="decision-states"/>).</t>
      </section>
      <section anchor="family-rd">
        <name>Destination Policy (R_D)</name>
        <t>Pass condition: under the appraiser's selected normalization and
policy-matching profile, the final destination and, when a resolver is
used, the first-hop resolver both fall within the issuer's signed
destination policy (<xref target="gov-objects"/>), and the policy itself is valid
and in window.  <xref target="normalization"/> explains why this condition needs a
future binding before different appraisers can claim interoperability.</t>
        <t>Residual causes: destination-not-authorized,
resolver-not-authorized, policy-expired, policy-unavailable,
normalization-failure, policy-invalid.</t>
        <t>A destination outside the signed policy of an otherwise valid issuer
is treated as adverse evidence, not as missing evidence: it yields
severity "fail" and rule D6 (<xref target="decision-table"/>) maps it to
"blocked", never to
"unverified".  A signed claim pointing outside its own policy is a
stronger signal of compromise or misissuance than an unsigned code.</t>
        <t>An R_D pass is URL authorization, not resource integrity.  It says
that the normalized scheme, host, port, path, and query satisfy the
signed policy at evaluation time.  It does not attest DNS resolution,
hosting continuity, resource bytes, page content, or navigation after
the scanner hands the URL to another user agent.  A resource change
behind the same authorized URL leaves R_D at "pass" unless some other
policy or evidence family detects it.</t>
      </section>
      <section anchor="family-rr">
        <name>Redirect Flow (R_R)</name>
        <t>Redirect flow is evaluated in trusted mode when the payload carries a
managed trust claim, because only then is a positive state reachable
and worth protecting.  Pass condition: under controlled resolution,
the observed chain stays within the policy's allowed redirect hosts,
does not exceed the policy's maximum depth, and terminates at a
destination consistent with R_D.</t>
        <t>Residual causes: depth-exceeded, unauthorized-intermediary,
nested-shortener, resolver-mismatch, cloaking-indicator,
resolution-unavailable.</t>
      </section>
      <section anchor="family-rs">
        <name>Runtime Safety (R_S)</name>
        <t>Pass condition: a fresh, signed runtime-safety verdict for the final
destination (and resolver, when used) reports no adverse state.</t>
        <t>Residual causes: verdict-warn, verdict-block, verdict-expired,
verdict-stale, provider-unavailable, provider-disagreement.</t>
        <t>Runtime safety <bcp14>MAY</bcp14> reduce trust but <bcp14>MUST NOT</bcp14> create issuer trust
(invariant I1 in <xref target="invariants"/>).  This family has no
"not-applicable" tier: every navigation has a present-time safety
question.  The only positive-eligible non-pass tier is
"unavailable", and only when the active profile is neither
strict-online (<xref target="profiles"/>) nor marks runtime safety mandatory; a positive state
emitted in that situation <bcp14>MUST</bcp14> carry a limited-visibility
annotation.  An expired verdict is recorded here (as
verdict-expired) rather than in R_F, so that freshness of the safety
signal and freshness of governance objects remain independently
visible.</t>
      </section>
      <section anchor="family-rf">
        <name>Freshness (R_F)</name>
        <t>Pass condition: every governance object consulted (see
<xref target="gov-objects"/> for the object types) is within its validity
window, sequence numbers are monotonic with no observed rollback,
no gap is observed in any previous_sequence-chained stream, and the
verifier's clock is within the deployment's permitted skew of the
objects' timestamps.</t>
        <t>Residual causes: object-expired, object-not-yet-valid,
sequence-rollback, sequence-gap, clock-skew-exceeded,
cache-unverifiable.</t>
        <t>State past its window but within an appraisal-profile grace bound is
tier <tt>warn</tt>, distinct from <tt>block</tt>.  Rule D9 in <xref target="decision-table"/>
governs the outcome: profiles of the strict class block, while the
bounded and testing classes continue with an explicit warning
annotation (profile classes are defined in <xref target="profiles"/>).</t>
      </section>
      <section anchor="family-ra">
        <name>Artifact Integrity (R_A)</name>
        <t>Pass condition: capture-side analysis of the physical or digital
artifact reveals no tampering indicators.</t>
        <t>Residual causes: overlay-suspected, conflicting-symbols,
framed-symbol-anomaly, print-provenance-anomaly,
container-mismatch, analysis-unavailable.</t>
        <t>Artifact-integrity analysis is probabilistic and environment
dependent, so this family is supporting evidence by default:
optional, advisory, and unable to create trust.  Delta consumes an
R_A tier of <tt>block</tt> without inferring how the appraiser reached it.
A future appraisal binding must define the evidence and signed policy
needed to assign <tt>block</tt>, including any treatment of conflicting
symbols or overlays in a signed-only workflow.  Other detections
downgrade or annotate (rules D11 and D12) and become blocking only
where P marks the family mandatory (m_A).</t>
      </section>
    </section>
    <section anchor="invariants">
      <name>Security Invariants</name>
      <t>The decision semantics <bcp14>MUST</bcp14> maintain the following invariants.  They
are stated independently of the decision table so that any
implementation, extension, or profile can be checked against them
directly.</t>
      <dl>
        <dt>I1 (non-upgrade by runtime safety):</dt>
        <dd>
          <t>A benign runtime-safety verdict <bcp14>MUST NOT</bcp14> raise the decision state
of a payload whose issuer chain does not pass.  Reputation
evidence never creates issuer trust.</t>
        </dd>
        <dt>I2 (non-upgrade by transport):</dt>
        <dd>
          <t>HTTPS transport, certificate validity, or destination TLS posture
<bcp14>MUST NOT</bcp14> raise the decision state.  Transport security is assumed
necessary and is never sufficient.</t>
        </dd>
        <dt>I3 (destination-binding precedence):</dt>
        <dd>
          <t>A destination or resolver outside the signed destination policy
<bcp14>MUST</bcp14> prevent any positive state, regardless of issuer-chain
validity.</t>
        </dd>
        <dt>I4 (freshness precedence):</dt>
        <dd>
          <t>A stale appraisal <bcp14>MUST NOT</bcp14> silently produce an unannotated positive-
attention result.  The strict class blocks an R_F tier of <tt>warn</tt>;
the bounded and testing classes continue with
<tt>stale-offline-warning</tt>.  State past every appraisal grace bound is
R_F <tt>block</tt>, not <tt>warn</tt>.</t>
        </dd>
        <dt>I5 (root isolation):</dt>
        <dd>
          <t>Trust decisions under one accepted root <bcp14>MUST NOT</bcp14> be influenced by
artifacts signed under a different root, except to surface a
cross-root contradiction through rule D13.  An appraiser may assign
<tt>cross-root-contradiction</tt> only when the artifacts carry an explicit
common subject identifier under a binding that defines cross-root
equality.  Display-name, host-name, or other heuristic similarity is
insufficient.  Without that binding, the appraiser keeps the root
decisions separate and does not invoke D13.</t>
        </dd>
        <dt>I6 (evidence preservation):</dt>
        <dd>
          <t>Every emitted state <bcp14>MUST</bcp14> be accompanied by the residual vector and
evidence set that produced it, sufficient for later review to
replay Delta from R and P.  This does not require retaining the raw
capture, full URL, network response, or physical context needed to
repeat appraisal.  Evidence retention is minimized, protected, and
bounded as specified in <xref target="privacy"/>.</t>
        </dd>
        <dt>I7 (no silent fallback to trust):</dt>
        <dd>
          <t>Unavailability of any required input (provider, cache, policy)
<bcp14>MUST NOT</bcp14> default to a positive state.  Fail-open is expressible
only as an explicit, annotated profile choice, never as an
implementation default.</t>
        </dd>
      </dl>
    </section>
    <section anchor="decision-states">
      <name>Decision States</name>
      <t>A verifier maps every evaluated artifact to exactly one of five
bounded decision states.  Open-ended scores and ad hoc warning strings
would prevent deterministic review across implementations.</t>
      <dl>
        <dt>unverified (attention: neutral):</dt>
        <dd>
          <t>No managed trust claim is present, or the profile's carve-outs
route an invalid claim here with warnings (<xref target="profiles"/>).  The
code is an ordinary link; nothing positive is asserted.  Because
the absence of a claim is unauthenticatable, this state is also
where a code stripped of its claim lands; <xref target="downgrade"/> treats that
attack and its deployment-side countermeasures.</t>
        </dd>
        <dt>signed unaccepted issuer (attention: warning):</dt>
        <dd>
          <t>The payload carries a cryptographically valid claim, but the
delegation path terminates outside every accepted root.  The
verifier asserts the signature's validity and nothing more.</t>
        </dd>
        <dt>verified issuer (attention: positive when unannotated):</dt>
        <dd>
          <t>The full positive-eligibility predicate of rule D4
(<xref target="decision-table"/>) holds.  If any
annotation accompanies this state (limited visibility, stale
bound, artifact warning, testing posture, cross-root
contradiction), the required attention level is warning: an
annotated "verified issuer" is not the positive attention level.</t>
        </dd>
        <dt>verified issuer destination risky (attention: warning):</dt>
        <dd>
          <t>The issuer path is positive-eligible, but the runtime-safety
verdict for the destination is warn-grade (rule D5).</t>
        </dd>
        <dt>blocked (attention: block):</dt>
        <dd>
          <t>A mandatory block condition matched (rules D3, D6, D7, D8, D10,
and profile-dependent D9/D11).  The verifier <bcp14>MUST NOT</bcp14> offer
one-tap continuation from this state.</t>
        </dd>
      </dl>
      <t>Unreadable capture is not a sixth decision state.  When no reliable
payload can be extracted from the capture, rule D0 reports the
unreadable capture outcome with re-capture guidance; this is a
capture result, not a trust decision.  Residuals recorded for such
captures (as in the conformance corpus) are diagnostic; rule D0
decides without consulting them.</t>
      <t>For conformance JSON results and APIs, the authoritative field is
model_decision.primary_state.  Its value is the decision-state name
in lowercase kebab-case: unverified, signed-unaccepted-issuer,
verified-issuer, verified-issuer-destination-risky, or blocked.  The
unreadable capture outcome is not carried in this trust-decision
field.</t>
      <t>An implementation <bcp14>MAY</bcp14> also expose a product-oriented decision_state
field with UX refinements or compatibility labels.  That field is
not a conformance surface.  Each response <bcp14>MUST</bcp14> still carry the exact
underlying model_decision, and the product treatment <bcp14>MUST NOT</bcp14> demand
less attention than model_decision.attention_level.</t>
      <t>Deployed scanners <bcp14>MAY</bcp14> present UX-layer refinements of these states
(for example, a "destination changed" treatment distinguishing why
a previously positive code is no longer positive), provided the
refinement maps to exactly one underlying decision state and never
demands less attention (conformance clause, <xref target="profiles"/>).</t>
    </section>
    <section anchor="decision-table">
      <name>Decision Procedure</name>
      <section anchor="decision-rules">
        <name>Decision Rules</name>
        <t>The overall evaluation first applies the capture rule D0.  If capture
and decode succeed, the decision function Delta maps a residual
vector and decision context P to one of the five decision states via the
remaining rules.  D0 stays in the table to make the total evaluation
order explicit, but its result inhabits the separate capture-outcome
type.  Conditions abbreviate the pass conditions of <xref target="families"/>;
m_x denotes "family x is mandatory".</t>
        <table anchor="tab-rules">
          <name>Decision rules</name>
          <thead>
            <tr>
              <th align="left">Rule</th>
              <th align="left">Condition (summary)</th>
              <th align="left">Outcome</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">D0</td>
              <td align="left">capture yields no reliable claim</td>
              <td align="left">unreadable capture outcome</td>
            </tr>
            <tr>
              <td align="left">D1</td>
              <td align="left">R_I = no-issuer</td>
              <td align="left">unverified</td>
            </tr>
            <tr>
              <td align="left">D2</td>
              <td align="left">R_I = unaccepted-issuer</td>
              <td align="left">signed unaccepted issuer</td>
            </tr>
            <tr>
              <td align="left">D3</td>
              <td align="left">R_I = invalid-managed-claim or revoked-issuer</td>
              <td align="left">blocked, except the reference-testing carve-out below</td>
            </tr>
            <tr>
              <td align="left">D4</td>
              <td align="left">full positive eligibility (see below)</td>
              <td align="left">verified issuer</td>
            </tr>
            <tr>
              <td align="left">D5</td>
              <td align="left">positive-eligible except R_S = warn</td>
              <td align="left">verified issuer destination risky</td>
            </tr>
            <tr>
              <td align="left">D6</td>
              <td align="left">R_D = fail (destination or resolver outside policy)</td>
              <td align="left">blocked</td>
            </tr>
            <tr>
              <td align="left">D7</td>
              <td align="left">R_R = fail in trusted mode</td>
              <td align="left">blocked</td>
            </tr>
            <tr>
              <td align="left">D8</td>
              <td align="left">R_S = block</td>
              <td align="left">blocked</td>
            </tr>
            <tr>
              <td align="left">D9</td>
              <td align="left">R_F = block, or R_F = warn</td>
              <td align="left">block; for warn under a non-strict profile, instead continue with stale-offline-warning</td>
            </tr>
            <tr>
              <td align="left">D10</td>
              <td align="left">R_A = block</td>
              <td align="left">blocked</td>
            </tr>
            <tr>
              <td align="left">D11</td>
              <td align="left">R_A = fail</td>
              <td align="left">m_A: blocked; else unverified + artifact warning</td>
            </tr>
            <tr>
              <td align="left">D12</td>
              <td align="left">Positive-eligible R_A = warn, R_R = warn, or non-mandatory R_S = unavailable</td>
              <td align="left">continue with the corresponding annotation</td>
            </tr>
            <tr>
              <td align="left">D13</td>
              <td align="left">R_I = cross-root-contradiction</td>
              <td align="left">strict: blocked; otherwise unverified + incomplete-verification-warning</td>
            </tr>
            <tr>
              <td align="left">D14</td>
              <td align="left">R_S is stale or not checked as detailed below, or a mandatory family lacks positive-eligible evidence</td>
              <td align="left">strict: blocked; otherwise unverified + incomplete-verification-warning</td>
            </tr>
            <tr>
              <td align="left">D15</td>
              <td align="left">any valid vector not matched above</td>
              <td align="left">unverified + incomplete-verification-warning</td>
            </tr>
          </tbody>
        </table>
        <t>Rule D4's positive-eligibility predicate is: R_I is <tt>pass</tt>; R_D is
<tt>pass</tt> or <tt>not-applicable</tt>; R_R is <tt>pass</tt>, <tt>warn</tt>, or
<tt>not-applicable</tt>; R_S is <tt>pass</tt> or <tt>unavailable</tt> where the profile and
m_S allow it; R_F is <tt>pass</tt>, <tt>warn</tt>, or <tt>not-applicable</tt> where the
profile allows it; R_A is <tt>pass</tt> or <tt>warn</tt>; no mandatory family lacks
positive-eligible evidence; and no earlier rule returned.  Warn-grade
evidence that survives to D4 surfaces as annotations, and any
annotation removes the positive attention level
(<xref target="decision-states"/>).</t>
        <t>For D9, "continue" means that the annotation is accumulated before
later rules run.  If no later rule downgrades the result, D4 emits
<tt>verified-issuer</tt> with <tt>stale-offline-warning</tt>, whose attention level
is warning rather than positive.  For D13, the exact strict result is
<tt>blocked</tt> with no annotation; the exact bounded or testing result is
<tt>unverified</tt> with <tt>incomplete-verification-warning</tt>.  Both carry a
cross-root-contradiction diagnostic reason.  A stronger earlier block
condition wins before D13.</t>
        <t>D3 consumes issuer tiers, not raw signature or lifecycle evidence.
<tt>invalid-managed-claim</tt> is the invalid-claim tier, while
<tt>revoked-issuer</tt> is the block-grade issuer-or-key lifecycle tier; the
cause list preserves whether appraisal observed an invalid signature,
malformed chain, issuer suspension or revocation, or key suspension or
revocation.  Under <tt>reference-testing</tt>, <tt>invalid-managed-claim</tt> instead
returns <tt>unverified</tt> with annotations <tt>invalid-trust-claim-warning</tt>
then <tt>policy-profile-warning</tt>.  <tt>revoked-issuer</tt> remains blocked under
every profile.</t>
        <t>D14's runtime-specific arms are exact: R_S <tt>stale</tt> blocks under
<tt>strict-online</tt> and otherwise returns <tt>unverified</tt> with
<tt>incomplete-verification-warning</tt>; R_S <tt>not-checked</tt> has the same
outcomes; and R_S <tt>unavailable</tt> blocks under <tt>strict-online</tt> but
continues with <tt>limited-runtime-safety-visibility</tt> under a non-strict
profile unless P marks R_S mandatory.  The general arm then applies
to every family P marks mandatory.  R_S <tt>warn</tt> is decision-grade risky
evidence and belongs to D5, not to the missing-evidence arm of D14.</t>
      </section>
      <section anchor="evaluation-order">
        <name>Evaluation Order</name>
        <t>The overall evaluation uses the following order.  D0 is the sole
pre-Delta class.  Once capture succeeds, Delta is total over every
valid R and P.  A terminal outcome returns immediately; an annotation
step appends to A and continues:</t>
        <ol spacing="normal" type="1"><li>
            <t>Capture: D0.</t>
          </li>
          <li>
            <t>Adverse blocks: D3; D6; D7; D8; the R_F <tt>block</tt> arm of D9;
the strict-profile R_F <tt>warn</tt> arm of D9; D10; and the mandatory
arm of D11.</t>
          </li>
          <li>
            <t>Early adverse downgrades: the non-mandatory arm of D11, then D13.</t>
          </li>
          <li>
            <t>Claim status: D1, then D2.  These terminals intentionally precede
optional-evidence annotation: an unsigned or unaccepted path does
not gain warning qualifiers that cannot change its trust claim.</t>
          </li>
          <li>
            <t>Runtime insufficiency: D14 handles R_S <tt>stale</tt>; strict profiles
also block R_S <tt>unavailable</tt> and <tt>not-checked</tt>; non-strict profiles
return an annotated caution for <tt>not-checked</tt>.</t>
          </li>
          <li>
            <t>Annotation accumulation, in order: the non-strict R_F <tt>warn</tt> arm
of D9; R_S <tt>unavailable</tt>; the R_A <tt>warn</tt> arm of D12; R_R <tt>warn</tt>;
and the <tt>reference-testing</tt> profile marker.</t>
          </li>
          <li>
            <t>Risky downgrade: D5.</t>
          </li>
          <li>
            <t>General mandatory-family insufficiency: D14.</t>
          </li>
          <li>
            <t>Totality: D15 catches a tier combination outside the positive-
eligibility sets.</t>
          </li>
          <li>
            <t>Positive terminal: D4.</t>
          </li>
        </ol>
        <t>Adverse evidence (fail or block in any family) preempts the
claim-status outcomes: a payload with no
managed trust claim but a blocking safety verdict is "blocked",
not "unverified".  Insufficiency (any "unknown" refinement or
"stale") gates only the positive path: under the bounded and
testing classes it never converts a claim-status outcome into a
block by itself, and under the strict class mandatory-family
insufficiency blocks (<xref target="profiles"/>).  The positive terminal fires only
for vectors whose full eligibility predicate holds; because that
predicate is self-guarding, D4 is reached only by vectors no earlier
class matched.  The totality class is evaluated immediately before D4,
so that it catches exactly the valid vectors that cannot reach the
positive terminal and every vector still reaches a state.</t>
        <t>D4 repeats D12's warn-annotation condition so that the positive
predicate can be read independently.  Listing strict-profile D9 among
the mandatory blocks does not change its outcome.  The
reference-testing profile (<xref target="profiles"/>) routes invalid managed trust
claims to "unverified" with an invalid-trust-claim cause and profile
warnings, allowing negative fixtures to traverse the pipeline without
invoking block handling; a corpus case pair pins this behavior
(<xref target="impl-status"/>).  Runtime safety has no "not-applicable" tier for the
reason given in <xref target="family-rs"/>.</t>
      </section>
      <section anchor="worked-examples">
        <name>Worked Examples</name>
        <t>Example 1.  A table-tent code carries a valid claim from an issuer
chained to an accepted root; the destination and resolver are within
policy; the safety verdict, freshness, and artifact analysis all
pass.  No rule in classes 1-9 returns; D4 emits "verified issuer"
with no annotations: the positive attention level.</t>
        <t>Example 2.  The same code, but the safety provider reports a
warn-grade verdict for the destination.  No terminal in classes 1-6
fires; class 7 applies D5 and emits "verified issuer destination
risky".  Invariant I1 is
preserved: the warn reduced trust and could never have created it.</t>
        <t>Example 3.  A code carries a valid claim, but controlled resolution
terminates at a host outside the signed destination policy.  R_D is
"fail"; class 2 matches at D6 and emits "blocked" -- despite the
fully valid issuer chain, per invariant I3.</t>
        <t>Example 4.  An appraiser operating under a binding that classifies
conflicting decodable symbols as R_A <tt>block</tt> supplies that tier to
Delta.  Class 2 matches at D10 and emits "blocked" regardless of
profile or signature state.  This document specifies the result of
the tier, not the capture-to-tier classification.</t>
      </section>
    </section>
    <section anchor="profiles">
      <name>Verification Profiles</name>
      <t>Profile identifiers form a closed enumeration owned by this
document; new profiles, and the residual-cause extensions they may
carry (<xref target="families"/>), are defined only by future documents that
update this enumeration.  A verifier <bcp14>MUST</bcp14> reject a profile
identifier outside this enumeration before any
evaluation begins; an unrecognized profile converts a potential
fail-open misconfiguration into a loud failure.</t>
      <t>The decision context has exactly three members:</t>
      <artwork><![CDATA[
P = (semantics_version, profile_id, mandatory_families)
]]></artwork>
      <t><tt>semantics_version</tt> is <tt>qr-trust-delta-v1</tt>.  <tt>profile_id</tt> is one of
the five identifiers below.  <tt>mandatory_families</tt> is an ordered,
duplicate-free subset of the six family names in R, serialized in R
family order.  <tt>strict-online</tt> additionally requires runtime-safety
evidence even when <tt>runtime_safety</tt> is absent from
<tt>mandatory_families</tt>; this is a property of that profile, not an
implicit mutation of P.  An engine <bcp14>MUST</bcp14> reject an unknown member,
unknown token, duplicate, or out-of-order family name before invoking
Delta.</t>
      <t>Clock-skew bounds, grace periods, object lifetimes, URI
normalization, subject identity, overlay classification, and other
evidence-appraisal parameters do not alter Delta directly.  The
appraiser records them in E and uses them when assigning a closed
tier to R.  A future appraisal binding must version those parameters;
placing them in P would incorrectly make Delta re-appraise evidence.</t>
      <dl>
        <dt>strict-online:</dt>
        <dd>
          <t>Full online posture.  The only profile that converts
insufficiency of mandatory-family state into a mandatory block,
and the only profile that requires runtime safety without needing
an m_x marking.</t>
        </dd>
        <dt>bounded-online:</dt>
        <dd>
          <t>Online posture with bounded degradation: warn-grade freshness and
provider unavailability yield explicit annotations rather than
silent positive attention or automatic blocks.</t>
        </dd>
        <dt>bounded-offline:</dt>
        <dd>
          <t>Operates from cached signed state within freshness windows; all
online-only families degrade per the bounded rules.</t>
        </dd>
        <dt>production-trusted:</dt>
        <dd>
          <t>Bounded posture for managed deployments that pre-provision trust
state.</t>
        </dd>
        <dt>reference-testing:</dt>
        <dd>
          <t>Testing posture.  Stamps a testing-posture annotation on every
issuer-verification terminal, so this profile can never render an
unannotated positive; carves invalid managed trust claims out of
D3 as described in <xref target="decision-table"/>.</t>
        </dd>
      </dl>
      <t>The strict-online profile forms the strict behavior class;
reference-testing forms the testing class; and bounded-online,
bounded-offline, and production-trusted form the bounded class.  Mandatory
markings m_x are orthogonal to the profile: deployment policy <bcp14>MAY</bcp14> mark any
family mandatory under any profile, which gates rules D11 and D14.</t>
      <table anchor="tab-profiles">
        <name>Profile behavior matrix</name>
        <thead>
          <tr>
            <th align="left">Profile</th>
            <th align="left">Class</th>
            <th align="left">Warn-grade freshness</th>
            <th align="left">Runtime safety</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">strict-online</td>
            <td align="left">strict</td>
            <td align="left">block (D9)</td>
            <td align="left">mandatory (without m_S)</td>
          </tr>
          <tr>
            <td align="left">bounded-online</td>
            <td align="left">bounded</td>
            <td align="left">continue with warning annotation</td>
            <td align="left">per m_S</td>
          </tr>
          <tr>
            <td align="left">bounded-offline</td>
            <td align="left">bounded</td>
            <td align="left">continue with warning annotation</td>
            <td align="left">per m_S</td>
          </tr>
          <tr>
            <td align="left">production-trusted</td>
            <td align="left">bounded</td>
            <td align="left">continue with warning annotation</td>
            <td align="left">per m_S</td>
          </tr>
          <tr>
            <td align="left">reference-testing</td>
            <td align="left">testing</td>
            <td align="left">continue with warning annotation</td>
            <td align="left">per m_S</td>
          </tr>
        </tbody>
      </table>
      <section anchor="conformance">
        <name>Conformance</name>
        <t>This version defines decision-semantics conformance, not complete
verifier or wire-protocol conformance.  Given R and P as closed above,
a decision engine
claiming conformance <bcp14>MUST</bcp14> implement Delta exactly and <bcp14>MUST</bcp14> satisfy the
invariants of <xref target="invariants"/>.</t>
        <t>A deployed pipeline <bcp14>MAY</bcp14> demand more user attention than Delta for a
given input (for example, blocking where Delta warns, under a declared
stricter posture) but <bcp14>MUST NOT</bcp14> demand less.  Delta agreement is
<bcp14>REQUIRED</bcp14> for any positive state, and a deployment <bcp14>MUST NOT</bcp14> upgrade
Delta's outcome.  Every emitted state <bcp14>MUST</bcp14> carry its residual vector
and evidence set (invariant I6), and profile identifiers outside the
closed enumeration <bcp14>MUST</bcp14> be rejected before evaluation.</t>
        <t>The acquisition of evidence and its appraisal into residual
severities are inputs to this conformance surface; they are not fully
specified by this version.  Likewise, conformance to Delta does not
establish interoperability for the illustrative governance objects or
payload claims of <xref target="gov-objects"/>.  An implementation claiming broader
verifier or wire interoperability needs a future binding and appraisal
specification in addition to this decision-semantic core.</t>
      </section>
      <section anchor="conformance-representation">
        <name>Versioned Conformance Representation</name>
        <t>The following JSON shape is the versioned test-vector representation
for <tt>qr-trust-delta-v1</tt>.  It is not an on-the-wire verifier protocol,
governance object, or QR payload encoding.  JSON object member order
is insignificant <xref target="RFC8259"/>; the example displays residuals
in R family order only for readability.  A decision engine <bcp14>MUST</bcp14> reject
an unknown or missing member rather than ignore it.</t>
        <sourcecode type="json"><![CDATA[
{
  "semantics_version": "qr-trust-delta-v1",
  "profile": "bounded-offline",
  "mandatory_families": [],
  "evidence": {
    "e:issuer": "fixture:C10b:issuer-record",
    "e:issuer-window": "fixture:C10b:issuer-window",
    "e:policy": "fixture:C10b:destination-policy",
    "e:policy-window": "fixture:C10b:policy-window",
    "e:redirect-observation": "fixture:C10b:redirect-observation",
    "e:observation-time": "fixture:C10b:observation-time",
    "e:safety-verdict": "fixture:C10b:safety-verdict",
    "e:safety-window": "fixture:C10b:safety-window",
    "e:capture": "fixture:C10b:capture"
  },
  "residuals": {
    "issuer_chain": {
      "tier": "pass",
      "causes": [],
      "evidence_refs": ["e:issuer"],
      "freshness_ref": "e:issuer-window"
    },
    "destination_policy": {
      "tier": "pass",
      "causes": [],
      "evidence_refs": ["e:policy"],
      "freshness_ref": "e:policy-window"
    },
    "redirect_flow": {
      "tier": "pass",
      "causes": [],
      "evidence_refs": ["e:redirect-observation"],
      "freshness_ref": "e:observation-time"
    },
    "runtime_safety": {
      "tier": "pass",
      "causes": [],
      "evidence_refs": ["e:safety-verdict"],
      "freshness_ref": "e:safety-window"
    },
    "freshness": {
      "tier": "warn",
      "causes": ["object-expired"],
      "evidence_refs": ["e:issuer"],
      "freshness_ref": "e:issuer-window"
    },
    "artifact_integrity": {
      "tier": "pass",
      "causes": [],
      "evidence_refs": ["e:capture"],
      "freshness_ref": null
    }
  },
  "result": {
    "primary_state": "verified-issuer",
    "annotations": ["stale-offline-warning"],
    "attention_level": "warning"
  }
}
]]></sourcecode>
        <t>The top-level and residual-record member sets shown above are exact for
this test-vector version; unknown or missing members are rejected, but
member order is not examined.
Every <tt>evidence_refs</tt> value and non-null <tt>freshness_ref</tt> value <bcp14>MUST</bcp14> name
a member of <tt>evidence</tt>.  Delta does not inspect those values, but their
presence preserves the evidence association at the conformance
boundary.</t>
        <t>The annotation vocabulary is closed.  A contains only
<tt>artifact-warning</tt>, <tt>stale-offline-warning</tt>,
<tt>limited-runtime-safety-visibility</tt>, <tt>redirect-variation-warning</tt>,
<tt>invalid-trust-claim-warning</tt>, <tt>policy-profile-warning</tt>, and
<tt>incomplete-verification-warning</tt>, in the order imposed by the
evaluation rules.  A conforming engine rejects an unknown or duplicate
annotation.  L is derived exactly: <tt>blocked</tt> maps to <tt>block</tt>;
<tt>signed-unaccepted-issuer</tt>, <tt>verified-issuer-destination-risky</tt>, or any
annotated result maps to <tt>warning</tt>; unannotated <tt>unverified</tt> maps to
<tt>neutral</tt>; and unannotated <tt>verified-issuer</tt> maps to <tt>positive</tt>.</t>
        <t>Diagnostic reason codes <bcp14>MAY</bcp14> accompany the result, but they are not an
output of Delta and <bcp14>MUST NOT</bcp14> change S, A, or L.  D0 is encoded as a
separate capture outcome and <bcp14>MUST NOT</bcp14> be serialized as
<tt>result.primary_state</tt>.  The example above is the C10b decision class
from the public corpus; the corpus remains the machine-checkable source
of examples and expected outcomes.</t>
      </section>
    </section>
    <section anchor="gov-objects">
      <name>Requirements for a Future Binding</name>
      <t>Delta conformance does not depend on a governance-object wire format.
A future binding that claims compatibility with this architecture needs
representations for a root trust program manifest, delegated operator
manifest, issuer record, destination policy, status event or runtime-
safety verdict, and verifier cache entry.  The capitalized requirements
in this section apply to that later binding, not to conformance with the
decision semantics in this document.</t>
      <t>The binding must close member types, canonical payloads, signature
coverage, identifier and time grammars, algorithms, key discovery,
error handling, media types, retrieval, and test vectors.  Every signed
governance object needs an object type, schema version, issuer, subject,
issuance and validity times, sequence number, and previous-sequence
link.  A JSON binding must decide whether to require I-JSON <xref target="RFC7493"/>
and the JSON Canonicalization Scheme <xref target="RFC8785"/>; a CBOR binding must
define its deterministic encoding.  Either binding must reject duplicate
or invalid members, pin sequence-number ranges, and publish canonical
test vectors.</t>
      <section anchor="canonicalization-and-signature-coverage">
        <name>Canonicalization and Signature Coverage</name>
        <t>The semantic requirement is identity of the canonical application
payload within a selected binding, not identity of signatures across
formats.  A future binding <bcp14>MUST</bcp14> select and completely profile one
primary envelope.  A JWS binding needs to define the JWS serialization,
protected <tt>alg</tt> and <tt>kid</tt> processing, key discovery and representation,
allowed algorithms, critical-header behavior, detached-payload rules,
and media type using <xref target="RFC7515"/>, <xref target="RFC7517"/>, and <xref target="RFC8725"/>.  A COSE
binding needs the corresponding COSE structure, protected headers,
algorithm and key identifiers, external additional authenticated data,
detached-payload rules, and media type using <xref target="RFC9052"/> and
<xref target="RFC9053"/>.</t>
        <t>JWS and COSE <bcp14>MUST NOT</bcp14> be treated as signing the same byte string.  JWS
signs its JWS Signing Input; COSE signs its <tt>Sig_structure</tt>.  If two
bindings represent the same semantic object, they can require the same
canonical application payload octets, but their envelope-specific
signature inputs and signature values differ.  Within one selected
binding, embedded and detached presentations must preserve the exact
application payload octets and every security-affecting parameter must
be integrity protected.</t>
        <t>A future binding <bcp14>MUST</bcp14> reject an object whose application payload,
envelope, sequence, or validity window cannot be checked under that
binding's deterministic rules.  This -00 does not define a generic raw
signature field beside JOSE or COSE.</t>
      </section>
      <section anchor="object-types">
        <name>Object Types</name>
        <dl>
          <dt>Root trust program manifest:</dt>
          <dd>
            <t>Defines the trust anchor: root public keys, the accepted
signature-algorithm set for the root's subtree, the delegation
policy (allowed operator types, maximum delegation depth),
recognized assurance tiers, and status distribution points.  A
separate future SCITT application binding can make selected root or
governance statements transparent; a generic log field is not part
of this template.  Verifiers <bcp14>MUST</bcp14> reject a
signature algorithm outside the root's declared set; algorithm
rotation and post-quantum migration are manifest updates under the
existing sequence and validity machinery, with Ed25519 <xref target="RFC8032"/>
as the illustrative baseline.  A root manifest defines the rules
under which subordinate authorities can exist, not merely a key
list.</t>
          </dd>
          <dt>Delegated operator manifest:</dt>
          <dd>
            <t>Binds an operator to the root's delegation policy and scopes what
the operator may issue.</t>
          </dd>
          <dt>Issuer record:</dt>
          <dd>
            <t>Binds a specific issuer to keys, assurance attributes, and allowed
policy scope.</t>
          </dd>
          <dt>Destination policy object:</dt>
          <dd>
            <t>Defines authorized destinations and resolver behavior.  The
policy <bcp14>MUST</bcp14> bind both the first-hop resolver and the final
destination; otherwise a trusted-looking short URL can conceal an
untrusted final destination.  An illustrative template:</t>
          </dd>
        </dl>
        <sourcecode type="json"><![CDATA[
{
  "object_type": "destination_policy",
  "policy_id": "policy:restaurant-12345:v3",
  "root_id": "qrtrust.example.root",
  "operator_id": "merchant-platform.example",
  "issuer_id": "restaurant-12345",
  "allowed_final_destinations": [
    { "scheme": "https",
      "host": "order.restaurant.example",
      "path_prefix": "/qr/" }
  ],
  "allowed_resolvers": [
    { "scheme": "https",
      "host": "qr.merchant-platform.example",
      "path_prefix": "/r/restaurant-12345/" }
  ],
  "allowed_redirect_hosts": [
    "qr.merchant-platform.example",
    "order.restaurant.example"
  ],
  "max_redirect_depth": 3,
  "prohibit_nested_shorteners": true,
  "require_https": true,
  "runtime_safety_required": true,
  "runtime_safety_ttl_seconds": 300
}
]]></sourcecode>
        <dl>
          <dt>Status event and runtime-safety verdict:</dt>
          <dd>
            <t>Updates issuer, key, policy, or destination state, or provides a
time-bounded risk verdict for a resolver or final destination.
A status event <bcp14>MUST</bcp14> be signed by a key on the subject's delegation
path at or above the subject's parent, so that a subject whose
only key is compromised can still be revoked from above.  A status
event <bcp14>MUST</bcp14> carry an expiry no later than its issuance time plus
the profile's maximum status-event lifetime, and its absence <bcp14>MUST
NOT</bcp14> silently preserve positive trust when policy requires fresh
status (invariants I4 and I7).  In a stream chained by
previous_sequence, an observed gap is not a pass condition: it
yields the sequence-gap cause in R_F at tier <tt>warn</tt> only while a
declared appraisal grace bound remains, and <tt>block</tt> otherwise,
since state continuity can no longer be shown.</t>
          </dd>
          <dt>Verifier cache entry:</dt>
          <dd>
            <t>Records the local state used during scan-time validation: the
exact source artifacts, hashes, sequence numbers, freshness
windows, and verification profile used to compute the decision
state.
Without this record, later review cannot distinguish a correct
warning from a stale positive result.</t>
          </dd>
        </dl>
      </section>
      <section anchor="payload-claim">
        <name>Payload Trust Claim</name>
        <t>The managed trust claim is the payload-side counterpart of the
governance objects.  A future binding needs at least these semantics:</t>
        <ul spacing="normal">
          <li>
            <t>The claim identifies the issuing chain (root, operator, and issuer
identifiers) and the signing key (key_id).</t>
          </li>
          <li>
            <t>The claim binds the exact destination carried in the payload,
under the future binding's closed normalization profile, so that
claim and payload cannot diverge.</t>
          </li>
          <li>
            <t>The claim is signed under a key bound by the issuer's record, with
the selected envelope and application-payload rules of
<xref target="gov-objects"/>.</t>
          </li>
          <li>
            <t>The claim can be embedded in the payload or detached (retrieved
via a reference carried in the payload).  Within the selected
binding, a verifier <bcp14>MUST NOT</bcp14> accept a detached claim unless it
preserves the exact signed application payload octets and protected
parameters required by that envelope.  Detached-claim
retrieval is a pre-verification network fetch with the privacy
properties of controlled resolution (<xref target="privacy"/>); embedded
claims are <bcp14>RECOMMENDED</bcp14> where payload capacity allows.</t>
          </li>
        </ul>
        <t>Payload size in QR symbols is constrained, so compact encodings are
expected.  The later binding must measure this constraint before
choosing its carrier, application encoding, and envelope; this -00
does not select them.</t>
      </section>
    </section>
    <section anchor="algorithm">
      <name>Verification Algorithm</name>
      <t>An implementation can evaluate a scan using the following eleven-step
pipeline.  The pipeline is informative: steps 1 through 9 illustrate
evidence acquisition and appraisal, step 10 invokes the normative
decision procedure, and step 11 emits its result.  Decision-semantics
conformance is defined by <xref target="model"/>, <xref target="invariants"/>,
<xref target="decision-states"/>, <xref target="decision-table"/>, <xref target="profiles"/>, and the
conformance clause above, not by reproducing this pipeline:</t>
      <ol spacing="normal" type="1"><li>
          <t>Decode the captured artifact safely, without dereferencing
anything; on failure, emit the D0 unreadable capture outcome.</t>
        </li>
        <li>
          <t>Parse the payload and extract the destination and any managed
trust claim (embedded or by reference).</t>
        </li>
        <li>
          <t>Under the selected appraisal profile recorded in E, normalize the
HTTP(S) destination's scheme, host, port, path, query, and
internationalized-domain form.  This document does not pin an
interoperable normalization profile; see <xref target="normalization"/>.</t>
        </li>
        <li>
          <t>Evaluate R_I: claim signature, issuer record, delegation path,
root acceptance, status.</t>
        </li>
        <li>
          <t>Evaluate R_D: normalized destination and resolver against the
signed destination policy.</t>
        </li>
        <li>
          <t>Evaluate R_R: in trusted mode only, controlled resolution of the
redirect chain in an isolated environment (<xref target="operational"/>).
Outside trusted mode no resolution is performed and R_R has tier
<tt>not-applicable</tt> with an empty cause list.</t>
        </li>
        <li>
          <t>Evaluate R_S: obtain or consult the runtime-safety verdict for
the final destination and resolver.</t>
        </li>
        <li>
          <t>Evaluate R_F: validity windows, sequences, and clock skew for
every consulted object (verdict freshness was handled in step 7).</t>
        </li>
        <li>
          <t>Evaluate R_A: capture-side artifact analysis.  If analysis is
unavailable, the appraisal binding assigns one permitted R_A tier
and carries cause <tt>analysis-unavailable</tt>; Delta does not invent an
additional unknown tier.</t>
        </li>
        <li>
          <t>Apply the decision procedure Delta of <xref target="decision-table"/> under
the active profile.</t>
        </li>
        <li>
          <t>Emit (S, A, L, R, E): the state, ordered annotations, derived
attention level, residual vector, and evidence set.</t>
        </li>
      </ol>
      <t>An illustrative emitted result for a destination-policy block:</t>
      <sourcecode type="json"><![CDATA[
{
  "state": "blocked",
  "profile": "strict-online",
  "issuer": {
    "root_id": "qrtrust.example.root",
    "operator_id": "merchant-platform.example",
    "issuer_id": "restaurant-12345",
    "assurance_tier": "verified_business"
  },
  "residuals": {
    "issuer_chain": "pass",
    "destination_policy": "fail",
    "redirect_flow": "pass",
    "runtime_safety": "pass",
    "freshness": "pass",
    "artifact_integrity": "pass"
  },
  "reasons": ["destination-not-authorized"],
  "user_message": "Destination not authorized. Do not continue."
}
]]></sourcecode>
      <section anchor="normalization">
        <name>Destination Normalization and Matching</name>
        <t>Step 3 cannot be an interoperable evidence-appraisal step until a
future binding pins one closed normalization and policy-matching
profile.  That binding needs to specify, at minimum: accepted schemes;
default-port handling; userinfo rejection; dot-segment processing;
percent-encoding and UTF-8 failure behavior; IDN version and mapping;
empty and trailing paths; fragment treatment; query separators, blank
values, duplicate keys, key/value decoding, and ordering; path-segment
boundary rules; and the residual tier produced by every parse or
normalization failure.</t>
        <t>The present implementation illustrates converting scheme and host to lowercase,
removing default ports, resolving dot-segments, normalizing
percent-encoding under <xref target="RFC3986"/>, rejecting userinfo, exact host
comparison, and segment-aligned path-prefix comparison.  Those choices
do not become protocol requirements merely because one implementation
uses them.  Until a future binding closes the list above and publishes
matching test vectors, an implementation <bcp14>MUST NOT</bcp14> claim URI-policy or
wire interoperability from conformance to Delta alone.  Its appraiser
records the selected normalization profile and parameters in E before
assigning R_D.</t>
        <t>These rules compare URI components; they do not resolve the host or
fetch the resource.  Controlled redirect resolution belongs to R_R,
runtime observations belong to R_S, and neither changes the meaning
of an R_D pass into a DNS, hosting, content, or navigation-integrity
claim.</t>
      </section>
    </section>
    <section anchor="operational">
      <name>Operational Considerations</name>
      <dl>
        <dt>Resolver sandboxing:</dt>
        <dd>
          <t>Controlled resolution (step 6) <bcp14>MUST</bcp14> run in an isolated
environment.  Its HTTP client sends no user cookies, authorization
credentials, referrer, client certificates, or user identifiers;
follows only the deployment's bounded HTTP(S) policy; and enforces
strict time, byte, redirect-depth, concurrency, and rate budgets.
Controlled resolution necessarily exposes the requested URL to its
destination and is a network action with privacy consequences
(<xref target="privacy"/>).</t>
        </dd>
        <dt>Trusted caches:</dt>
        <dd>
          <t>Verifier caches hold only signed artifacts, verified before use,
in protected state stores.  Cache entries record full provenance
(<xref target="gov-objects"/>).  A cache the verifier cannot re-verify yields
cache-unverifiable in R_F, never silent reuse.</t>
        </dd>
        <dt>Offline operation:</dt>
        <dd>
          <t>bounded-offline supports scan-time decisions from pre-fetched
signed state within freshness windows.  Expiry maps to R_F <tt>warn</tt>
only inside a declared appraisal grace bound and to <tt>block</tt>
otherwise; offline operation never extends a validity window.</t>
        </dd>
        <dt>Degraded providers:</dt>
        <dd>
          <t>When a runtime-safety provider is unreachable or times out, R_S
is "unavailable" and the profile rules of <xref target="family-rs"/> apply.
When multiple providers disagree, the verifier records
provider-disagreement and <bcp14>MUST NOT</bcp14> resolve the disagreement in
favor of trust (invariant I7).</t>
        </dd>
        <dt>Decision lifetime and navigation binding:</dt>
        <dd>
          <t>The outputs (S, A, L, R, E) are valid as of the evaluation time t
only.
It is <bcp14>RECOMMENDED</bcp14> that navigation bind to the outcome of
controlled resolution -- navigating to the observed final URL
rather than re-dereferencing the original payload -- or that the
verifier re-evaluate on tap when more than a profile-defined
bound has elapsed since t.  Re-dereferencing lets a resolver
serve a different chain than the one evaluated; this residual
divergence (a cloaking channel, <xref target="privacy"/>) cannot be fully
closed and is named here rather than hidden.</t>
        </dd>
      </dl>
    </section>
    <section anchor="privacy">
      <name>Privacy Considerations</name>
      <t>The verifier sees every code a user scans; a careless design turns a
safety mechanism into a tracking mechanism.  Deployments <bcp14>SHOULD</bcp14> prefer,
in order: local verification against pre-fetched signed state; batch
status distribution that is independent of an individual scan; and
only then bounded, minimized per-scan queries.  Per-scan network
acquisition <bcp14>MUST</bcp14> be an explicit profile behavior disclosed to the user
or deployment operator, never a hidden default.  Scan-history click
analytics are not required by this document, and safety processing
<bcp14>SHOULD</bcp14> be separated from tracking or analytics.</t>
      <t>The surveillance, correlation, and identification concerns of
<xref target="RFC6973"/> apply to every network interaction this document
introduces: status retrieval, runtime-safety queries, controlled
resolution, and detached-claim retrieval.  Deployments <bcp14>SHOULD</bcp14>
evaluate their design against that framework.</t>
      <t>Each network action has a different minimum disclosure:</t>
      <ul spacing="normal">
        <li>
          <t>Status retrieval <bcp14>SHOULD</bcp14> request a signed batch, epoch, or source
update without sending the scanned destination, code identifier, or
scan time.  The result is cached and verified locally.</t>
        </li>
        <li>
          <t>A runtime-safety query sends only the granularity the provider's
declared contract requires.  Fragment components are never sent;
path or query components are omitted unless the service actually
evaluates them.  Before a query, bearer tokens and other user
secrets are removed or the query is skipped.  The deployed profile
<bcp14>MUST</bcp14> disclose whether it sends an origin, host, path, or query.</t>
        </li>
        <li>
          <t>Controlled resolution needs the target URL to observe its redirect
behavior and therefore exposes that URL to the destination and
intermediaries.  The isolated client sends none of the ambient user
state prohibited in <xref target="operational"/>, and <bcp14>MUST NOT</bcp14> forward credentials
learned from another hop.  Full hop URLs exist only transiently for
appraisal and do not cross the logging boundary.  Because a path or
query can itself contain a capability token, deployments <bcp14>MUST</bcp14>
disclose this pre-navigation disclosure and define when controlled
resolution is skipped for sensitive links.  A skipped required
observation yields R_R <tt>unavailable</tt> with
<tt>resolution-unavailable</tt>; it does not silently pass.</t>
        </li>
        <li>
          <t>Detached-claim retrieval sends the exact claim-reference URL to
issuer-controlled infrastructure before verification.  It uses no
user cookies, credentials, referrer, or ambient identifiers.  A
unique or per-code reference remains a tracking identifier even when
relayed, so embedded claims are <bcp14>RECOMMENDED</bcp14> where capacity permits
and the behavior <bcp14>MUST</bcp14> be disclosed.</t>
        </li>
      </ul>
      <t>A shared proxy can hide the user's network address from a destination,
but it transfers visibility and availability trust to the proxy.  The
proxy can correlate users, destinations, claim references, and timing;
it does not anonymize a unique URL or destination identifier.  A
deployment that uses a proxy <bcp14>MUST</bcp14> disclose that trust transfer and
apply the same minimization and retention rules at the proxy.</t>
      <t>Capture analysis is transient by default.  Raw images, video frames,
EXIF, physical surroundings, document contents, full URLs, query
strings, response bodies, and bearer credentials <bcp14>MUST NOT</bcp14> be retained
merely to satisfy invariant I6.  After appraisal, the default retained
record is P, the six residual records, <tt>(S,A,L)</tt>, evaluation time, the
appraisal implementation and rule versions, signed-object identifiers,
content digests and sequence/validity facts, and opaque references
needed to locate an authorized protected source.  That record is
sufficient to replay Delta without retaining the user's physical
context or re-running network acquisition.</t>
      <t>When a deployment has a documented need to retain a sensitive source
artifact for re-appraisal, it <bcp14>MUST</bcp14> strip unrelated metadata, enforce
per-record size and retention limits, encrypt the artifact at rest,
restrict access, define deletion behavior including derived exports
and backups, and disclose the exception.  Local storage alone is not a
security control.</t>
      <t>Logs and exports carry derived tiers, causes, and trace-scoped random
opaque identifiers, not raw captures or URLs.  A plain digest of a
guessable URL is not adequate redaction because it permits offline
confirmation.  If an explicitly justified use requires cross-trace
correlation, the identifier <bcp14>MUST</bcp14> use a keyed construction with access
control and key rotation; otherwise correlation scope ends with the
trace.</t>
      <t>A single resolution vantage cannot reliably observe destinations
that discriminate by geography or user agent; multi-vantage
resolution reduces but does not eliminate this limit and increases the
number of parties that observe the request (<xref target="security"/>).</t>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>This entire document specifies security behavior; this section
addresses the threat model and residual risks.  The verifier
operates under these assumptions: accepted roots are chosen by local
policy; the verifier validates signed artifacts correctly; the
verifier's clock is within the appraisal profile's permitted skew; the
selected envelope and normalization rules are applied consistently;
and local state stores are protected.</t>
      <t>The attacker can: print, replace, or overlay physical artifacts
(answered by R_A and D10); sign payloads under self-chosen keys
(D2, I1, I2); enroll under an accepted root, subject to that root's
vetting (I3, D5, D8, revocation via D3); change a payload URL or
redirect chain after issuance (R_D, R_R, D6, D7); change DNS,
hosting, or content behind an unchanged authorized URL (outside R_D,
with only bounded R_S coverage); serve the resolution vantage different
content than victims see (cloaking; <xref target="privacy"/> and the
residual-risk list below); and interfere with the network path to
status and safety providers -- delaying, blocking, or replaying
signed state but not forging signatures (R_F, I4, I7, D9).  A
network attacker who can only replay or suppress already signed state
gains at most the declared appraisal grace window: expiry maps R_F to
<tt>warn</tt> inside that bound and <tt>block</tt> after it, and rule D9 never lets
suppression preserve an unannotated positive.  An accepted malicious
signer is stronger and can issue fresh state; the split-view trace
below treats that case separately.  Each
vignette below pairs one of these capabilities with the answering
semantics.</t>
      <dl>
        <dt>Malicious issuer enrollment:</dt>
        <dd>
          <t>An attacker enrolls under a root and issues signed codes for
malicious destinations.  Enrollment vetting is a governance
problem outside this document, but the semantics bound the damage:
destination policies bind what the issuer may point to (I3),
runtime safety can downgrade live abuse (D5, D8), and status
events revoke (D3).</t>
        </dd>
        <dt>Unknown signed issuer:</dt>
        <dd>
          <t>An attacker signs payloads under a self-chosen key hoping the
signature icon itself creates trust.  The semantics assign this
the "signed unaccepted issuer" state (D2), whose attention level
is warning precisely because a bare signature indicator invites
misplaced trust, and invariants I1 and I2 prevent any upgrade.</t>
        </dd>
        <dt>Destination drift:</dt>
        <dd>
          <t>A once-legitimate payload is changed to carry a URL outside its
issuer's current signed policy, or the issuer narrows that policy.
R_D and R_F detect that URL-or-policy mismatch at scan time.  If
DNS, hosting control, or content changes behind the same authorized
URL, R_D still passes: current runtime-safety evidence may downgrade
the result, but this document provides no continuity or content-
integrity guarantee for that same-URL case.</t>
        </dd>
        <dt>Resolver and redirect abuse:</dt>
        <dd>
          <t>Shorteners, open redirects, and nested resolution hide the final
destination.  Policies bind the first-hop resolver and the final
destination, and D7 blocks depth and intermediary abuse observed
under controlled resolution.</t>
        </dd>
        <dt>Compromised legitimate destination:</dt>
        <dd>
          <t>A destination inside policy is compromised after issuance.
Runtime-safety verdicts are the mechanism designed for this
window (D5, D8); their imperfection is a stated limitation, and
I1 keeps them one-directional.</t>
        </dd>
        <dt>Stale trust state:</dt>
        <dd>
          <t>An attacker exploits cached positive state after revocation.
Against replay or suppression of fixed signed objects, freshness
rules (R_F, D9, I4) bound the exposure window to the validity and
appraisal-grace rules.  They do not bound a malicious authorized
signer that keeps issuing fresh objects.</t>
        </dd>
        <dt>Artifact tampering:</dt>
        <dd>
          <t>Physical overlays, added symbols, or manipulated print artifacts
substitute the attacker's payload.  R_A supplies capture-side
evidence; D10 blocks only when an appraisal binding has assigned
R_A <tt>block</tt>, while lower tiers annotate or downgrade.  This
document does not label a visual pattern unambiguous without that
binding.</t>
        </dd>
        <dt>Trust-infrastructure compromise:</dt>
        <dd>
          <t>A compromised root, operator, or issuer key is the
highest-impact threat.  The semantics support rotation and
revocation through status events and sequence rules, and root
isolation (I5) confines cross-root blast radius; incident
response and root-scoped distrust remain governance obligations.
Rotation alone does not terminate a compromised superseded key:
the payload's <tt>issued_at</tt> is asserted by the same key that signs
the payload, so the holder can sign after rotation while claiming
an earlier time inside the retired key's window.  Without an
independent issuance-time witness (for example, a timestamp
authority, transparency record, or countersigned issuance record),
the verifier cannot distinguish that artifact from one genuinely
issued before rotation.  Suspected compromise therefore requires
revocation; rotation is routine lifecycle hygiene, not an incident-
response substitute.</t>
        </dd>
        <dt>Malicious accepted root:</dt>
        <dd>
          <t>Accepting a root is a full trust delegation for that root's
subtree.  A malicious or coerced accepted root can mint issuers,
policies, and status events at will, and the semantics cannot
detect this from inside the subtree: the model is defeated for
everything under that root.  Acceptance is therefore a local
policy decision rather than a global list.  I5 confines every root to
its own subtree, and a later binding can use SCITT receipts as
equivocation evidence (<xref target="gov-objects"/>).  Expiry
does not contain this attacker: the root can refresh both sides of a
split view before each window closes.  Recovery requires the local
trust policy to distrust or remove that root and distribute the
change to affected verifiers.  Transparency can expose evidence for
that decision but does not make it automatically.</t>
        </dd>
      </dl>
      <section anchor="hostile-split-view-trace">
        <name>Hostile Split-View Trace</name>
        <t>This trace distinguishes fixed-object replay from continuous fresh
equivocation by an accepted root:</t>
        <ol spacing="normal" type="1"><li>
            <t>At t0, verifiers A and B accept root K under local policy.</t>
          </li>
          <li>
            <t>At t1, K signs issuer state X for A and contradictory state Y for B.
Both objects identify the same subject and are valid until t1+H.</t>
          </li>
          <li>
            <t>Before t1+H, K signs fresh successors X2 and Y2 with later sequence
values inside each view.  K repeats this before every expiry.</t>
          </li>
          <li>
            <t>A and B each observe a fresh, internally monotonic history, so Delta
can continue to accept each local R_I input.  Even if one verifier
later obtains both same-root views, D13 <bcp14>MUST NOT</bcp14> be used: its
<tt>cross-root-contradiction</tt> tier concerns different accepted roots.
This version supplies no automatic same-root arbitration; the
evidence instead informs local root-distrust policy.</t>
          </li>
          <li>
            <t>If statements are registered through a future SCITT binding and a
monitor compares the histories, the receipts can prove that
contradictory statements were registered.  That evidence does not
revoke K or change Delta by itself.</t>
          </li>
          <li>
            <t>At t2, local policy removes K and distributes that trust-anchor
change.  Only then do affected verifiers stop accepting newly signed
descendants of K.  A verifier that never receives the local policy
change can remain deceived.</t>
          </li>
        </ol>
        <t>If K stops signing after step 2, expiry plus R_F does bound the fixed
objects.  The unconditional time-bound claim fails specifically at
step 3, where an authorized malicious signer creates fresh evidence.</t>
        <dl>
          <dt>Resource exhaustion:</dt>
          <dd>
            <t>Oversized objects, deep chains, and floods of governance state
can exhaust a verifier.  Verifiers <bcp14>SHOULD</bcp14> enforce size, count,
and cache quotas; exceeding a quota yields "unavailable" (or
cache-unverifiable in R_F) and follows the insufficiency rules --
degraded verification is never fail-open (I7).</t>
          </dd>
        </dl>
        <t>Residual risks include cloaking against the resolution vantage
(<xref target="privacy"/>), probabilistic artifact analysis, imperfect
runtime-safety providers, and every institutional assumption listed
in <xref target="scope-and-non-goals"/>.  The invariants are stated for
machine-checkable review, but this document does not claim a
mechanized proof of them.</t>
      </section>
      <section anchor="downgrade">
        <name>Downgrade to Unverified</name>
        <t>The attack this document's own motivating examples begin with -- an
unsigned sticker covering a signed table tent -- lands in the
neutral "unverified" state, not in a warning or block.  This is a
structural limit shared by every opt-in trust marking from EV
certificates to BIMI: the absence of a claim is unauthenticatable,
and no verifier can prove that a claim should have been present.
The semantics guarantee the downgrade terminates in a bounded
neutral state rather than a spoofable positive one (I1, I2), and
capture-side evidence can catch the physical form of the attack
  (R_A: overlay detection and conflicting symbols; D10 when appraisal
  assigns <tt>block</tt>).  Deployments supply the remaining countermeasures:</t>
        <ul spacing="normal">
          <li>
            <t>In open consumer scanning, the defense is the salience of the
neutral state itself.  User-interface treatments <bcp14>SHOULD</bcp14> make
"unverified" visibly distinct from every positive and
issuer-verification state, and the cited scanner-interface studies
(<xref target="KOWALEWSKI"/>, <xref target="SEQR"/>) document how weak unaided recognition
is -- salience is a measured requirement, not a nicety.</t>
          </li>
          <li>
            <t>Deployments that control their surfaces (enterprise gateways,
document workflows, venue-managed placements) <bcp14>SHOULD</bcp14> declare a
signed-only posture using the stricter-posture allowance of the
conformance clause (<xref target="profiles"/>): treat "unverified" as blocked
where every legitimate code is known to carry a claim.  There the
downgrade attack converts to a hard failure.  A future appraisal
binding can additionally define a signed-workflow policy that
assigns R_A <tt>block</tt> for specified tampering evidence; only then does
D10 turn that classified evidence into a block.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
      <t>If this work is adopted and progressed, registries could be
considered for residual cause identifiers (<xref target="families"/>), decision
states (<xref target="decision-states"/>), verification profile identifiers
(<xref target="profiles"/>), and governance object types (<xref target="gov-objects"/>).
Extensions to the profile enumeration, residual causes, decision
states, or object types are expected to arrive via future
documents, potentially creating those registries.  No registry is
requested at this time.</t>
    </section>
    <section anchor="impl-status">
      <name>Implementation Status</name>
      <t>This section records the status of a known implementation at the
time of posting, on the model of <xref target="RFC7942"/>; it is to be removed
before any publication as an RFC.</t>
      <t>The claim-to-artifact map separates evidence produced by different
snapshots.  Public paths are pinned to immutable Git commits; the private
row records implementation activity but supplies no independent
reproducibility claim.</t>
      <artwork><![CDATA[
Claim                 Reference           Availability
Decision evaluation   trust-residuals-v1  public
Projection and policy 78b86               public
Candidate and E1/E2   c994911             private
]]></artwork>
      <t><strong>Historical decision-core evaluation.</strong>  Public tag
<tt>trust-residuals-v1</tt>, commit
<eref target="https://github.com/unixtime/qr-trust-poc/tree/35c5bf9ed07e753f95ed23bf9bf8c7603af9980a">35c5bf9</eref>,
contains the
<eref target="https://github.com/unixtime/qr-trust-poc/blob/35c5bf9ed07e753f95ed23bf9bf8c7603af9980a/backend/app/services/trust_residuals_decision.py">decision core</eref>,
<eref target="https://github.com/unixtime/qr-trust-poc/blob/35c5bf9ed07e753f95ed23bf9bf8c7603af9980a/scripts/trust_residuals_evaluation.py">evaluation</eref>,
<eref target="https://github.com/unixtime/qr-trust-poc/blob/35c5bf9ed07e753f95ed23bf9bf8c7603af9980a/docs/public/evaluation/trust_residuals_corpus.v1.json">corpus</eref>,
and
<eref target="https://github.com/unixtime/qr-trust-poc/blob/35c5bf9ed07e753f95ed23bf9bf8c7603af9980a/docs/public/evaluation/trust_residuals_results.v1.json">results</eref>.
The 37-case corpus reports no semantic or residual mismatch, unsafe
positive, or attention undercut.  A modeled sweep compares 6,912 residual
vectors under five profiles and all 64 mandatory-family subsets, producing
2,212,160 comparisons with no disagreement against a separately encoded
decision table.  These results do not measure field effectiveness or
independent producer/consumer interoperability, and they predate the
current D0 result shape.</t>
      <t><strong>Public trust projection and URL-policy implementation.</strong>  Public commit
<eref target="https://github.com/unixtime/qr-trust-poc/tree/78b86fe90ac812573eaed56ec9e44e70836bfbf9">78b86</eref>:
<eref target="https://github.com/unixtime/qr-trust-poc/blob/78b86fe90ac812573eaed56ec9e44e70836bfbf9/backend/app/services/trust_projection.py">trust projection</eref>,
<eref target="https://github.com/unixtime/qr-trust-poc/blob/78b86fe90ac812573eaed56ec9e44e70836bfbf9/backend/app/services/scanner_trust_store.py">scanner trust store</eref>,
<eref target="https://github.com/unixtime/qr-trust-poc/blob/78b86fe90ac812573eaed56ec9e44e70836bfbf9/backend/app/services/payload_revalidation_poc.py">payload policy</eref>,
and
<eref target="https://github.com/unixtime/qr-trust-poc/blob/78b86fe90ac812573eaed56ec9e44e70836bfbf9/backend/app/services/redirect_policy_poc.py">redirect policy</eref>.
These files support inspection of the projection and pure URL-policy logic.
The commit predates the E1/E2 lifecycle record and cannot reproduce those
experiments.</t>
      <t><strong>Current candidate semantics, response contract, and E1/E2 record.</strong>  The
private/pre-publication Git object is
<tt>c994-911e-4985-0a44-31f1-b776-695d-9201-9b9c-fa04</tt>, with display hyphens
removed when resolving it.  Its current decision core, corpus, results,
projection, trust store, <tt>key_lifecycle_evidence.v1.json</tt>, and lifecycle
experiment program are not publicly retrievable at posting and therefore
provide no independent reproduction claim.  Measured comparisons against
decode-only, HTTPS-only, signature-only, and reputation-only baselines appear
in <xref target="RESIDUALS"/>.</t>
      <t>The private candidate separates unreadable capture as D0, carries the
authoritative result in <tt>model_decision</tt>, and keeps product labels such as
<tt>signed_unknown_issuer</tt> in a compatibility field.  It rejects attention
undercuts, unmapped product states, and corpus cases containing both D0 and
trust-decision result shapes.  The Python response and network schema expose
a closed 29-value subset of the cause identifiers in this document.  The
TypeScript network scanner does not emit <tt>model_decision</tt> and remains outside
this conformance claim.</t>
      <t>The proof-of-concept does not implement a live redirect observer.  A
fixture evaluator models R_R from synthetic <tt>final</tt>, <tt>hops</tt>, and
<tt>nested</tt> values; these are not HTTP observations.  For an enrolled
resolver, the runtime reports R_R as <tt>unavailable</tt> with cause
<tt>resolution-unavailable</tt>, returns product state <tt>unknown</tt>, and disallows
opening.  The R_R evidence covers decision mapping and modeled policy,
not controlled resolution, DNS behavior, or redirect acquisition.</t>
      <t>The Python destination matcher performs only URL-policy logic:
its inputs are the payload URL, verified-domain state, evaluation time,
and policy fixture.  It performs no DNS resolution or resource fetch
and receives no hosting, response-content, or post-navigation evidence.
The reference implementation therefore makes no such claim from an R_D
pass.</t>
      <t>Two local experiments exercise the Postgres-backed trust projection.  In
E1, an artifact verified while its key was active and retired, became
blocked at the <tt>key_status</tt> stage after revocation, and remained blocked
after an operator-observed API restart with Postgres left running.  The
run captured no container identity or restart receipt, so it is not a
machine-verifiable restart attestation or longitudinal field evidence.</t>
      <t>In E2, the experiment program rotated a key and then used its retained
private half to sign a new artifact while self-asserting an <tt>issued_at</tt>
seven days earlier, inside the key window.  The retired-key artifact
verified; the same artifact became blocked after the key was revoked.
This confirms
the limitation described in <xref target="security"/>: the current profile has no
independent issuance-time witness, so rotation does not defend against
a compromised superseded key that backdates a new artifact.  The
selected-field record and source digests are stored in
<tt>docs/public/evaluation/key_lifecycle_evidence.v1.json</tt> at private commit
<tt>c994911</tt>.  E1 and E2 remain operator-run observations until that record is
publicly retrievable; neither public reference in the table contains it.
Full trust-store dumps and private key material are excluded.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC5280">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </reference>
        <reference anchor="RFC6480">
          <front>
            <title>An Infrastructure to Support Secure Internet Routing</title>
            <author fullname="M. Lepinski" initials="M." surname="Lepinski"/>
            <author fullname="S. Kent" initials="S." surname="Kent"/>
            <date month="February" year="2012"/>
            <abstract>
              <t>This document describes an architecture for an infrastructure to support improved security of Internet routing. The foundation of this architecture is a Resource Public Key Infrastructure (RPKI) that represents the allocation hierarchy of IP address space and Autonomous System (AS) numbers; and a distributed repository system for storing and disseminating the data objects that comprise the RPKI, as well as other signed objects necessary for improved routing security. As an initial application of this architecture, the document describes how a legitimate holder of IP address space can explicitly and verifiably authorize one or more ASes to originate routes to that address space. Such verifiable authorizations could be used, for example, to more securely construct BGP route filters. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6480"/>
          <seriesInfo name="DOI" value="10.17487/RFC6480"/>
        </reference>
        <reference anchor="RFC6973">
          <front>
            <title>Privacy Considerations for Internet Protocols</title>
            <author fullname="A. Cooper" initials="A." surname="Cooper"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <author fullname="J. Peterson" initials="J." surname="Peterson"/>
            <author fullname="J. Morris" initials="J." surname="Morris"/>
            <author fullname="M. Hansen" initials="M." surname="Hansen"/>
            <author fullname="R. Smith" initials="R." surname="Smith"/>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document offers guidance for developing privacy considerations for inclusion in protocol specifications. It aims to make designers, implementers, and users of Internet protocols aware of privacy-related design choices. It suggests that whether any individual RFC warrants a specific privacy considerations section will depend on the document's content.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6973"/>
          <seriesInfo name="DOI" value="10.17487/RFC6973"/>
        </reference>
        <reference anchor="RFC7493">
          <front>
            <title>The I-JSON Message Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="March" year="2015"/>
            <abstract>
              <t>I-JSON (short for "Internet JSON") is a restricted profile of JSON designed to maximize interoperability and increase confidence that software can process it successfully with predictable results.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7493"/>
          <seriesInfo name="DOI" value="10.17487/RFC7493"/>
        </reference>
        <reference anchor="RFC7515">
          <front>
            <title>JSON Web Signature (JWS)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Signature (JWS) represents content secured with digital signatures or Message Authentication Codes (MACs) using JSON-based data structures. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and an IANA registry defined by that specification. Related encryption capabilities are described in the separate JSON Web Encryption (JWE) specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7515"/>
          <seriesInfo name="DOI" value="10.17487/RFC7515"/>
        </reference>
        <reference anchor="RFC7517">
          <front>
            <title>JSON Web Key (JWK)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. This specification also defines a JWK Set JSON data structure that represents a set of JWKs. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and IANA registries established by that specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7517"/>
          <seriesInfo name="DOI" value="10.17487/RFC7517"/>
        </reference>
        <reference anchor="RFC7942">
          <front>
            <title>Improving Awareness of Running Code: The Implementation Status Section</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <date month="July" year="2016"/>
            <abstract>
              <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
              <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="205"/>
          <seriesInfo name="RFC" value="7942"/>
          <seriesInfo name="DOI" value="10.17487/RFC7942"/>
        </reference>
        <reference anchor="RFC8032">
          <front>
            <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves. An example implementation and test vectors are provided.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8032"/>
          <seriesInfo name="DOI" value="10.17487/RFC8032"/>
        </reference>
        <reference anchor="RFC8725">
          <front>
            <title>JSON Web Token Best Current Practices</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="D. Hardt" initials="D." surname="Hardt"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>JSON Web Tokens, also known as JWTs, are URL-safe JSON-based security tokens that contain a set of claims that can be signed and/or encrypted. JWTs are being widely used and deployed as a simple security token format in numerous protocols and applications, both in the area of digital identity and in other application areas. This Best Current Practices document updates RFC 7519 to provide actionable guidance leading to secure implementation and deployment of JWTs.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="225"/>
          <seriesInfo name="RFC" value="8725"/>
          <seriesInfo name="DOI" value="10.17487/RFC8725"/>
        </reference>
        <reference anchor="RFC8785">
          <front>
            <title>JSON Canonicalization Scheme (JCS)</title>
            <author fullname="A. Rundgren" initials="A." surname="Rundgren"/>
            <author fullname="B. Jordan" initials="B." surname="Jordan"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <date month="June" year="2020"/>
            <abstract>
              <t>Cryptographic operations like hashing and signing need the data to be expressed in an invariant format so that the operations are reliably repeatable. One way to address this is to create a canonical representation of the data. Canonicalization also permits data to be exchanged in its original form on the "wire" while cryptographic operations performed on the canonicalized counterpart of the data in the producer and consumer endpoints generate consistent results.</t>
              <t>This document describes the JSON Canonicalization Scheme (JCS). This specification defines how to create a canonical representation of JSON data by building on the strict serialization methods for JSON primitives defined by ECMAScript, constraining JSON data to the Internet JSON (I-JSON) subset, and by using deterministic property sorting.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8785"/>
          <seriesInfo name="DOI" value="10.17487/RFC8785"/>
        </reference>
        <reference anchor="RFC9052">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
              <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="96"/>
          <seriesInfo name="RFC" value="9052"/>
          <seriesInfo name="DOI" value="10.17487/RFC9052"/>
        </reference>
        <reference anchor="RFC9053">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Initial Algorithms</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines a set of algorithms that can be used with the CBOR Object Signing and Encryption (COSE) protocol (RFC 9052).</t>
              <t>This document, along with RFC 9052, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9053"/>
          <seriesInfo name="DOI" value="10.17487/RFC9053"/>
        </reference>
        <reference anchor="RFC9334">
          <front>
            <title>Remote ATtestation procedureS (RATS) Architecture</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="D. Thaler" initials="D." surname="Thaler"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="N. Smith" initials="N." surname="Smith"/>
            <author fullname="W. Pan" initials="W." surname="Pan"/>
            <date month="January" year="2023"/>
            <abstract>
              <t>In network protocol exchanges, it is often useful for one end of a communication to know whether the other end is in an intended operating state. This document provides an architectural overview of the entities involved that make such tests possible through the process of generating, conveying, and evaluating evidentiary Claims. It provides a model that is neutral toward processor architectures, the content of Claims, and protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9334"/>
          <seriesInfo name="DOI" value="10.17487/RFC9334"/>
        </reference>
        <reference anchor="RFC9525">
          <front>
            <title>Service Identity in TLS</title>
            <author fullname="P. Saint-Andre" initials="P." surname="Saint-Andre"/>
            <author fullname="R. Salz" initials="R." surname="Salz"/>
            <date month="November" year="2023"/>
            <abstract>
              <t>Many application technologies enable secure communication between two entities by means of Transport Layer Security (TLS) with Internet Public Key Infrastructure using X.509 (PKIX) certificates. This document specifies procedures for representing and verifying the identity of application services in such interactions.</t>
              <t>This document obsoletes RFC 6125.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9525"/>
          <seriesInfo name="DOI" value="10.17487/RFC9525"/>
        </reference>
        <reference anchor="RFC9597">
          <front>
            <title>CBOR Web Token (CWT) Claims in COSE Headers</title>
            <author fullname="T. Looker" initials="T." surname="Looker"/>
            <author fullname="M.B. Jones" initials="M.B." surname="Jones"/>
            <date month="June" year="2024"/>
            <abstract>
              <t>This document describes how to include CBOR Web Token (CWT) claims in the header parameters of any CBOR Object Signing and Encryption (COSE) structure. This functionality helps to facilitate applications that wish to make use of CWT claims in encrypted COSE structures and/or COSE structures featuring detached signatures, while having some of those claims be available before decryption and/or without inspecting the detached payload. Another use case is using CWT claims with payloads that are not CWT Claims Sets, including payloads that are not CBOR at all.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9597"/>
          <seriesInfo name="DOI" value="10.17487/RFC9597"/>
        </reference>
        <reference anchor="RFC9711">
          <front>
            <title>The Entity Attestation Token (EAT)</title>
            <author fullname="L. Lundblade" initials="L." surname="Lundblade"/>
            <author fullname="G. Mandyam" initials="G." surname="Mandyam"/>
            <author fullname="J. O'Donoghue" initials="J." surname="O'Donoghue"/>
            <author fullname="C. Wallace" initials="C." surname="Wallace"/>
            <date month="April" year="2025"/>
            <abstract>
              <t>An Entity Attestation Token (EAT) provides an attested claims set that describes the state and characteristics of an entity, a device such as a smartphone, an Internet of Things (IoT) device, network equipment, or such. This claims set is used by a relying party, server, or service to determine the type and degree of trust placed in the entity.</t>
              <t>An EAT is either a CBOR Web Token (CWT) or a JSON Web Token (JWT) with attestation-oriented claims.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9711"/>
          <seriesInfo name="DOI" value="10.17487/RFC9711"/>
        </reference>
        <reference anchor="RFC9943">
          <front>
            <title>An Architecture for Trustworthy and Transparent Digital Supply Chains</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="A. Delignat-Lavaud" initials="A." surname="Delignat-Lavaud"/>
            <author fullname="C. Fournet" initials="C." surname="Fournet"/>
            <author fullname="Y. Deshpande" initials="Y." surname="Deshpande"/>
            <author fullname="S. Lasker" initials="S." surname="Lasker"/>
            <date month="June" year="2026"/>
            <abstract>
              <t>Traceability in supply chains is a growing security concern. While Verifiable Data Structures (VDSs) have addressed specific issues, such as equivocation over digital certificates, they lack a universal architecture for all supply chains. This document defines such an architecture for single-issuer signed statement transparency. It ensures extensibility and interoperability between different transparency services as well as compliance with various auditing procedures and regulatory requirements.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9943"/>
          <seriesInfo name="DOI" value="10.17487/RFC9943"/>
        </reference>
        <reference anchor="RFC9999">
          <front>
            <title>Remote ATtestation procedureS (RATS) Conceptual Message Wrapper (CMW)</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="N. Smith" initials="N." surname="Smith"/>
            <author fullname="T. Fossati" initials="T." surname="Fossati"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="July" year="2026"/>
            <abstract>
              <t>The conceptual messages introduced by the Remote ATtestation procedureS (RATS) architecture (RFC 9334) are protocol-agnostic data units that are conveyed between RATS roles during RATS interactions. Conceptual messages describe the meaning and function of such data units within RATS data flows without specifying a wire format, encoding, transport mechanism, or processing details. The initial set of conceptual messages is defined in Section 8 of RFC 9334 and includes Evidence, Attestation Results, Endorsements, Reference Values, and Appraisal Policies.</t>
              <t>This document introduces the Conceptual Message Wrapper (CMW) that provides a common structure to encapsulate these messages. It defines a dedicated Concise Binary Object Representation (CBOR) tag, corresponding JSON Web Token (JWT) and CBOR Web Token (CWT) claims, and an X.509 extension.</t>
              <t>Together, these mechanisms allow CMWs to be used in CBOR-based protocols, web APIs using JWTs and CWTs, and PKIX artifacts such as X.509 certificates. Additionally, this document defines media types and CoAP Content-Formats that may be used to identify CMWs when transported over protocols such as HTTP, MIME, and CoAP.</t>
              <t>The goal is to improve the interoperability and flexibility of remote attestation protocols. Introducing a shared message format such as CMW enables consistent support for different attestation message types, enables the evolution of message serialization formats without breaking compatibility, and avoids the need to redefine how messages are handled within each protocol.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9999"/>
          <seriesInfo name="DOI" value="10.17487/RFC9999"/>
        </reference>
        <reference anchor="AR4SI" target="https://datatracker.ietf.org/doc/html/draft-ietf-rats-ar4si-10">
          <front>
            <title>Attestation Results for Secure Interactions</title>
            <author initials="E." surname="Voit" fullname="E. Voit">
              <organization/>
            </author>
            <author initials="H." surname="Birkholz" fullname="H. Birkholz">
              <organization/>
            </author>
            <author initials="T." surname="Hardjono" fullname="T. Hardjono">
              <organization/>
            </author>
            <author initials="T." surname="Fossati" fullname="T. Fossati">
              <organization/>
            </author>
            <author initials="V." surname="Scarlata" fullname="V. Scarlata">
              <organization/>
            </author>
            <date year="2026" month="May"/>
          </front>
          <refcontent>Work in progress</refcontent>
        </reference>
        <reference anchor="VCDM" target="https://www.w3.org/TR/vc-data-model-2.0/">
          <front>
            <title>Verifiable Credentials Data Model v2.0</title>
            <author>
              <organization>W3C</organization>
            </author>
            <date year="2025"/>
          </front>
          <refcontent>W3C Recommendation</refcontent>
        </reference>
        <reference anchor="VCJOSECOSE" target="https://www.w3.org/TR/2025/REC-vc-jose-cose-20250515/">
          <front>
            <title>Securing Verifiable Credentials using JOSE and COSE</title>
            <author>
              <organization>W3C</organization>
            </author>
            <date year="2025"/>
          </front>
          <refcontent>W3C Recommendation</refcontent>
        </reference>
        <reference anchor="VCSTATUS" target="https://www.w3.org/TR/2025/REC-vc-bitstring-status-list-20250515/">
          <front>
            <title>Bitstring Status List v1.0</title>
            <author>
              <organization>W3C</organization>
            </author>
            <date year="2025"/>
          </front>
          <refcontent>W3C Recommendation</refcontent>
        </reference>
        <reference anchor="QRTRUST" target="https://ssrn.com/abstract=6577478">
          <front>
            <title>QR Navigation Security Is Not Primarily a Cryptography Problem: A Trust-Model Framework for Managed Issuer Verification, Destination Binding, and Runtime Safety</title>
            <author initials="H." surname="El-Masri" fullname="Hassan El-Masri">
              <organization/>
            </author>
            <date year="2026"/>
          </front>
          <seriesInfo name="DOI" value="10.2139/ssrn.6577478"/>
          <refcontent>SSRN Working Paper 6577478</refcontent>
        </reference>
        <reference anchor="RESIDUALS" target="https://ssrn.com/abstract=7225699">
          <front>
            <title>Trust Residuals for Navigation QR Codes: Decision Semantics for Issuer, Destination, and Runtime Safety State</title>
            <author initials="H." surname="El-Masri" fullname="Hassan El-Masri">
              <organization/>
            </author>
            <date year="2026"/>
          </front>
          <refcontent>SSRN Working Paper 7225699</refcontent>
        </reference>
        <reference anchor="VIDAS">
          <front>
            <title>QRishing: The Susceptibility of Smartphone Users to QR Code Phishing Attacks</title>
            <author initials="T." surname="Vidas" fullname="T. Vidas">
              <organization/>
            </author>
            <author initials="E." surname="Owusu" fullname="E. Owusu">
              <organization/>
            </author>
            <author initials="S." surname="Wang" fullname="S. Wang">
              <organization/>
            </author>
            <author initials="C." surname="Zeng" fullname="C. Zeng">
              <organization/>
            </author>
            <author initials="L. F." surname="Cranor" fullname="L. F. Cranor">
              <organization/>
            </author>
            <author initials="N." surname="Christin" fullname="N. Christin">
              <organization/>
            </author>
            <date year="2013"/>
          </front>
          <seriesInfo name="DOI" value="10.1007/978-3-642-41320-9_4"/>
          <refcontent>Financial Cryptography and Data Security, LNCS 7862, Springer</refcontent>
        </reference>
        <reference anchor="KOWALEWSKI">
          <front>
            <title>Scanned and Scammed: Insecurity by ObsQRity? Measuring User Susceptibility and Awareness of QR Code-Based Attacks</title>
            <author initials="M." surname="Kowalewski" fullname="M. Kowalewski">
              <organization/>
            </author>
            <author initials="L." surname="Lassak" fullname="L. Lassak">
              <organization/>
            </author>
            <author initials="M." surname="Duermuth" fullname="M. Duermuth">
              <organization/>
            </author>
            <author initials="T." surname="Schnitzler" fullname="T. Schnitzler">
              <organization/>
            </author>
            <date year="2025"/>
          </front>
          <refcontent>34th USENIX Security Symposium, pp. 1415-1434</refcontent>
        </reference>
        <reference anchor="SEQR">
          <front>
            <title>Development, Evaluation, and Implementation of SEQR - a Usable Secure QR Code Scanner</title>
            <author initials="M." surname="Mossano" fullname="M. Mossano">
              <organization/>
            </author>
            <author initials="M. F." surname="Veit" fullname="M. F. Veit">
              <organization/>
            </author>
            <author initials="T." surname="Laenge" fullname="T. Laenge">
              <organization/>
            </author>
            <author initials="B. M." surname="Berens" fullname="B. M. Berens">
              <organization/>
            </author>
            <author initials="F." surname="Sharevski" fullname="F. Sharevski">
              <organization/>
            </author>
            <author initials="M." surname="Volkamer" fullname="M. Volkamer">
              <organization/>
            </author>
            <date year="2026"/>
          </front>
          <seriesInfo name="DOI" value="10.1145/3772318.3793213"/>
          <refcontent>Proceedings of the 2026 CHI Conference on Human Factors in Computing Systems (CHI '26), ACM</refcontent>
        </reference>
        <reference anchor="ISO18004">
          <front>
            <title>Information Technology - Automatic Identification and Data Capture Techniques - QR Code Bar Code Symbology Specification</title>
            <author>
              <organization>ISO/IEC</organization>
            </author>
            <date year="2024"/>
          </front>
          <refcontent>ISO/IEC 18004:2024</refcontent>
        </reference>
      </references>
    </references>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This document distills the decision semantics developed in the
author's companion research papers <xref target="QRTRUST"/> <xref target="RESIDUALS"/>.
ChatGPT, Claude Code, and Codex assisted with code-path inspection,
draft preparation, and adversarial review.  The author selected the
claims, verified the cited sources and implementation evidence, and is
responsible for the content.</t>
    </section>
  </back>
</rfc>
