<?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 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-slutsky-homing-pigeon-v2-01" category="info" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.35.0 -->
  <front>
    <title abbrev="Homing Pigeon v2">Homing Pigeon Message Protocol, Version 2: Determinations, Questions, and Shared Context</title>
    <seriesInfo name="Internet-Draft" value="draft-slutsky-homing-pigeon-v2-01"/>
    <author initials="A." surname="Slutsky" fullname="Andrew Slutsky">
      <organization>Independent</organization>
      <address>
        <email>slutsky5544@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="October" day="30"/>
    <keyword>determination</keyword>
    <keyword>question</keyword>
    <keyword>answer</keyword>
    <keyword>context segment</keyword>
    <abstract>
      <?line 34?>

<t>This document specifies version 2 of the Homing Pigeon message
protocol. Version 2 is an addition to version 1
(draft-slutsky-homing-pigeon-00), not a replacement for it: every version 1
message keeps its meaning, and version 2 adds three messages and one
mechanism on top of the version 1 exchange.</t>
      <t>The additions are a determination message, by which the runner tells
the submitter what it expects a job to do before the job runs; a
question message, by which a runner whose local decision machinery
cannot answer a question itself asks that question instead; an
answer message, by which any enabled holder of the shared secret
replies; and context segments, signed fragments of local state
that travel with these messages and with the version 1 result, so
each side plans with the other's actual state in view.</t>
      <t>Version 2 is backwards compatible. A version 1 runner never sends a
version 2 message and is unaffected by this document. A submitter
that implements this document adapts to the protocol version the
runner supports: faced with a version 1 runner, it submits version 1
jobs and expects version 1 results, exactly as before. There is no
version negotiation and no handshake; the messages carry <tt>v</tt>, as in
version 1, and each side acts on what it receives.</t>
      <t>The deployment that motivates version 2 is the constrained runner: a
small host whose local decision machinery is deliberately
deterministic and carries no language model. Version 1 leaves such a
runner alone with every question its deterministic machinery cannot
answer. Version 2 lets it ask.</t>
    </abstract>
  </front>
  <middle>
    <?line 65?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Version 1's core exchange is two messages: a signed job object and a
signed result object, carried unchanged over any binding. The runner's decisions in version 1 are
local: it verifies the signature and the further admission checks of
its Section 14, forms whatever expectation its configuration gives
it, executes, and reports an exit code and output. The result may
carry the runner's opinion home as the <tt>oracle_opinion</tt> member, but
that opinion is formed and frozen on the runner alone: the submitter
has no way to ask a question before execution, and the runner has no
way to ask one at all.</t>
      <t>Three gaps follow, and version 2 closes each with one message:</t>
      <ol spacing="normal" type="1"><li>
          <t>The submitter cannot see the runner's expectation before the
run. A runner that expects a job to fail — because the box is
hot, the disk is failing, or the same job failed an hour ago —
has no way to say so until the result returns. The determination
message (Section 6) is that statement, sent before execution.</t>
        </li>
        <li>
          <t>A constrained runner cannot escalate. Where a full runner asks
its local model and folds the reply into its decision, a
deterministic runner has only its default. The question message
(Section 7) carries the question the runner would have asked its
own model to the submitter, and the answer message (Section 8)
carries the reply back as a signed object.</t>
        </li>
        <li>
          <t>Each side plans from a partial picture. The submitter sees exit
codes; the runner sees one job at a time. Context segments
(Section 10) are the shared remedy: signed, append-only fragments
of state and reasoning that ride the messages both ways, so the
submitter plans its next job from the runner's actual state, and
the runner's components share what they observe with each other
and with the submitter.</t>
        </li>
      </ol>
      <section anchor="who-decides-what">
        <name>Who decides what</name>
        <t>Every message in this document exists to move one decision to the
side that can make it. The figures in this document are normative in
intent if not in form: an implementation that moves a decision to
the wrong side of a figure has misunderstood the protocol.</t>
        <artwork><![CDATA[
                    DECISION              DECIDED BY
                    -------------------   -------------------
                    admit or refuse job   the runner, on the
                                          signature and its own
                                          admission checks (v1)

                    what the job will     the runner, before
                    probably do           execution (determination)

                    a question the        an enabled answerer,
                    runner cannot         if it answers in time
                    answer locally

                    the same question       the runner, by its
                    after the deadline    local default

                    what runs, finally    the runner, always;
                                          no answer admits a job

                    the next job          the submitter, with
                                          the runner's context
                                          in view
]]></artwork>
      </section>
      <section anchor="backwards-compatibility-and-adaptation">
        <name>Backwards compatibility and adaptation</name>
        <t>Version 2 changes no version 1 message. A version 2 runner <bcp14>MUST</bcp14>
accept version 1 jobs and <bcp14>MUST</bcp14> answer them with version 1 results.
A version 2 message is sent only when the operator has enabled
version 2 on that runner (Section 11), and only ever concerns a
job that was itself admissible under version 1 rules.</t>
        <t>A submitter that implements this document will routinely face
runners that do not. Realizing a runner does not support version 2 —
because no version 2 message ever arrives from it, or because the
operator says so — is not an error and needs no machinery: the
submitter falls back to version 1 with that runner, submitting
version 1 jobs and reading version 1 results. The submitter adapts
to the protocol version the endpoint supports; the endpoint is never
asked to adapt, to negotiate, or to announce itself.</t>
        <artwork><![CDATA[
   Submitter (v2)                       Runner
        |                                  |
        |  job (v=1 object, as always)     |
        |--------------------------------->|
        |                                  |
        |        if the runner is v2 and   |
        |        the operator enabled it:  |
        |                                  |
        |  determination (v=2)             |
        |<---------------------------------|
        |  question (v=2)                  |
        |<---------------------------------|
        |  answer (v=2)                    |
        |--------------------------------->|
        |                                  |
        |  result (v=1 object, with        |
        |   context segments attached)     |
        |<---------------------------------|
        |                                  |
        |        if the runner is v1:      |
        |        none of the v2 lines      |
        |        above ever happen, and    |
        |        the exchange is exactly   |
        |        the version 1 exchange.   |
]]></artwork>
      </section>
    </section>
    <section anchor="requirements-language">
      <name>Requirements Language</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>
      <?line -18?>

</section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>The terms of draft-slutsky-homing-pigeon-00 <xref target="I-D.slutsky-homing-pigeon"/> apply: submitter, runner,
binding, shared secret, key_id, and the message members defined
there. This document adds:</t>
      <t>Determination: the runner's pre-execution statement of what it
expects a job to do, and why. A determination is an opinion, formed
from the runner's local state and history, frozen before the job
runs and never revised afterwards.</t>
      <t>Question: a question the runner's local decision machinery would
have put to a local model, sent instead because no local model is
available. The reference software asks only for an exec job, and
only when its Oracle is deterministic.</t>
      <t>Answer: a signed reply to one question, identified by that
question's identifier. The answerer is any holder of a shared
secret the runner already trusts. It does not have to be the
party that submitted the job. One answer decides; a late or
second answer is context and does not vote again. An answer
never admits a job and never changes what runs.</t>
      <t>Local default: the decision the runner makes when no answer has
arrived by the question's deadline. Every question has one; asking
never leaves a decision unmade.</t>
      <t>Deadline: the time by which an answer must arrive to affect the
decision it was asked about. An answer that arrives after its
deadline is not discarded; it becomes context for the next decision
(Section 8).</t>
      <t>Context segment: a signed, self-describing fragment of state or
reasoning, appended to a message by one component and readable by
the others, carrying its author's identity and a seen-once
identifier (Section 10).</t>
      <t>Clean pass: a determination that the job is expected to proceed
without incident: no finding above the runner's lowest severity of
interest, no expected failure, nothing the submitter would act on.
The runner's local policy defines the threshold precisely; the
protocol defines only that the threshold exists (Section 6).</t>
    </section>
    <section anchor="the-exchange-at-a-glance">
      <name>The Exchange at a Glance</name>
      <artwork><![CDATA[
 Submitter                          Runner
    |                                  |
    |  1. job (v1)                     |
    |--------------------------------->|  verify signature (v1 rules)
    |                                  |  form the determination
    |                                  |
    |  2. determination (v2)           |  ONLY if not a clean pass,
    |<---------------------------------|  ONLY if enabled (Sec. 11)
    |                                  |
    |                                  |  a question arises the
    |                                  |  runner cannot answer
    |  3. question (v2)                |
    |<---------------------------------|  deadline starts
    |                                  |
    |  4. answer (v2)                  |  if it arrives in time
    |--------------------------------->|  it rides the result;
    |                                  |  it does not change
    |                                  |  what executes
    |                                  |
    |                                  |  deadline passes with no
    |                                  |  answer: local default
    |                                  |
    |                                  |  execute (v1 rules)
    |  5. result (v1 + segments)       |
    |<---------------------------------|
    |                                  |
 The numbers are the order of first transmission, not a lockstep:
 a determination and a question MAY travel in either order, and
 an answer NEVER delays execution past the deadline.
]]></artwork>
    </section>
    <section anchor="common-form">
      <name>Common Form</name>
      <t>A version 2 message is a JSON object carried on any binding that
carries version 1 messages, byte for byte the same treatment: the
subject conventions of draft-slutsky-homing-pigeon-00 Section 6, with the
message type in the subject; the signature and MAC construction of
Section 7 of that document; the per-job encryption of its
Section 16 applied to the whole object; and the common members of
its Section 9, including <tt>v</tt>, which is 2 for the messages this
document defines.</t>
      <t>A receiver that does not implement this document will reject a
message carrying <tt>v</tt> = 2, as version 1 requires it to; that
rejection is the correct and only interaction between a version 2
message and a version 1 receiver, and senders <bcp14>MUST NOT</bcp14> send a
version 2 message on a path where a version 1 receiver is expected
to process it as a job. Version 2 messages are addressed to the
job's <tt>reply_to</tt>, never to the mailbox a runner polls for jobs,
except where the deployment's bindings make the two the same and
the receiving implementation separates them by type before any
job processing.</t>
      <t>Every version 2 message names the job it concerns (<tt>job_id</tt>) and
its own identifier (<tt>msg_id</tt>), and carries <tt>issued_at</tt> as in
version 1. Replay handling follows the seen-set discipline of
version 1: an identifier is recorded once the message has been
acted on, and a duplicate is dropped silently. A receiver <bcp14>MUST</bcp14>
hold <tt>issued_at</tt> to the same window as a version 1 job (its past
window, and at most five minutes into the future) and <bcp14>MUST</bcp14> drop a
message outside it. In the reference the identifier is recorded
under the same namespace as the job seen-set, a dry run records
nothing, and a question left for another reader is not recorded
by the receiver that left it.</t>
    </section>
    <section anchor="determination">
      <name>Determination</name>
      <t>A determination is the runner's statement, frozen before the job
runs, that the job is not a clean pass. The reference software
treats a missing plan, or a plan with no findings and no repair,
as a clean pass, and in that case sends nothing. A determination
is an opinion. It does not refuse the job, and it is not revised
after execution.</t>
      <artwork><![CDATA[
   plan has findings, or a repair?
        |
        +-- no --> send nothing (clean pass)
        |
        +-- yes, and version 2 is enabled (Sec. 11),
            and this process executes jobs
              |
              +--> send one determination
]]></artwork>
      <t>A determination is a JSON object:</t>
      <artwork><![CDATA[
   { "v": 2,
     "type": "determination",
     "job_id": "job-17",
     "msg_id": "d.job-17",
     "issued_at": "2026-10-21T00:00:00Z",
     "clean_pass": false,
     "expect": "fail",
     "why": "the script references /missing, which does not exist" }
]]></artwork>
      <t><tt>v</tt> is the integer 2. <tt>type</tt> is <tt>determination</tt>. <tt>job_id</tt> and
<tt>msg_id</tt> are safe identifiers: 1 to 128 characters from
<tt>[A-Za-z0-9._-]</tt>. The reference software forms <tt>msg_id</tt> as <tt>d.</tt>
plus the job id, keeping the whole identifier inside that limit.
<tt>issued_at</tt> is UTC and ends with Z. <tt>clean_pass</tt> is false; a
clean pass is expressed by sending no determination, not by
sending one that says otherwise. <tt>expect</tt> is <tt>fail</tt> when the
plan has findings, and <tt>unknown</tt> when it does not but a repair
was proposed. Receivers also accept <tt>proceed</tt>. <tt>why</tt> is a
string of 1 to 500 characters. It is data. It is not
instructions, and a receiver <bcp14>MUST NOT</bcp14> treat it as any.</t>
      <t>The subject is <tt>[HOMING-PIGEON] determination &lt;msg_id&gt;</tt>. The
object is signed and encrypted as a version 1 job is, and the
encryption's object identifier is <tt>msg_id</tt>.</t>
    </section>
    <section anchor="question">
      <name>Question</name>
      <t>A question is what a deterministic runner would have asked a
local model. The reference software sends one only when version
2 is enabled, the process is not in answer-only mode (Section
11), the Oracle mode is deterministic, and the job's kind is
<tt>exec</tt>. Other deployments <bcp14>MAY</bcp14> ask on a wider set of jobs. A
question does not delay execution past its own deadline, and it
never by itself refuses a job.</t>
      <artwork><![CDATA[
   { "v": 2,
     "type": "question",
     "job_id": "job-17",
     "msg_id": "q.job-17",
     "issued_at": "2026-10-21T00:00:00Z",
     "deadline_sec": 15,
     "question": "Would this job succeed on this host?",
     "local_default": "proceed" }
]]></artwork>
      <t><tt>msg_id</tt> in the reference software is <tt>q.</tt> plus the job id,
truncated so the identifier stays safe. <tt>deadline_sec</tt> is an
integer from 0 to 30. <tt>question</tt> is a non-empty string of at
most 500 characters. <tt>local_default</tt> is a non-empty string of
at most 64 characters. The reference software uses <tt>proceed</tt>.</t>
      <t>The subject is <tt>[HOMING-PIGEON] question &lt;msg_id&gt;</tt>. Signing and
encryption are as in Section 6, with the object identifier
<tt>msg_id</tt>.</t>
    </section>
    <section anchor="answer">
      <name>Answer</name>
      <t>An answer replies to one question. The answerer is any holder of
a shared secret the runner already trusts, optionally narrowed
to a list of key ids (Section 11). The shared secret is the
credential. The runner cannot tell, and does not need to tell,
which trusted holder produced the answer.</t>
      <artwork><![CDATA[
   { "v": 2,
     "type": "answer",
     "job_id": "job-17",
     "msg_id": "a.q.job-17",
     "question_id": "q.job-17",
     "issued_at": "2026-10-21T00:00:00Z",
     "answer": "it would succeed" }
]]></artwork>
      <t><tt>question_id</tt> is the question's <tt>msg_id</tt>. <tt>msg_id</tt> in the
reference software is <tt>a.</tt> plus that question id, truncated so
the identifier stays safe. <tt>answer</tt> is a non-empty string of at
most 500 characters. It is data. A runner <bcp14>MUST NOT</bcp14> execute it,
and <bcp14>MUST NOT</bcp14> treat it as admitting the job.</t>
      <t>The subject is <tt>[HOMING-PIGEON] answer &lt;msg_id&gt;</tt>. Signing and
encryption are as in Section 6.</t>
      <t>One answer decides. The reference software records the first
answer for a <tt>question_id</tt> and refuses to replace it. A file
that is not a readable answer does not occupy the slot, so a
crash while saving cannot keep a later answer out. A second
answer, and any answer that arrives after the deadline, is
context for a later decision (Section 10). It does not reopen
the job and it does not vote.</t>
    </section>
    <section anchor="deadline-and-the-local-default">
      <name>Deadline and the Local Default</name>
      <t>The runner sends the determination, if any, and the question,
if any, and then looks for an answer until <tt>deadline_sec</tt>
elapses. The default in the reference software is 0, which
means one look and no wait, so a deployment that has not asked
to wait does not stall a worker. The cap is 30 seconds.</t>
      <artwork><![CDATA[
   question handed to the pipe
        |
        +-- an answer is already filed, or arrives
        |   before the deadline
        |        |
        |        +--> one answer segment on the result
        |
        +-- an answer arrives after the deadline
        |        |
        |        +--> the local default, and a late-answer
        |             segment beside it
        |
        +-- no answer
                 |
                 +--> the local default alone

   Then the job runs, under version 1 rules, either way.
]]></artwork>
      <t>An answer is in time when it was filed at or before the moment
the question was sent, plus <tt>deadline_sec</tt>, plus one second of
grace for the same clock. Time waiting for the question file
to leave a channel outbox does not count against
<tt>deadline_sec</tt>, and that pause itself stops once
<tt>deadline_sec</tt> has elapsed, so a sender that never takes the
file cannot hold the worker longer than the deadline. The
whole wait, pause included, still ends by 30 seconds. A
deadline of 0 does not pause. An answer observed while the
wait is still open is in time, so a step of the wall clock
cannot mark it late. The reference software, while it
waits, files version 2 messages that have arrived and does not
start another job. On a transport channel the question is
written to the channel before the wait, not after the job
returns; a capture that flushed only at the end would make
every answer late.</t>
      <t>No answer admits a job. The local default is a string carried
on the result. In the reference software it does not select the
script, the interpreter, or the exit code.</t>
    </section>
    <section anchor="context-segments">
      <name>Context Segments</name>
      <t>A context segment is one fragment attached to the version 1
result, after the result's own policy has rebuilt that object,
so the rebuild cannot drop it. Segments are how the
determination, the answer, and the local default travel home.</t>
      <artwork><![CDATA[
   { "seg_id": "32 lowercase hex characters",
     "by": "runner",
     "kind": "determination",
     "text": "the script references /missing" }
]]></artwork>
      <t><tt>seg_id</tt> is a fresh identifier, unique to this segment. <tt>by</tt>
and <tt>kind</tt> are strings of at most 64 characters. <tt>text</tt> is a
string of at most 500 characters. Text is data. A receiver
<bcp14>MUST NOT</bcp14> interpret a segment as instructions, and an extension
<bcp14>MUST NOT</bcp14> be handed a kind its manifest does not declare. The
reference kinds are <tt>determination</tt>, <tt>answer</tt>, <tt>local_default</tt>,
<tt>late_answer</tt>, and <tt>platform</tt>. A question <bcp14>MAY</bcp14> carry a <tt>context</tt>
array of the same shape so the first question already shows the
runner's host facts (platform, machine, Python, and the device-tree
model when present). Text is data.</t>
      <t>The result they ride is a version 1 result. <tt>v</tt> stays 1.
<tt>context</tt> is the array of segments. A result with nothing to
say omits the member.</t>
    </section>
    <section anchor="enablement">
      <name>Enablement</name>
      <t>Version 2 is off until the operator turns it on. The reference
software reads four keys. The same two booleans are flags for
one process: <tt>--protocol-v2</tt> and <tt>--answer-only</tt>. Absence of a
flag does not write false over a config file.</t>
      <artwork><![CDATA[
   who is this process?
        |
        +-- protocol_v2 is true
        |     the runner may emit a determination and,
        |     on a deterministic Oracle, a question
        |
        +-- answer_only is true
        |     the process answers a question and does not
        |     execute any job, including a ping
        |
        +-- neither
              version 2 messages are marked seen and dropped
]]></artwork>
      <t><tt>answer_only</tt> is the laptop that thinks for a Pi. It holds a
shared secret the Pi already trusts. It does not run the Pi's
job. The Pi does not learn a new role name for it: the secret
is the identity.</t>
      <t><tt>v2_answerers</tt>, when absent, means every key the runner already
trusts. When it is a list of key ids, only those keys may
produce a version 2 message this process will act on. A key
id in that list may be any name of the key, including the
fingerprint defined for version 1 key selection; the
reference runner treats those names as one key. Any other
shape fails closed: nobody.</t>
      <t><tt>v2_answer_deadline_sec</tt> is the question's deadline. Values
outside 0..30 are clamped into that range. The default is 0.</t>
    </section>
    <section anchor="bindings-and-subjects">
      <name>Bindings and Subjects</name>
      <t>Version 2 messages use the bindings of version 1. On the email
binding the subject is <tt>[HOMING-PIGEON]</tt> followed by the message
type and the <tt>msg_id</tt>, as Sections 6, 7, and 8 specify. A
receiver dispatches on that type before it considers the
message a job. A subject that does not match the body's <tt>type</tt>
and <tt>msg_id</tt> is rejected.</t>
      <t>The signature and the encryption are the version 1
constructions. The encryption's object identifier is the
<tt>msg_id</tt> in the subject. Cleartext is refused wherever a
cleartext job is refused.</t>
      <t>A version 2 message is not a job. A job with <tt>v</tt> other than 1
is still rejected. A process that has not enabled version 2
marks the message seen and does not act on it. A process that
has enabled version 2 but is not an answerer does not answer
a question and does not mark that question seen, so another
reader of the same mailbox can still answer it. An invalid
question is still rejected and marked seen. A determination
is still marked seen.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Version 2 extends trust along a line version 1 already drew.
The holder of a shared secret the runner trusts may submit a
job. The same holder, or another holder of a secret the runner
trusts, may answer a question. The operator chooses that set,
and may narrow it to named key ids. Enabling the feature is
what makes the extension; the default is the version 1
exchange, unchanged.</t>
      <t>An answer is not an authorization to run. The runner decides
what runs, before and after the answer, under version 1 rules.
Context text is data. A segment that says to run a different
script is still a segment, and the script that runs is the one
in the job.</t>
      <t>One answer decides, because two answerers would be a race the
protocol does not adjudicate. The first answer filed wins. A
later one cannot replace it and cannot reopen the job.</t>
      <t>The deadline is capped so a question cannot stall a worker past
30 seconds. A deadline of 0 does not wait. Callers that need a
live reply set a deadline long enough for their binding to
carry the question out and the answer back.</t>
      <t>Answer-only mode is a refusal to execute. A process in that
mode will not run a job that shares its mailbox, including a
liveness ping.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document defines no new IANA registry. The message types
<tt>determination</tt>, <tt>question</tt>, and <tt>answer</tt>, and the integer
version 2, are defined here for use with the Homing Pigeon
message protocol. The version 1 message types are unchanged.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="I-D.slutsky-homing-pigeon">
        <front>
          <title>Homing Pigeon Message Protocol, Version 1</title>
          <author initials="A." surname="Slutsky" fullname="Andrew Slutsky">
            <organization/>
          </author>
          <date year="2026" month="October"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-slutsky-homing-pigeon-00"/>
      </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>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA71c63IbN5b+j6fAKj9i75BcSbZzkTLJKrZn4q3E9sTOTGVS
KRFkg1KPmt1MoymamczUPsQ+wD7LPso+yZ7vHAANNEnbytSsKhVL3Y3bwbl8
5wKMx2P1gb64snU3ftWZ5epMm4cLs/j40fH449PT0/FDMzfjT4vTR+PT+cMH
Dx48/AT/ozbf2rqw7Zm+ac2yaDb1uF3MddGaRTd21bpzN9vxdbMs66vxqryy
TT2+PR0fH0+Whf78PT67aSdvlhUNE37or1OMMKYPbh+8dw963LzHt4eG6uyb
jv657qiju/ZSFnXZufdo1r3pVFd2lT3TR1/xe/2S3+tvrHPmyuqXbdM186Ya
6T/a1pX05vRMP7Gdbelr09EDN9J/WFvnfzV1oV9dm9YW+nFTYxFHysxmrb3d
GeL29EgVzbw2Sxr+XXM9UXPT2aum3Z7psl40yq1ny9JhRt12ZfGwsCvwRd2p
ckXM0bVr150eH396fKoKanumT49PPxqfHI8fHCuazQN1Y7ebpi3O9A9FuqCR
/smvB8txG9uO9FzWop29WtIIPyrX0UovTdXU1PHWOrUqqR8i1Ui7pu1auyBi
uO0Sv/yozLq7btozpfWYJuqIFBcT/UoWe6SwZUKFo4u6aO0mf9W0V6Yuf+a5
0SfP+oXKe7s0ZUUvPPEePXr48N+v8Gwyb5ZHStVNu6TGtxbjPxs/meyl8hn3
dVdmOJEp9OvDz/htq2H+3EuCbJP4ibNtaR22O3T9jLahrW03fgJ+eTvbHB8r
NR6PtZm5rjXzTqnX1yVJRTNfYw+1W9l5uaAB9G1gbd0sdHdtdb78pSxfrfzy
J70saOrQ1NoURYnt0V0TOztR994+u/sjXTedNrq1q8rMLU9q0bS6pIVZ6mab
9OXnoG+sXTkN6V5a4or6SkSuXwFNxdEaWmvDvB1/QYxKncyvqZFbap7qKiw3
DqPtG3xxZScglo3roi5a+ktnchL6H+nZVm+uy/k1d9au69q2urNV5RQesKR2
1JA+Mh3NnUYh0tMSjP5LMwPNikbPLC3dcg94SL24c21UEMU9g5kw1Oa6cVZX
zdyQqqQ95bUszfy6pLdbUhw105lFmVrFLomKtlpo425AMZpa/6Z2nTUFTaBW
vt2e8euttrWZVaTrrpuKLFKgpxMF6Oy8tZ3C9hKXnfM2DBQJlER5VdPHi9bI
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
AA==

-->

</rfc>
