<?xml version="1.0" encoding="UTF-8"?>
<rfc
     category="info"
     docName="draft-pidlisnyi-aps-04"
     ipr="trust200902"
     submissionType="IETF"
     xml:lang="en"
     version="3">

  <front>
    <title abbrev="APS">Agent Passport System (APS): Verifiable Authority, Lifecycle, Enforcement, and Evidence for AI Agents</title>
    <seriesInfo name="Internet-Draft" value="draft-pidlisnyi-aps-04"/>
    <author fullname="Tymofii Pidlisnyi" initials="T." surname="Pidlisnyi">
      <organization>Agent Passport System</organization>
      <address>
        <email>signal@aeoess.com</email>
        <uri>https://agent-passport.org</uri>
      </address>
    </author>
    <date year="2026" month="September" day="28"/>
    <area>Security</area>
    <workgroup>Individual Submission</workgroup>
    <keyword>AI agent</keyword>
    <keyword>identity</keyword>
    <keyword>delegation</keyword>
    <keyword>capability attenuation</keyword>
    <keyword>governance</keyword>
    <keyword>Ed25519</keyword>
    <keyword>signed receipts</keyword>

    <abstract>
      <t>
      This document specifies the Agent Passport System (APS), a protocol
      for representing and evaluating authority exercised by AI agents. APS
      separates agent identity, represented principal, delegated authority,
      policy approval, admission to dispatch, observed results, and
      external effects. It defines cryptographic identity and principal
      records, monotonic delegation, revocation and authority-lifecycle
      semantics, deterministic action and decision references, signed
      governed-action records, verifier outcomes, evidence resolution,
      profiles, and protocol bindings.
</t>
      <t>
      APS defines how an enforcement boundary rechecks current authority
      before admitting an action to dispatch, and how a verifier
      distinguishes what a signed record establishes from claims that
      remain unresolved or external to the protocol. Requirements are split
      into APS Core, which every conforming implementation carries, and
      Candidate features, which an implementation opts into by naming them in
      its claim, and most of the lifecycle and decision-to-effect material in
      this document is Candidate rather than Core. Candidate features
      specify additional lifecycle and decision-to-effect behavior without
      making those features requirements of APS Core conformance.
</t>
      <t>
      Implementation and conformance sections identify which requirements
      have exact conformance-vector coverage and which are implemented by the
      reference implementations. APS does not treat a valid signature,
      receipt, or delegation chain as proof of external truth or of the
      absence of an out-of-band execution path.
</t>
    </abstract>
  </front>

  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <t>This document specifies the Agent Passport System (APS), a protocol for
  identifying AI agents, narrowing delegated authority at each transfer point,
  deciding and admitting individual actions at an enforcement boundary, and
  recording signed evidence of what was decided and what was observed.</t>

  <t>APS defines an authority and verification model that keeps identity,
  authority, approval, admission, execution and external effect apart. It
  defines Ed25519 agent passports and separately signed principal bindings. It
  defines delegation chains that a verifier rejects when authority widens
  across scope, spend, depth, time, reputation, values, or reversibility. It
  defines the lifecycle states an authority artifact can hold and the verdicts
  a verifier may report about them. It defines deterministic action and
  decision references, a common envelope for the signed records of a governed
  action, and bindings for Model Context Protocol tool calls and imported
  OAuth identity-assertion authorization grants.</t>

  <t>A verification result keeps cryptographic integrity, signer authority,
  referenced-artifact resolution, policy semantics, and external truth on
  separate axes. Sections labelled Candidate are specified in this document
  rather than against a prior published rule. Their status blocks name
  related fixture families, and <xref target="requirement-matrix"/> is the
  sole authority for which requirements an exact vector exercises. An Implementation Status section states the
  coverage of the available open-source implementations.</t>

      <t>APS fills this gap by providing (1) Ed25519 agent passports and
separately signed principal bindings, (2) scoped delegation chains
where authority narrows monotonically across seven constraint
dimensions, (3) revocation that invalidates every chain depending on a
revoked delegation, with revocation records, where produced, and optional
cascade evidence carried as evidence of processing rather
than as the cause of that invalidity, (4) a three-record policy chain
binding intent, decision, and observed result, (5) a common
signed-receipt envelope for those records, (6) a componentwise
composition rule for institutional governance structures specified in
companion work, and (7) an enforcement-gateway model that can serve as
an external reference monitor.</t>

      <t>Agentic work raises several distinct attribution questions: under
      whose authority an action was taken, what sources contributed to a
      deliverable, on whose behalf the agent acted, and who receives the value
      the work creates. This document specifies the authority core and the
      signed receipt layer through which principal resolution is recorded and
      other attribution axes may be referenced; it does not define
      contribution-attribution or beneficiary-attribution models.</t>

      <t>The protocol's formal invariants and design rationale are published
in the informative references.  At the time of writing no IETF working
group is chartered for AI agent identity or agentic authorization:
WIMSE is chartered for workload identity, where a workload is a
running instance of software executing for a specific purpose
<xref target="IETF-WIMSE-CHARTER"/>, and carries one agent-specific
document <xref target="AIMS"/>, the proposed DAWN charter places
identity management of AI agents, tools and skills out of scope
<xref target="IETF-DAWN-CHARTER"/>, and the proposed agentproto
charter commits its reference architecture to reusing existing
identity, authentication and authorization building blocks rather than
defining new ones <xref target="IETF-AGENTPROTO-CHARTER"/>.  This
individual submission specifies APS and identifies current
implementation coverage and deviations in Appendix A.  Its requirement
keywords constrain implementations claiming conformance to this
revision.</t>

      <section anchor="requirements-language" numbered="true" toc="default">
        <name>Requirements Language</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
        "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
        "OPTIONAL" in this document are to be interpreted as described in
        BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and
        only when, they appear in all capitals, as shown here.</t>
      </section>
    </section>

    <section anchor="authority-model" numbered="true" toc="default">
      <name>Authority and Verification Model</name>

      <t>This section names the parties this document talks about, the
      distinctions the rest of the document enforces, and what a verifier is
      allowed to say. It is placed before any wire format because every later
      section is written against it.</t>

      <t>Two labels appear throughout. <strong>Core</strong> marks a requirement
      of APS Core conformance. It is mandatory for an implementation claiming the
      conformance class to which the requirement applies, and
      <xref target="conformance-classes"/> maps each identifier area to its
      classes. <strong>Candidate</strong> marks an opt-in feature. A Candidate
      requirement is normative for an implementation that claims the feature and
      is not a requirement of APS Core conformance. A conformance claim names the
      classes it claims and the Candidate features it claims, in the form "APS
      Core in the named classes, plus named features", as
      <xref target="conformance-claim"/> states. A Candidate label is not a claim
      that any deployment uses the rule.</t>

      <t>Normative requirements introduced outside the closed core carry stable
      semantic identifiers of the form APS-AREA-NAME, listed with each subsection
      and mapped in <xref target="requirement-matrix"/>. An identifier never
      changes because a section moves and is never reused.</t>

      <section anchor="actors" numbered="true" toc="default">
        <name>Actors</name>

        <t>Nine roles appear in this document. A deployment can put several of
        them in one component or split one across several.</t>

        <dl newline="false" spacing="normal">
          <dt>Principal</dt>
          <dd>The person, office, or organization on whose behalf authority
          exists. A principal binding record names the principal an agent acts
          for, signed by the principal and scoped to named audiences and authority
          profiles rather than asserted for every purpose
          (<xref target="principal-binding"/>).</dd>

          <dt>Authority issuer</dt>
          <dd>The party that signs a delegation, creating or narrowing authority
          for the party below it. In a chain each issuer holds the parent grant
          (<xref target="chain-verification"/>). The issuer and the principal can
          be different parties.</dd>

          <dt>Acting agent</dt>
          <dd>The agent that declares an intended action and, once admitted,
          executes it. It is identified by an Agent Passport
          (<xref target="agent-passport"/>) and named as subject_agent on the
          records of a governed action (<xref target="receipt-envelope"/>).</dd>

          <dt>Delegate</dt>
          <dd>An agent holding authority received from another agent rather than
          from the principal directly. What a delegate can hold is bounded
          facet by facet by the grant above it
          (<xref target="faceted-attenuation"/>).</dd>

          <dt>Policy decision point</dt>
          <dd>The component that evaluates one action against the selected
          authority chain and the applicable policy and returns permit, deny, or
          narrow. In this document it is the deterministic gate plus the advisory
          evaluation path (<xref target="policy-chain"/>). It may be a separate
          component from the enforcement boundary.</dd>

          <dt>Enforcement boundary</dt>
          <dd>The component that issues the policy-decision record
          (<xref target="policy-decision"/>) and the action-result record
          (<xref target="action-result"/>), consumes the approval at the next
          authorization boundary, applies the state current at that moment, and
          completes any spend reservation
          (<xref target="two-phase-execution"/>). Only the enforcement boundary
          admits an action to dispatch. A policy decision point may compute the
          decision, and the boundary is the issuer of the record that carries it.
          Approval consumption, reservation, dispatch and the external effect are
          not one atomic transaction in this revision, and
          <xref target="oq-admission-record"/> records what that leaves
          open.</dd>

          <dt>Target system</dt>
          <dd>The system the action operates on. It appears in the action input
          object hashed into action_ref
          (<xref target="action-reference"/>). This document specifies no
          interface to it and no obligation on it.</dd>

          <dt>Evidence issuer</dt>
          <dd>A party outside the delegation chain that signs an artifact a
          verifier may resolve, for example an attesting service or a counterparty
          system. Keys for such signers resolve under a model separate from an
          agent's own key (<xref target="external-signer-keys"/>), and what
          resolution reports is its own axis
          (<xref target="receipt-evidence"/>).</dd>

          <dt>Verifier</dt>
          <dd>Any party that reads these artifacts and reports what it can
          establish from them. Its obligations are stated for chains in
          <xref target="chain-verification"/> and for records in
          <xref target="receipt-verification"/>.</dd>
        </dl>

        <t>This subsection defines terms and states no requirement, so it carries
        no status block. It does not establish that any deployment has all nine
        roles, does not require any two of them to be distinct components, and
        does not say which party operates which.</t>
      </section>

      <section anchor="distinctions" numbered="true" toc="default">
        <name>Seven Distinctions</name>

        <t>Each distinction below is enforced by the section named with it. This
        subsection adds no requirement of its own. It exists because the seven
        collapses it names are the ones that make a verifier report more than it
        established.</t>

        <t><strong>Identity is not authority.</strong> An Agent Passport is a
        self-signed record, and checking its signature establishes that the holder
        controlled the key at signing time. What the agent may do comes from
        somewhere else: a delegation chain whose facets narrow at every hop
        (<xref target="faceted-attenuation"/>) and a principal binding scoped to
        named audiences and authority profiles
        (<xref target="principal-binding"/>). A passport that resolves and a
        signature that checks leave the authority question untouched. This does
        not establish that an agent holding no APS chain has no authority under
        some other system, only that this document gives it none.</t>

        <t><strong>Cryptographic validity is not signer authority.</strong> A
        valid signature establishes that an authorized signing key attested to the
        canonical record body. It does not establish that an external event
        occurred or that a signed claim is true
        (<xref target="receipt-crypto"/>). Whether the signer held authority is
        resolved separately, at the artifact's own issuance time, and for parties
        outside the chain under a separate model
        (<xref target="external-signer-keys"/>). A record can be internally
        consistent and correctly signed while the decision it names is not the
        decision a verifier is holding. The receipt-decision-relation family makes
        that gap executable as a rejection with a named reason rather than leaving
        it to inference.</t>

        <t><strong>Authority is not approval.</strong> Authority is standing held
        over an interval. An approval is one decision about one action, bound to
        the action_ref it approves, single use, and time bounded
        (<xref target="policy-decision"/>). A valid chain does not carry an
        approval and an approval does not extend a chain. This does not establish
        an ordering between the two: a chain can be valid with no approval ever
        issued, and an approval can be stale while the chain under it still
        stands.</t>

        <t><strong>Approval is not admission.</strong> A permit or narrow
        policy-decision record exists from the moment the boundary issues it and
        admits nothing until the next authorization boundary consumes it. At that boundary the enforcement
        boundary rechecks temporal validity and revocation state, consumes the
        approval identity atomically, and completes any spend reservation
        (<xref target="two-phase-execution"/>). An approval that has expired, has
        already been consumed, or fails the recheck admits nothing. Whether a
        given approval was in fact consumed is boundary state keyed by its
        identity and is not content of any record, so a verifier without access to
        that state reports the approval-state axis as not established
        (<xref target="receipt-verification"/>).</t>

        <t><strong>Admission is not execution.</strong> Admission is the
        boundary's act. Execution is what the target system then does. They are
        separate states, and in this revision admission is enforcement-boundary
        state with no durable record, per <xref target="decision-to-effect"/> and
        <xref target="oq-admission-record"/>. The action-result record carries its
        own issued_at, which can fall after the consumed decision's validity
        window closes, because execution and observation take time
        (<xref target="action-result"/>). A decision record held on its own says
        nothing about whether the action ran. The accountability-record family
        carries the boundary decision and the executed flag as independent fields
        and keeps a vector in which the decision is deny and the action executed
        anyway.</t>

        <t><strong>Observed outcome is not external effect.</strong> An
        action-result record attests to what the enforcement boundary observed
        after dispatch, and external occurrence or settlement requires separately
        resolved evidence (<xref target="action-result"/>). A status of unknown is
        a real outcome rather than a missing one. Agreement between an APS record
        and a record produced outside the deployment is evidence of correlation
        between records, not of the authenticity, authority, or integrity of
        either record (<xref target="external-correlation"/>).</t>

        <t><strong>Evidence of a claim is not its truth.</strong> An evidence
        reference is a commitment, not evidence availability
        (<xref target="receipt-evidence"/>). Resolving it establishes that the
        bytes the artifact's own rules select hash to the committed digest.
        Whether the artifact's content is true is outside what resolution reports,
        and a verifier does not report a record fully valid for a claim that
        depends on evidence it never resolved. The read-fidelity-receipt family is
        the plainest case in the corpus: the record commits to sampled readback at
        a stated n, carries no pass threshold, and leaves the consumer to judge k
        of n.</t>

        <t>What this subsection does not establish. It states no requirement, adds
        nothing to the sections it points at, and does not establish that the
        seven are exhaustive. It is a reading guide over text that is normative
        elsewhere.</t>

      </section>

      <section anchor="admissibility" numbered="true" toc="default">
        <name>Admissibility</name>

        <t>A record defined in this document describes what a verifier may
        conclude from the artifacts it holds. It does not describe what happened.
        Two verifiers holding different artifacts about one action can reach
        different conclusions without either being wrong, and neither conclusion
        is a statement about the world.</t>

        <t>An artifact verdict is what a verifier says about one authority
        artifact at one moment. The set is closed and has six members.</t>

        <dl newline="false" spacing="normal">
          <dt>valid</dt>
          <dd>The verifier establishes that the artifact currently confers the
          authority claimed.</dd>

          <dt>invalid</dt>
          <dd>The verifier establishes that it does not, or no longer does.
          Revoked, expired, exhausted, void from issuance, and dependent on an
          invalid ancestor all land here, separated by reason code.</dd>

          <dt>not established</dt>
          <dd>The verifier cannot reach a conclusion. This is ignorance. It is
          never a finding about the world and never the negation of the
          claim.</dd>

          <dt>not yet effective</dt>
          <dd>The verifier establishes that the artifact was validly issued and
          that an enabling condition has not occurred yet. The remedy is to wait,
          not to find a better source. The activation conditions of
          <xref target="lifecycle-activation"/> are the only route to this verdict
          in this revision. A wait carried by the time facet instead returns
          invalid with a not-yet-valid reason from
          <xref target="chain-verification"/>, and that subsection records the two
          verdicts side by side rather than resolving them.</dd>

          <dt>suspended</dt>
          <dd>Use is paused by one or more live causes, each separately
          releasable.</dd>

          <dt>restricted</dt>
          <dd>Authority continues in reduced form under a live constraint that
          does not pause it.</dd>
        </dl>

        <t>A verifier MUST report a verdict from that set and MUST NOT report a
        verdict outside it. Every verdict MUST carry a reason code. Two findings
        that share a verdict name and differ in substance MUST carry different
        reason codes, because a result that reports only verdict names cannot be
        read.</t>

        <t>A verifier MUST NOT report not established for a conclusion it has
        reached. Where the conclusion is negative, the shape of the negative
        decides the output. An enabling condition established not to have occurred
        yet is the verdict not yet effective, reason code
        ENABLING_CONDITION_NOT_YET_OCCURRED. A composition rule established not to
        be satisfied denies the action at the boundary, reason code
        COMPOSITION_NOT_SATISFIED. A pinned referent established to have changed
        denies the action at the boundary, reason code
        PINNED_REFERENT_MISMATCH. Neither of the last two makes any artifact
        invalid.</t>

        <t>Unexecutable is not a seventh verdict. An artifact whose target,
        executor, or named capability no longer exists keeps its verdict and fails
        at execution, with the unresolvable referent recorded.</t>

        <t>The rest of this subsection is informative. What an enforcement point
        decides about one action at one authorization boundary is a boundary
        outcome, a different subject with its own three values: authorized, denied
        with a stated reason, or not established. No conformance family in the
        Agent Authority Conformance suite decides an outcome by these names, so
        this document states them as vocabulary and places no requirement on
        them.</t>

        <t>A third axis is the chain-verification result of
        <xref target="chain-verification"/>, whose closed set is valid, invalid,
        indeterminate and unsupported. It is a finding about one selected
        root-to-leaf chain rather than about one artifact or one action, and the
        three axes are never mixed. A chain result of valid supports the artifact
        verdict valid for the artifacts on that chain and supports no boundary
        outcome on its own. A chain result of invalid supports the artifact
        verdict invalid. A chain result of indeterminate is carried as indeterminate on its own
        axis. Where a verifier also reports an artifact verdict for the artifacts
        on such a chain, that verdict is not established, naming the source limb
        where no accepted answer was available and the freshness limb where the
        answer was past its declared bound. Neither value is collapsed into valid,
        and the chain result is not replaced by the artifact verdict. A chain result of unsupported is carried as
        unsupported and is neither erased nor folded into any other value on any
        axis.</t>

        <t>Also informative: a not established verdict is unreadable unless it
        says which limb was missing. Three limbs are proposed. Source means no
        source the authority model accepts produced a usable answer, or the answer
        came from a source the model does not accept for that state, or two
        accepted sources are in unresolved conflict. Freshness means an answer
        existed but was older than the bound the model declares for its source.
        Coverage means the claim does not state that it covers what the verdict
        needed. The verdict set of this subsection places no requirement on the limbs. The
        Candidate features that name limbs do place one on an implementation
        claiming them, at <xref target="lifecycle-concepts"/>,
        <xref target="lifecycle-capability-binding"/> and
        <xref target="lifecycle-l12"/>. No conformance family names a limb on a
        verdict. The reference SDK modules enforce the rule at construction, which
        is an implementation choice and not a conformance obligation.</t>

        <t>What this subsection does not establish. The verdict set says what a
        verifier may report, not what is true of the authority. A valid verdict
        means the verifier establishes that the artifact currently confers the
        authority claimed, against the checks that verifier ran, and which checks
        those were is a separate question this subsection does not answer. Two of
        the six members, suspended and not yet effective, are not decided by any
        family cited in this section. The distinction between a finding that
        something is false and a finding that it is not established is carried by
        the verdict name and by nothing else here.</t>

        <t>Requirements. APS-EVID-VERDICT-SET-CLOSED, a verifier reports a
        verdict from the closed six-member set and reports none outside it,
        exercised. APS-EVID-REASON-CODE-REQUIRED, every verdict carries a reason
        code and two findings sharing a verdict name carry different codes,
        specified, not exercised. APS-EVID-NOT-ESTABLISHED, a verifier does not
        report not established for a conclusion it has reached, and an established
        negative takes the shape its own subject gives it, specified, not
        exercised.</t>

        <t>Status: Candidate feature. Normative for an implementation claiming this feature, not a requirement of APS Core conformance. Related fixture families:
        lifecycle-evidence-and-record, whose runners fail any vector returning a
        verdict outside the closed set, across its 12 cases.
        revocation-resolution-forward-compat, 14 cases. Exercised requirements: APS-EVID-VERDICT-SET-CLOSED. Implemented requirements: APS-EVID-VERDICT-SET-CLOSED, APS-EVID-REASON-CODE-REQUIRED, APS-EVID-NOT-ESTABLISHED. Related implementation surfaces:
        lifecycle-state module in agent-passport-system 7.2.0 (npm) and
        agent-passport-system 4.2.0 (PyPI), experimental and opt-in.</t>
      </section>

      <section anchor="evidence-model" numbered="true" toc="default">
        <name>Evidence</name>

        <t>Linkage and correlation each establish one narrow thing. A prev
        reference cryptographically links one record body to a claimed
        predecessor. It does not establish wall-clock ordering, completeness, or
        the absence of omitted records without an external log or sequencing
        mechanism (<xref target="receipt-crypto"/>). A matching external action
        reference is evidence of correlation between records, not of the
        authenticity, authority, or integrity of either record, and correlation
        strength is bounded by the external ecosystem's own field discipline
        (<xref target="external-correlation"/>). An action reference is a
        correlation key rather than an integrity seal, and tamper evidence against
        a record's writer comes from a signature over the record or from an
        independently held copy.</t>

        <t>Later findings do not rewrite earlier records. A record of a decision
        states what its issuer decided on the record available at that instant. A
        verifier MUST NOT change what such a record states because of anything
        learned afterwards, including a finding that an ancestor of the chain was
        never validly issued. Whether the authority stands now is a separate
        question with its own answer, reported as its own finding.</t>

        <t>A digest mismatch has two subjects and two results. Where a record's
        bytes do not match the digest under which it was recorded, the presented
        bytes do not establish the evidence claim, and a verifier MUST NOT read
        their content as a finding. The containing record's required-evidence axis
        is invalid, because the commitment that record carries mismatched, as
        <xref target="receipt-evidence"/> states.</t>

        <t>Evidence strength is a verifier appraisal. This document defines no
        assurance level, no strength score, and no threshold at which evidence
        becomes sufficient. The read-fidelity-receipt family is built that way on
        purpose: the record carries the sampled result and no pass threshold, and
        the consumer judges it.</t>

        <t>An evidence attestor is whoever produced or signed a piece of evidence,
        and in what role. A boundary attesting an execution makes a different
        claim from an issuer signing a grant, and the attestor's key has its own
        lifecycle, resolved outside the record
        (<xref target="external-signer-keys"/>). In the accountability-record
        family a record carries the signer's identifier and not a key, and the
        signature says nothing until a resolver binds that identifier to a key.</t>

        <t>Three further requirements on what a verdict record carries are
        proposed in the authority lifecycle work and are stated here as
        informative prose, because no conformance family exercises any of
        them.</t>

        <ul spacing="normal">
          <li>Verdict coverage. Where the authority model publishes a class list
          of authority-changing events, a verdict would record, for each class on
          that list, whether it was checked and against which source. Where the
          model publishes no such list, the verdict would record that no
          event-class coverage was claimed. Tested by nothing.</li>

          <li>Chain validity against relying party knowledge. Whether a chain is
          currently valid and whether a particular party had notice of a change
          are separate findings, and a verdict record would carry a notice finding
          with its own timestamp or record that it has none. Tested by
          nothing.</li>

          <li>Declared scope against the enforcing boundary. A declared scope is
          only as effective as the boundary that enforces it. A verifier that
          cannot establish that the enforcement boundary implements a grant's
          declared scope would not report the narrower scope as established,
          because documented scope and reachable scope are separate facts needing
          separate evidence. Tested by nothing. The accountability-record family
          records the matching limitation on itself as a non-goal: it does not
          check that an action's scope is covered by the delegation it names.</li>
        </ul>

        <t>What this subsection does not establish. It does not establish that
        available evidence is complete, and showing that individual records are
        authentic is weaker than establishing that every relevant event was
        observed. It does not establish that an attestor's claim is true, only
        which party made it and under which key. It places no requirement on the
        three proposed carriage rules above, and it does not establish that a
        record's silence on a claim is a denial of that claim.</t>

        <t>Requirements. APS-EVID-NO-RETROACTIVE-REWRITE, a verifier does not
        change what a decision record states because of anything learned
        afterwards, exercised by lifecycle-evidence-and-record LC-G-006-b,
        LC-G-006-c, LC-G-006-d and LC-G-006-e.
        APS-EVID-DIGEST-MISMATCH-NOT-ESTABLISHED, bytes that do not match the
        digest under which they were recorded do not establish the evidence claim
        and their content is not read as a finding, while the containing record's
        required-evidence axis is invalid per
        <xref target="receipt-evidence"/>, exercised by
        lifecycle-evidence-and-record LC-G-006-f.</t>

        <t>Status: Candidate feature. Normative for an implementation claiming this feature, not a requirement of APS Core conformance. Related fixture families:
        lifecycle-evidence-and-record, accountability-record,
        read-fidelity-receipt, receipt-decision-relation. Exercised requirements: APS-EVID-NO-RETROACTIVE-REWRITE, APS-EVID-DIGEST-MISMATCH-NOT-ESTABLISHED. Implemented requirements: none. Related implementation surfaces:
        lifecycle-state module in agent-passport-system 7.2.0 (npm) and
        agent-passport-system 4.2.0 (PyPI), experimental and opt-in, for the
        verdict vocabulary these findings are reported in. No released package
        implements the later-finding rule as a check.</t>
      </section>

      <section anchor="mediation-assumption" numbered="true" toc="default">
        <name>The Mediation Assumption</name>

        <t>Everything this document specifies rests on one assumption about the
        deployment around it. APS establishes that a governed path was valid. It
        does not establish that no ambient credential reached the target system
        outside that path.</t>

        <t>The assumption is load bearing and it is not self-checking. Where the
        target system accepts a credential that never passes the enforcement
        boundary, the records defined here describe the governed path and are
        silent about the rest. Silence is not a denial.</t>

        <t>A verifier MUST NOT read the absence of a record of an ungoverned path
        as evidence that no ungoverned path was used. The accountability-record
        family holds the format to that: the boundary decision and the executed
        flag are independent fields, a record in which the decision is deny and
        the action executed anyway is a well-formed record of a boundary
        violation, and the family states that absence of a claim in the record is
        not a denial of that claim.</t>

        <t>An observation scope is itself a finding with its own limits. Where a
        verifier has watched a named scope and seen no alternate use, it has
        established something about that scope and nothing about paths outside it.
        One observed bypass settles the question. The absence of an observed
        bypass leaves it not established rather than settled negative.</t>

        <t>The corresponding deployment obligations are in the security
        considerations, and the reference architecture for a boundary that can
        carry them is informative.</t>

        <t>What this subsection does not establish. It does not establish that the
        target system is reachable only through the boundary. It does not
        establish that a credential issued outside APS was unused. It does not
        establish that any observation scope covered every path, and it does not
        turn an unobserved path into an absent one.</t>

        <t>Requirement. APS-ENF-NO-ABSENCE-INFERENCE, a verifier does not read
        the absence of a record of an ungoverned path as evidence that no
        ungoverned path was used, exercised by accountability-record vector 9,
        positive-deny-executed, a well-formed record in which the boundary
        decision is deny and the executed flag is true.</t>

        <t>Status: Candidate feature. Normative for an implementation claiming this feature, not a requirement of APS Core conformance. Related fixture families:
        accountability-record, 12 vectors. Exercised requirements: APS-ENF-NO-ABSENCE-INFERENCE. Implemented requirements: none. Related implementation surfaces: no released package.</t>
      </section>

      <section anchor="transition-contract" numbered="true" toc="default">
        <name>Transition Contract</name>

        <t>This subsection is informative. It is the spine the rest of this
        document describes. Each row names one transition in the life of an
        authority and separates three questions about it: where its semantics are
        specified, what a verifier can establish about it in this revision, and
        which durable artifact it leaves behind. The three answers differ for
        several rows, which is why they are three columns rather than one.</t>

        <t>The table is the set of protocol-stage and major lifecycle transitions
        selected for this revision. It is not exhaustive. Three rows are the open
        transition and evidence gaps this revision carries, the
        principal-to-authority association, admission to dispatch, and dispatch
        attempted, and each is carried in
        <xref target="limits-and-open-questions"/> rather than left silent. Other
        rows record no dedicated durable artifact without being open questions:
        expiry leaves none because the bound is inside the signed record, and key
        compromise, approval withdrawal before consumption and renunciation by the
        agent have no transition of their own in this revision.</t>

        <table anchor="tbl-transition-contract" align="left">
          <name>Transitions, where each is specified, what a verifier can establish now, and the durable artifact each leaves</name>
          <thead>
            <tr><th align="left">Transition</th><th align="left">Specified in</th><th align="left">What a verifier can establish now</th><th align="left">Durable artifact</th></tr>
          </thead>
          <tbody>
            <tr><td>Principal relationship</td><td><xref target="principal-binding"/></td><td>the binding exists and verifies</td><td>PrincipalBindingV1</td></tr>
            <tr><td>Principal relationship ended</td><td><xref target="principal-binding"/></td><td>the revocation verifies</td><td>signed principal-binding-revocation record</td></tr>
            <tr><td>Principal-to-authority association</td><td>no section of this revision, recorded at <xref target="oq-principal-authority"/></td><td>not established in this revision</td><td>none</td></tr>
            <tr><td>Root authority basis accepted</td><td><xref target="chain-verification"/>, <xref target="oauth-jag-binding"/></td><td>that the verifier's own trust policy accepts the root, and not which principal it represents</td><td>root delegation plus trust policy, or an importing profile's evidence</td></tr>
            <tr><td>Activation</td><td><xref target="lifecycle-activation"/></td><td>valid, not yet effective, or not established</td><td>condition and attestation records, in the proposed: namespace</td></tr>
            <tr><td>Delegation</td><td><xref target="faceted-attenuation"/>, <xref target="component-orders"/></td><td>the child is no wider than the parent under every component order</td><td>AuthorityDelegationV1</td></tr>
            <tr><td>Revocation</td><td><xref target="revocation-cascade"/>, with <xref target="revocation-record-format"/> as one record format</td><td>every chain containing the revoked delegation is invalid once the verifier establishes the revocation</td><td>revocation record, status observation</td></tr>
            <tr><td>Suspension and release</td><td><xref target="lifecycle-suspension"/></td><td>suspended or restricted, naming the causes that remain</td><td>suspension and release records</td></tr>
            <tr><td>Restriction imposed or released</td><td><xref target="lifecycle-capability-binding"/>, and <xref target="d2e-chain-validity"/> informatively</td><td>restricted, or a denial at the boundary, with the chain unchanged</td><td>none in this revision</td></tr>
            <tr><td>Pinned-referent mismatch</td><td><xref target="lifecycle-capability-binding"/></td><td>a denial under a mismatch reason, or continuity not established</td><td>none in this revision</td></tr>
            <tr><td>Purpose exhaustion</td><td><xref target="lifecycle-bounds"/></td><td>exhausted, which is an ending of the expiry kind</td><td>an exhaustion record, which MAY be recorded</td></tr>
            <tr><td>Expiry</td><td><xref target="lifecycle-l10"/></td><td>authority ceased at its signed bound</td><td>none, the bound is in the signed record</td></tr>
            <tr><td>Key rotation</td><td><xref target="key-rotation"/>, <xref target="lifecycle-l9"/></td><td>the key authorized at the artifact's issued_at, or an ambiguous signing instant</td><td>published key material with windows</td></tr>
            <tr><td>Key compromise</td><td>no dedicated transition, see <xref target="key-rotation"/> and <xref target="security-considerations"/></td><td>nothing of its own</td><td>none</td></tr>
            <tr><td>Approval withdrawal before consumption</td><td>no dedicated transition, named at <xref target="lifecycle-concepts"/></td><td>nothing of its own, and no record defines it</td><td>none</td></tr>
            <tr><td>Renunciation by the agent</td><td>no dedicated transition, see <xref target="lifecycle-principal-departure"/></td><td>nothing of its own</td><td>none</td></tr>
            <tr><td>Succession and reauthorization</td><td><xref target="lifecycle-succession"/></td><td>new authority exists and the predecessor tree is neither revived nor inherited</td><td>new root or delegation records</td></tr>
            <tr><td>Status source report</td><td><xref target="lifecycle-status-coverage"/></td><td>knowledge inside the source's declared coverage</td><td>status observation with time and coverage</td></tr>
            <tr><td>Intent</td><td><xref target="action-intent"/></td><td>the declaration verifies, and nothing about authority</td><td>action-intent receipt</td></tr>
            <tr><td>Decision</td><td><xref target="policy-decision"/></td><td>an approval exists, or a denial is recorded</td><td>policy-decision receipt issued by the enforcement boundary</td></tr>
            <tr><td>Admission to dispatch</td><td><xref target="two-phase-execution"/>, <xref target="policy-decision"/></td><td>the approval-state axis is not established without boundary state</td><td>none, open in <xref target="oq-admission-record"/></td></tr>
            <tr><td>Dispatch attempted</td><td><xref target="d2e-execution-states"/></td><td>nothing until a result</td><td>none</td></tr>
            <tr><td>Result observed</td><td><xref target="action-result"/></td><td>succeeded, failed or unknown, as the boundary observed it</td><td>action-result receipt</td></tr>
            <tr><td>Settlement or cancellation</td><td><xref target="cumulative-spend"/></td><td>reserved moved to committed, or released</td><td>boundary ledger state, settlement evidence where a profile requires it</td></tr>
            <tr><td>External effect established</td><td><xref target="receipt-evidence"/>, <xref target="d2e-effect-verification"/></td><td>established only for the claim the resolved evidence supports</td><td>separately resolved evidence</td></tr>
            <tr><td>Compensation</td><td><xref target="d2e-indeterminate"/></td><td>a new action chain that refers to the prior action</td><td>a new intent, decision and result</td></tr>
          </tbody>
        </table>

        <t>Each row is stated in full below. The closing sentence of each entry is
        what the establishing section does not establish.</t>

        <dl newline="true" spacing="normal">
          <dt>Principal relationship</dt>
          <dd>The principal signs and the agent is the subject. The authority
          needed is the principal's own signing authority. What changes is that a
          binding exists. A failure confers no authority. A binding is not a
          grant, and the binding alone does not establish that the agent holds any
          authority for that principal.</dd>

          <dt>Principal relationship ended</dt>
          <dd>A principal-binding revocation under
          <xref target="principal-binding"/> is signed by the key its
          verification_method names. The authority needed is that key's
          signing authority over the binding, which the reference
          implementation constrains to the principal's own identifier. What changes
          is that the binding is revoked. The agent's key and unrelated
          delegations are not revoked by it, and an enforcement profile defines
          which authority records depended on that binding. The artifact is the
          signed principal-binding-revocation record. Where the revocation does
          not verify, the binding stands and nothing about the agent's other
          authority is established either way.</dd>

          <dt>Principal-to-authority association</dt>
          <dd>A verifier associates the principal axis with the accepted authority
          lineage, using the applicable authority source and the principal
          evidence, under whatever standing the applicable profile or trust policy
          requires. This revision defines no dedicated artifact for it. The
          association is profile and trust-policy dependent over the binding, the
          accepted root basis and the authority-state material. Where it cannot be
          made, the association is not established, and it is not inferred from
          agent identity or from root selection alone.
          <xref target="oq-principal-authority"/> carries what this document
          requires until the arrow is settled, and states the requirement there
          in the keyword form this subsection does not use. No section of this
          revision establishes the arrow.</dd>

          <dt>Root authority basis accepted</dt>
          <dd>An issuer acts and the verifier's trust policy decides. The basis is
          one of three forms: an APS root delegation with a null parent, imported
          external authority under the importing profile's missing-facet basis and
          audience check, or a trust anchor the verifier accepts. What changes is
          that a root is selected for this action. A failure is invalid where the
          failure is established, unsupported for a reference to a non-delegation
          authority basis, and indeterminate otherwise. It is never valid.
          Acceptance does not establish which principal the authority
          represents.</dd>

          <dt>Activation</dt>
          <dd>Either time acts, for a date condition, or an attestor with a role
          the condition accepts acts, for a recorded-event condition. Already
          issued authority becomes exercisable. The verdict is valid, not yet
          effective, or not established, and an unmet condition does not make the
          grant invalid. The records are the condition and attestation records of
          <xref target="lifecycle-activation"/>, which stay in the proposed:
          namespace. The establishing subsection does not settle which clock
          governs an instant comparison, and a boundary that does not claim the
          feature does not apply the gate at all.</dd>

          <dt>Delegation</dt>
          <dd>An issuer holding a valid parent acts. The issuer equals the
          parent's subject, the parent is valid at issuance, depth remains, and
          the child is no wider than the parent under every component order. What
          changes is that a new leaf exists. On failure a conforming issuer
          refuses to mint. A minted invalid child is rejected by verification, and
          the sections that establish this arrow do not establish that such a
          child was never minted.</dd>

          <dt>Revocation</dt>
          <dd>The delegation's issuer acts, holding issuer standing over that
          delegation. Every chain containing the revoked delegation becomes
          invalid once the revocation is established, irreversibly.
          <xref target="revocation-cascade"/> establishes the transition and
          <xref target="revocation-record-format"/> specifies one format for the
          record. Evidence is a revocation record, which is a SHOULD in a format
          the applicable profile defines, and a status observation. On failure, unknown is not active and the chain is
          indeterminate. The evidence cascade state never feeds the authority
          result, and neither the presence nor the absence of a revocation record
          is an input to it.</dd>

          <dt>Suspension and release</dt>
          <dd>A party with standing over a suspension cause acts. Authority is
          inactive while any cause remains and is active again only when every
          cause is released. Release creates no new authority. An unreleased cause
          keeps authority inactive, and an unknown cause state is indeterminate.
          The establishing section defines no precedence order among causes and
          does not establish that a release restores the shape authority had
          before the cause was imposed.</dd>

          <dt>Restriction imposed or released</dt>
          <dd>A party outside the grant chain acts, or a policy the deployment
          holds tightens. The artifact stays in force and some of what it covers
          is blocked, which is the verdict restricted, or the action is denied at
          the boundary. Nothing in the chain changes and no revocation occurs. No
          record defined here carries the restriction, and
          <xref target="d2e-chain-validity"/>, which is informative, states that
          block and release are not always symmetric.</dd>

          <dt>Pinned-referent mismatch</dt>
          <dd>Nobody acts inside the delegation graph. What the grant pinned and
          what a verifier observes have come apart. An established mismatch denies
          the action under a mismatch reason, and a mismatch the verifier cannot
          establish either way leaves continuity not established with a missing
          limb named. Neither outcome makes the delegation invalid, and no record
          defined here carries the observation.</dd>

          <dt>Purpose exhaustion</dt>
          <dd>The enforcement boundary finds, from the evidence it names, that a
          declared non-time bound was reached. Authority ends, which is an ending
          of the expiry kind and not a revocation. An exhaustion record MAY be
          recorded, in the proposed: namespace. It attests what the boundary
          found and not that the purpose was met in the world, and a verifier with
          no access to the boundary's ledger reaches no exhaustion verdict for a
          use_count or budget bound from signed records alone.</dd>

          <dt>Expiry</dt>
          <dd>Time acts and no party does. Authority ceases at its signed temporal
          bound and no revocation event occurred. Issuance under an expired parent
          fails at the issuer. The establishing rule does not establish that a
          replacement grant is owed.</dd>

          <dt>Key rotation</dt>
          <dd>The identifier's controller acts, holding control of the identifier.
          The acceptable signing-key state changes and delegated authority does
          not. A signing time relative to a boundary the verifier cannot establish
          is ambiguous and is never a signature failure. The establishing sections
          do not establish which evidence fixes the signing instant.</dd>

          <dt>Key compromise</dt>
          <dd>This revision defines no transition for it. The identifier's
          controller rotates the key under <xref target="key-rotation"/>, and a
          party with standing revokes the records that depended on the compromised
          key. Neither step reaches artifacts already signed under that key, and
          <xref target="security-considerations"/> states that a model needing
          that reach has no rule here.
          <xref target="lifecycle-l9"/> records the same gap.</dd>

          <dt>Succession and reauthorization</dt>
          <dd>A currently authorized principal or authority issuer acts, holding
          current standing to grant. New authority exists and the predecessor tree
          is neither revived nor inherited. The old chain stays invalid and there
          is no silent resurrection. The establishing section does not establish
          what happens while an office is vacant.</dd>

          <dt>Status source report</dt>
          <dd>A status source acts, holding accepted standing to report rather
          than authority to mutate a grant. Verifier knowledge changes within the
          source's coverage. Conflicting or uncovered sources leave the state not
          established. A coverage block does not establish that the declared
          source set was every source that mattered.</dd>

          <dt>Intent</dt>
          <dd>The acting agent signs as itself and holds no permission to execute.
          Nothing about authority changes. Intent is not admission and the
          action-intent receipt does not establish that any decision followed.</dd>

          <dt>Decision</dt>
          <dd>A policy decision point or the boundary evaluates, and the boundary
          issues the record. A permit or narrow needs a valid selected chain and
          the applicable policy. A denial is evaluated and recorded regardless.
          What changes is that an approval exists or a denial is recorded, and
          spend is reserved at approval. A deny record is terminal and is never
          consumed. The record does not establish that the approval was
          consumed.</dd>

          <dt>Admission to dispatch</dt>
          <dd>Only the enforcement boundary acts. The approval must be unexpired
          and unconsumed, authority must still be valid at this moment, and the
          reservation must complete. <xref target="two-phase-execution"/> and
          <xref target="policy-decision"/> state those consumption semantics. No
          durable record of this transition exists in this revision, which is open
          at <xref target="oq-admission-record"/>, so a verifier without access to
          boundary state reports the approval-state axis as not established.
          Evaluation alone never consumes. A refusal before admission leaves the
          approval unconsumed. Failure after a boundary-local commit but before
          dispatch is durably established has no portable recovery semantics in
          this revision.</dd>

          <dt>Dispatch attempted</dt>
          <dd>The enforcement boundary acts under an admission. The effect adapter
          is handed the exact bound input. Holding the input does not establish
          that dispatch was attempted, and no evidence exists until a result.
          Missing result evidence is not evidence that no record exists
          elsewhere.</dd>

          <dt>Result observed</dt>
          <dd>The enforcement boundary acts under an admission. Reservation or
          settlement state changes only so far as the observed result and any
          required settlement evidence justify. The action-result receipt carries
          succeeded, failed or unknown, and its prev is the consumed decision.
          Unknown does not establish failure, does not establish absence of
          effect, does not by itself permit release of a reservation, and does not
          by itself authorize a retry.</dd>

          <dt>Settlement or cancellation</dt>
          <dd>The enforcement boundary acts under an admission. Release requires
          trusted evidence that dispatch did not occur, or a pre-dispatch
          cancellation. Reserved moves to committed, or is released. An unjustified
          release is a conformance failure. The ledger state is boundary state and
          a signature over a delegation does not establish the current cumulative
          total.</dd>

          <dt>External effect established</dt>
          <dd>An evidence issuer acts and verifier policy decides. Separately
          resolved evidence moves the external-effect axis, and only for the claim
          that evidence supports. Where it does not resolve, the effect is not
          established, and it is never inferred from the result record.</dd>

          <dt>Compensation</dt>
          <dd>A party with its own authority for the compensating action acts,
          under its own chain, decision and admission. A new action chain exists
          that refers to the prior action, carried by a new intent, decision and
          result rather than by a rewrite of the original. Where compensation
          fails the original result stands, and the compensation is not
          established.</dd>
        </dl>

        <t>What this subsection does not establish. It does not establish that the
        transitions listed are every transition an authority passes through, that
        a deployment performs them in this order, or that a verifier can observe
        any of them without the artifact or state named. Three transitions leave
        no artifact a verifier can read in this revision, and naming them here is
        not a claim that this revision covers them.</t>
      </section>

    </section>

    <section anchor="identity-scheme" numbered="true" toc="default">
      <name>Identity Scheme</name>
      <section anchor="agent-passport" numbered="true" toc="default">
        <name>Agent Passport</name>
        <t>An APS Agent Passport is a self-signed cryptographic identity
        record. The version specified here has record_type
        "aps.agent-passport" and version "2.0". Its wire object contains
        exactly the following members: passport_id, agent_id,
        verification_method, public_key_multibase, issued_at, expires_at,
        nonce, self_asserted, record_type, version, and signature. The
        self_asserted object contains a required, UTF-8-byte-sorted unique
        capabilities array and an optional display_name. A principal or owner
        identifier is not a passport member; the principal relationship is carried
        by the separate record in <xref target="principal-binding"/>.</t>
        <t>The public key is a multibase base58btc encoding of the multicodec Ed25519 <xref target="RFC8032" format="default"/> public key prefix 0xed01 followed by the 32-byte public key.
        issued_at and expires_at use the exact UTC millisecond form
        YYYY-MM-DDTHH:MM:SS.sssZ, where SS is 00 through 59, and the validity interval is
        issued_at &lt;= now &lt; expires_at. nonce is 16 bytes encoded as 32
        lowercase hexadecimal characters.</t>
        <t>The passport identifier and signature are computed as follows,
        where JCS is RFC 8785 <xref target="RFC8785"/> over validated I-JSON,
        UTF8 converts the resulting string to bytes, and || denotes byte
        concatenation:</t>
        <artwork type="ascii-art"><![CDATA[
passport_id = lowercase-hex(SHA-256(
    ASCII("APS-PASSPORT-ID-V2") || 0x00 ||
    UTF8(JCS(passport without passport_id and signature))))

signature = Ed25519-Sign(agent_private_key,
    ASCII("APS-PASSPORT-SIG-V2") || 0x00 ||
    UTF8(JCS(passport without signature)))
]]></artwork>
        <t>A valid self-signature establishes possession of the private key
        corresponding to public_key_multibase and protects the signed fields.
        It does not establish that verification_method was authorized for
        agent_id, or that any self-asserted claim is true. A verifier MUST
        report proof of possession separately from key authority. For an
        identifier that is not self-certifying, key authority is verified by
        resolving verification_method at issued_at under the identifier's own
        method and trust policy.</t>
      </section>

      <section anchor="agent-identifiers" numbered="true" toc="default">
        <name>Agent Identifiers</name>
        <t>APS is DID-method-agnostic. agent_id and verification_method use
        the syntax and resolution rules of the selected DID method
        <xref target="DID-CORE"/>. New self-certifying passports SHOULD use
        an existing generative DID method whose identifier commits to the
        signing key, such as did:key <xref target="DID-KEY"/>. Rotation of a
        self-certifying key changes that identifier.</t>
        <t>Deployments that require one stable agent identifier across key
        rotation MUST use an update-capable DID method and resolve the
        verification method at the artifact's signing time, for example by a
        method-defined versionId or versionTime. A successor statement between
        two self-certifying identifiers documents a claimed migration; it does
        not transfer delegations or establish that the identifiers are
        equivalent.</t>
        <t>Earlier APS implementations emitted the experimental identifier
        did:aps:z&lt;base58btc-multicodec-key&gt;. A compatibility verifier MAY
        read that exact immutable form. It MUST treat the embedded key as the
        complete identifier state, MUST reject the earlier raw-hex alias, and
        MUST treat rotation as a new identifier. Conforming new-write paths in
        this revision do not emit did:aps identifiers.</t>
      </section>

      <section anchor="principal-binding" numbered="true" toc="default">
        <name>Principal Binding</name>
        <t>A passport does not identify the person or organization on whose
        behalf an agent acts. That relationship is expressed by a
        PrincipalBindingV1 record with record_type "aps.principal-binding" and
        version "1.0". The record contains binding_id, agent_id, principal_id,
        verification_method, audiences, authority_profiles, status_uri,
        issued_at, expires_at, nonce, and signature. audiences and
        authority_profiles are non-empty, UTF-8-byte-sorted unique arrays. The
        principal signs the record with the key named by verification_method.
        The record is therefore scoped rather than a global assertion that the
        agent represents the principal for every purpose.</t>
        <t>binding_id uses the tag "APS-PRINCIPAL-BINDING-ID-V1" and the same
        construction as passport_id, with binding_id and signature absent.
        signature uses the tag "APS-PRINCIPAL-BINDING-SIG-V1" and covers the
        binding with signature absent. Both tags are followed by one zero byte
        before the JCS bytes.</t>
        <t>Claim levels are verifier results, not labels selected by the
        issuer. A principal string found only in a self-signed or legacy
        passport is self_asserted. A binding whose principal signature and
        signing-key authority verify is principal_attested. A verifier reports
        externally_verified_principal only when its own trust policy has also
        verified the principal identity. A verifier MUST NOT infer a higher
        level from the presence of a field.</t>
        <t>Binding revocation is a separate signed record with record_type
        "aps.principal-binding-revocation", version "1.0", revocation_id,
        binding_id, principal_id, verification_method, revoked_at, reason_code,
        nonce, and signature. Its identifier and signature use the tags
        "APS-PRINCIPAL-BINDING-REVOCATION-ID-V1" and
        "APS-PRINCIPAL-BINDING-REVOCATION-SIG-V1", respectively. Revoking a
        principal binding does not revoke the agent's key or unrelated
        delegations; an enforcement profile defines which authority records
        depended on that binding.</t>
      </section>

      <section anchor="key-rotation" numbered="true" toc="default">
        <name>Key Rotation and Historical Verification</name>
        <t>An update-capable identifier MAY rotate its signing key. A retired
        key is eligible only for artifacts whose signing time falls within the
        key's method-defined validity interval. A resolver MUST select the key
        version authorized at the artifact's issued_at; selecting the key that
        is current at verification time is insufficient.</t>
        <t>The artifact timestamp is an issuer claim. This document does not
        define a trusted timestamping service. When key retirement makes the
        result depend on whether an artifact was signed before a boundary, a
        profile MUST identify an acceptable timestamp, transparency-log, or
        equivalent evidence source. Without that evidence the key-authority
        result is indeterminate, even when the artifact signature is
        cryptographically valid. This requirement extends to any historical
        key-selection boundary, including a relying party's trust-policy pin
        used as a key-selection input. Without acceptable evidence that the
        artifact was signed on one side of such a boundary, the pin result is
        the ambiguous outcome of <xref target="external-signer-keys"/>.</t>
        <t>A verifier MUST report that indeterminate result through the
        ambiguous resolution outcome of <xref target="external-signer-keys"/>, whose outcome name is
        <tt>KEY_AMBIGUOUS</tt>, and MUST NOT report it as a key that was not
        found, as structurally malformed key material, or as a signature
        failure. An issuer's unverified issued_at claim MUST NOT on its own
        satisfy the evidence requirement above. This document defines no
        outcome specific to a signing time that cannot be established. A
        profile that needs that distinction carries it alongside the
        ambiguous outcome, not instead of it.</t>
      </section>

      <section anchor="external-signer-keys" numbered="true" toc="default">
        <name>Key Resolution for External and Evidence Signers</name>
        <t><xref target="agent-passport"/>, <xref target="agent-identifiers"/> and <xref target="key-rotation"/> govern an agent's own signing key and its
historical resolution.  A verifier also encounters signatures from
parties outside the delegation chain: evidence issuers, counterparty
systems, and attesting services.  For these external signers this
document specifies a resolution model rather than a registry.</t>
        <t>An external signer identifier MAY be hash-bound to its subject:
        the identifier carries a digest of the subject identity (for
        example, a DID whose method-specific identifier is the SHA-256
        of a server identity), and the resolver checks the presented
        subject against that digest before any key material is trusted.
        A hash-bound identifier is a binding, not a locator: key
        material located through the subject's own endpoint is accepted
        only when the subject hashes to the identifier, which excludes the
        case in which one tenant's key material is
        resolved under another tenant's identifier. A hash-bound locator
        presented without the subject it binds MUST be rejected.</t>
        <t>Published key material MAY carry per-key validity windows. Key
        selection is gated on the artifact's own signed issuance time,
        evaluated against each key's window; a verifier MUST NOT select
        whichever key is current at verification time. A key set in
        which a key identifier is duplicated is malformed. The duplication
        makes the set unusable as a whole rather than key by key, and is
        reported as the ambiguous outcome. A relying party's trust-policy pin, where it
        is used as a key-selection input, is evaluated at the artifact's
        issued_at under the same rule. A verification-time cutoff a
        deployment applies for its own reasons is reported on its own axis
        and MUST NOT be folded into the key-selection result.</t>
        <t>Resolution outcomes preserve failure structure. At minimum a
        resolver distinguishes: resolved; subject or key not found;
        ambiguous (including duplicate key identifiers); structurally
        malformed key material; transport unreachability; and an
        unsupported identifier scheme. Resolution is fail-closed by
        default. A deployment MAY adopt a fail-open policy for transport
        unreachability only; malformed key material that loads but is
        wrong is not a transient transport condition and MUST fail
        closed even under such a policy. A resolution outcome degraded
        by a fail-open policy MUST NOT be treated as a positive
        verification, consistent with <xref target="receipt-evidence"/>.</t>
        <t>Each failure outcome carries a stable outcome name. The five
        failure outcomes above are named <tt>KEY_NOT_FOUND</tt>,
        <tt>KEY_AMBIGUOUS</tt>, <tt>KEY_MATERIAL_MALFORMED</tt>,
        <tt>KEY_UNREACHABLE</tt> and <tt>KEY_SCHEME_UNSUPPORTED</tt>. The
        resolved outcome carries no failure name. This document
        defines no further key-resolution outcome. Outcomes map to
        verification states as follows. An unsupported identifier scheme is
        unsupported. Subject or key not found, ambiguous, structurally
        malformed key material, and transport unreachability are each
        indeterminate, and a verifier MUST report them under distinct outcome
        names rather than collapse them into one. Structurally malformed key
        material MUST NOT be reported as a signature failure, because no
        signature check ran. The key-authority case of <xref target="key-rotation"/>, in which
        the artifact's signing time relative to a key-validity boundary cannot
        be established from acceptable evidence, is reported as ambiguous.</t>
      </section>

      <section anchor="attestation-provenance" numbered="true" toc="default">
        <name>Attestation Provenance and Composition</name>
        <t>Identity claims about an agent arrive with different evidentiary
        weight, and a protocol that flattens them invites over-trust.
        APS distinguishes four provenance tiers for attested signals:
        observed (the receiving infrastructure itself recorded the
        signal, such as transport characteristics at connection
        termination); infrastructure-attested (a runtime or sandbox
        gateway signed a claim about the agent's execution environment);
        provider-attested (a third-party provider confirmed a claim,
        such as an account or tenant relationship); and self-declared
        (the agent asserts the claim, unverified).</t>
        <t>In the reference implementation an attested signal carries: a
        signal key; a digest of the signal value rather than the raw
        value; its provenance tier; a verification status distinguishing
        cryptographically verified, observed without cryptographic
        proof, declared and unverified, and verification attempted but
        failed; a stability class indicating how long the signal remains
        constant; the attesting party; and issuance and expiry times. A
        signal's provenance tier and its verification status are
        independent axes: a provider-attested signal whose signature was
        never checked remains at declared, and a verifier MUST NOT infer
        verification from tier.</t>
        <t>Two attestation record shapes are published with the reference
        implementation. A runtime attestation is a signed claim by an
        attesting infrastructure party about the agent's execution
        environment, bound by challenge-response: it carries a nonce
        supplied by the requesting issuer and a digest of the subject
        public key, so that the attestation cannot be replayed for a
        different request or a different key. A provider attestation is
        a signed or verifiable confirmation by a third-party provider of
        a subject relationship, carrying a digest of the subject
        identifier and the verification method used. This section defines the tier and status terminology that profiles import; it does not define a general attested-signal wire format and imposes no verifier behavior beyond the tier-independence rule above. The record shapes are illustrated by the reference implementation. How a deployment weighs, combines, or scores
        composed attestations is deployment policy and is not specified
        by this document.</t>
      </section>
    </section>

    <section anchor="delegation" numbered="true" toc="default">
      <name>Delegation and Authority Attenuation</name>
      <section anchor="faceted-attenuation" numbered="true" toc="default">
        <name>Faceted Authority Attenuation</name>
        <t>AuthorityDelegationV1 is the signed authority record specified by
this revision. It has record_type "aps:authority-delegation:v1", version
        "1.0", delegation_id, parent_delegation_id, issuer, subject,
        verification_method, issued_at, nonce, authority, and signature.
        parent_delegation_id is null only for a root selected by verifier trust
        policy. authority contains exactly seven required facets: scope,
        spend, depth, time, reputation, values, and reversibility. A missing
        facet is invalid rather than an implicit unconstrained value.</t>
        <artwork type="ascii-art"><![CDATA[
{
  "record_type": "aps:authority-delegation:v1",
  "version": "1.0",
  "delegation_id": "sha256:<64-lowercase-hex>",
  "parent_delegation_id": null,
  "issuer": "did:example:principal",
  "subject": "did:example:agent",
  "verification_method": "did:example:principal#key-1",
  "issued_at": "2026-07-18T22:00:00.000Z",
  "nonce": "<32-lowercase-hex>",
  "authority": {
    "scope": {"profile":"aps-hierarchical-v1",
              "grants":["commerce:checkout"]},
    "spend": {"mode":"bounded","unit":"iso4217:USD:minor",
              "per_action":"5000","cumulative":"10000"},
    "depth": {"remaining":2},
    "time": {"not_before":"2026-07-18T22:00:00.000Z",
             "not_after":"2026-07-19T22:00:00.000Z"},
    "reputation": {"profile":"aps-score-0-100-v1","ceiling":80},
    "values": {"profile":"aps-values-identifiers-v1",
               "required":["F-001","F-003"]},
    "reversibility": {"profile":"aps-tci-v1",
                      "ceiling":"compensable"}
  },
  "signature": "<128-lowercase-hex>"
}
]]></artwork>
        <t>The spend unit in that example is one deployment's choice. A unit is an
        opaque string compared by its UTF-8 bytes, as <xref target="policy-chain"/>
        states, and the iso4217:USD:minor form carries no meaning this document
        defines.</t>
        <t>The object schema is closed. All timestamps use exact UTC
        milliseconds with a second value from 00 through 59. nonce is 16 random bytes. delegation_id and signature
        are computed as follows:</t>
        <artwork type="ascii-art"><![CDATA[
delegation_id = "sha256:" || lowercase-hex(SHA-256(
    ASCII("APS-AUTHORITY-DELEGATION-ID-V1") || 0x00 ||
    UTF8(JCS(delegation without delegation_id and signature))))

signature = Ed25519-Sign(issuer_private_key,
    ASCII("APS-AUTHORITY-DELEGATION-SIGNATURE-V1") || 0x00 ||
    UTF8(JCS(delegation without signature)))
]]></artwork>
        <t>A verifier resolves verification_method for issuer at issued_at.
        A valid self-issued root is not trusted automatically; acceptance of a
        root is verifier policy.</t>
      </section>

      <section anchor="component-orders" numbered="true" toc="default">
        <name>Component Orders</name>
        <t>Let child be directly delegated from parent. child is no wider than
        parent only when every comparison below succeeds. Profiles on a facet
        MUST match; a profile change is unsupported rather than narrower.</t>
        <dl>
          <dt>Scope</dt>
          <dd>Scope grants use ASCII colon-separated segments. "*" covers all
          grants; a wildcard is otherwise permitted only as the terminal
          segment ":*". An exact grant covers itself. A terminal wildcard
          p:* covers p and every grant beginning p:. Every child grant MUST be
          covered by a parent grant. Arrays are UTF-8-byte-sorted, unique, and
          irredundant.</dd>
          <dt>Spend</dt>
          <dd>Spend is either {"mode":"unbounded"} or a bounded object with
          unit, per_action, and cumulative. Amounts are canonical unsigned
          decimal integers from 0 through 9223372036854775807; per_action MUST
          NOT exceed cumulative. A bounded child under a bounded parent uses
          the same unit and no greater limit. A bounded child under an
          unbounded parent is narrower. An unbounded child under a bounded
          parent is invalid. APS performs no unit conversion.</dd>
          <dt>Depth</dt>
          <dd>remaining is an integer from 0 through 255. A parent with zero
          remaining cannot issue a child. Otherwise child.remaining MUST be
          no greater than parent.remaining minus one.</dd>
          <dt>Time</dt>
          <dd>The half-open child interval [not_before, not_after) MUST be
          contained in the parent interval. A child's not_before MUST NOT
          predate its issued_at, and a child MUST be issued while the parent is
          valid. Relative durations are converted to absolute instants before
          signing and do not appear in the wire record.</dd>
          <dt>Reputation</dt>
          <dd>ceiling is an integer from 0 through 100. A child ceiling MUST
          NOT exceed its parent. Runtime authorization uses the lesser of the
          resolved subject score and the signed ceiling. Missing, stale, or
          profile-incompatible reputation evidence yields indeterminate when
          that evidence is required.</dd>
          <dt>Values</dt>
          <dd>required is a sorted unique array of profile-defined identifiers.
          A child MUST contain every parent-required identifier and MAY add
          identifiers. This comparison preserves requirements; it does not
          establish that the subject complies with them.</dd>
          <dt>Reversibility</dt>
          <dd>The order from narrowest to widest is tentative, compensable,
          irreversible. A child ceiling MUST NOT move to the right. An unknown
          or unresolved action classification is treated as irreversible.
          This ceiling constrains authority; the realized reversibility of an
          action is determined by its effects and need not compose across a
          chain.</dd>
        </dl>
        <t>These comparisons define a componentwise partial order over the
        seven-facet vector. Scope narrows by coverage, Values narrows by adding
        requirements, and every other facet follows its rule above. A valid
        child is less than or equal to its parent in every component. The
        fuller formalization appears in <xref target="APS-NARROWING"/> and
        <xref target="APS-FACETED"/>.</t>
      </section>

      <section anchor="chain-verification" numbered="true" toc="default">
        <name>Chain Verification</name>
        <t>A verifier processes a root-to-leaf chain in this order: closed
        schema and canonical values; delegation_id; historical signing-key
        resolution and signature; duplicate identifiers; root trust;
        parent_delegation_id; issuer-to-subject continuity; child issuance
        time; the seven facet comparisons in <xref target="component-orders"/>; current validity;
        and revocation state for every member. A cycle, repeated identifier,
        broken parent link, or issuer discontinuity invalidates the chain.</t>
        <t>That order is phase-major over the whole root-to-leaf chain. A
        verifier applies each listed phase to every member before it applies
        the next phase. The first phase in which any member fails determines
        the returned state and failure reason, and within that phase the lowest
        member index determines which failure is reported. Where two faults
        fall inside one phase, this document states no order between them and
        a verifier MAY report either. Inside the closed schema and canonical
        values phase, recognition of record_type and version precedes
        evaluation against the v1 schema, and a record whose record_type or
        version is not recognized is unsupported and is not additionally
        judged against that schema. A root member's null parent_delegation_id
        is checked in the parent_delegation_id phase and not earlier.</t>
        <t>Verification returns one of valid, invalid, indeterminate, or
        unsupported with a failure reason the verifier reports. This document
        defines no failure-code vocabulary for chain verification. An unavailable or stale
        revocation result is indeterminate. An unsupported facet profile is
        unsupported. Cryptographic or attenuation failure is invalid. A root the
        verifier's trust policy does not accept is invalid, with a root-trust
        reason at the root's index, and a trust policy that is unavailable or
        cannot decide is indeterminate under the same rule as an unavailable
        revocation result. A
        caller MUST NOT collapse indeterminate or unsupported into valid.</t>
        <t>A revocation-resolution outcome that a verifier does not recognize
        MUST NOT be treated as active. The revocation state is not
        established, and the chain result is indeterminate under the same rule
        as an unavailable or stale result. This applies to any answer outside
        the set a verifier recognizes, including a value a later revision of
        this document may define, and to a resolver that does not answer at
        all.</t>
        <t>Two phase-scope rules follow from the phases above. In the closed
        schema and canonical values phase, a timestamp MUST carry a second
        value from 00 through 59. A verifier MUST reject the second value 60
        wherever it appears, and MUST NOT consult a leap-second table. This
        is narrower than <xref target="RFC3339"/>, which admits the second
        value 60 at the end of a month in which a leap second occurs. In the child issuance
        time phase, the
        rule that a record's not_before MUST NOT predate its issued_at applies
        only to a member whose parent_delegation_id is not null. A root MAY
        take effect before its own issued_at, and a verifier MUST NOT report a
        schema or attenuation failure on that basis alone.</t>
        <t>Each action selects one root-to-leaf authority chain. A verifier
        MUST NOT union scopes or budgets from multiple chains. Cross-principal
        composition requires a separate profile.</t>
      </section>

      <section anchor="cumulative-spend" numbered="true" toc="default">
        <name>Cumulative Spend Across a Delegation Subtree</name>
        <t>The signed cumulative value is a ceiling for the entire delegation
        subtree, not an entitlement reserved for each child. Before an action
        with amount q is dispatched, an enforcement boundary performs one
        atomic transaction over every bounded delegation in the selected
        root-to-leaf chain. It verifies the common unit and each per_action
        limit, verifies committed plus reserved plus q is no greater than each
        cumulative limit, and reserves q against every bounded ancestor or
        against none.</t>
        <t>The reservation is keyed by action_ref. A request whose footprint
        matches an unsettled and uncancelled reservation is an idempotent
        retry. A request under the same action_ref whose unit, amount or
        bounded ancestor set differs is conflicting reuse and MUST be
        rejected. <xref target="policy-chain"/> states the same rule in full. Successful settlement moves
        every ancestor counter atomically from reserved to committed.
        Cancellation releases a reservation only before dispatch or after
        trusted evidence that dispatch did not occur. This prevents two
        siblings from each consuming a parent's complete cumulative budget.</t>
        <t>A distributed deployment needs one linearizable accounting ledger
        for the authority tree. Without it, live spend status is
        indeterminate. Signatures establish static limits; they do not
        establish the current cumulative total.</t>
      </section>

      <section anchor="revocation-cascade" numbered="true" toc="default">
        <name>Revocation and Cascade</name>
        <t>Any delegation MAY be revoked by its issuer. Revocation is
        irreversible. The enforcement gateway MUST recheck revocation status
        at the moment the approval is consumed to admit dispatch, not only at
        the moment the policy decision is issued. <xref target="two-phase-execution"/>, <xref target="policy-decision"/> and <xref target="action-result"/>
        use the same phrase for that moment.</t>

        <t>A revocation takes effect for a verifier at the point that
        verifier establishes it under the revocation and freshness rules
        of <xref target="chain-verification"/>. From that point the verifier MUST NOT accept as
        valid any chain that contains the revoked delegation. This holds
        whether or not any further record exists for a descendant of the
        revoked delegation, and whether or not that descendant was ever
        enumerated. A descendant delegation does not remain valid
        pending descendant-specific cascade evidence. This document does
        not state that a revocation takes effect for every verifier at
        the same instant. Until a verifier has established the
        revocation, its result follows the freshness and staleness rules
        of <xref target="chain-verification"/>.</t>

        <t>A revoking party MAY additionally produce the cascade evidence
        described in <xref target="revocation-evidence"/>. That evidence records how a
        revocation was processed. It is not what makes a descendant
        chain invalid, and its absence MUST NOT be read as leaving a
        descendant chain valid.</t>

        <t>An implementation reports two results, and MUST NOT collapse
        them into one field. The authority result for a chain is valid,
        invalid, indeterminate, or unsupported, as specified in
        <xref target="chain-verification"/>. The evidence cascade state for a revocation is
        complete, incomplete, or indeterminate, as specified in
        <xref target="revocation-evidence"/>. An evidence cascade state MUST NOT be reported as
        an authority result.</t>

        <section anchor="revocation-evidence" numbered="true" toc="default">
          <name>Revocation Evidence</name>
          <t><xref target="revocation-cascade"/> specifies revocation behavior. Behavior alone
          leaves a verifier dependent on the revoking system's current
          state. This section specifies the evidence through which
          revocation history is verifiable from records where a profile
          defines that evidence. The model
          separates two questions that MUST NOT collapse into one
          mutable lookup: whether a delegation is currently valid,
          answerable from state, and whether and why a revocation
          occurred, verifiable from signed records.</t>

          <t>The records defined in this section are evidence about how a
          revocation was recorded and processed. A verifier MUST NOT
          treat the presence or the absence of a record defined in this
          section as an input to the authority result of <xref target="chain-verification"/>.</t>
          <t>A revocation SHOULD be evidenced by a signed revocation record,
          in a format defined by the applicable profile, carrying at minimum
          the revoked delegation's identity, the revocation time inside the
          signed content, a reference to the revoking authority, and a
          machine-readable reason code with optional free-text detail. This
          document defines no wire encoding, identifier construction,
          signature construction, reason-code vocabulary or signer rule for
          that record. Where no such record is available, current
          revocation state remains governed by the resolution and freshness
          rules of <xref target="chain-verification"/>.</t>

          <t>A record derived from a cascade is evidence about a
          descendant delegation. It carries no authority, it is not a
          revocation of that descendant, and it MUST NOT change an
          authority result. Where such a record is produced, it MUST
          carry a reference to the originating revocation and the
          cascade transaction identity of that originating revocation.
          A cascade-derived record is produced only where the originating
          revocation record exists. That transaction identity is bound to the content of the
          originating revocation and is shared by every record the
          cascade produces. This document does not define a wire format
          for a cascade-derived record and does not state who signs
          one.</t>

          <t>A verifier that holds the originating revocation record and a
          profile for its format establishes why a descendant chain is
          invalid from that record and the signed chain. It does not need a
          record naming the descendant, and the absence of one is not a
          defect in the chain. A verifier that does not hold both the
          originating revocation record and a profile for its format reports
          the evidence cascade state of <xref target="revocation-cascade"/> as indeterminate, which
          does not change the authority result.</t>
          <t>Cascade completeness (INV-4, <xref target="core-invariants"/>) is a claim about
          evidence processing. It is not verifiable from individual
          revocation records, because a partially processed subtree is
          indistinguishable, record by record, from a completely
          processed one. A cascade-completion record, where a profile defines
          one, carries the cascade transaction identity of the originating
          revocation and states that every descendant in a defined set was
          processed.</t>

          <t>A party MUST NOT emit a cascade-completion record unless it
          can state the basis on which that set was complete when the
          originating revocation took effect, and what prevented a
          further descendant from entering that set afterwards. This
          document does not define such a basis. A party without one
          reports the evidence cascade state of <xref target="revocation-cascade"/> as
          incomplete or indeterminate, which does not weaken the
          verifier obligation in <xref target="revocation-cascade"/>.</t>

          <t>A verifier MUST NOT read an incomplete record set as a
          completely processed subtree. An incomplete or indeterminate
          evidence cascade state does not make any chain valid.</t>

<!-- RDN-10 RULED 2026-09-24.
-04 uses SHOULD for signed revocation evidence and leaves its wire format profile-defined.
The reference SDKs implement a direct revocation record, but a core wire format remains deferred pending independent conformance coverage. -->

        </section>

  <section anchor="revocation-record-format" numbered="true" toc="default">
    <name>Revocation Record Format</name>

    <t><xref target="revocation-evidence"/> states what a revocation record
    carries at minimum and defines no wire encoding, identifier construction,
    signature construction, reason-code vocabulary or signer rule for it. This
    section specifies one format that carries those members. A profile MAY
    define others.</t>

    <t>The record type is "aps:authority-revocation:v1" at version "1.0". The
    schema is closed. The members below are all a record carries, and detail is
    the only OPTIONAL one.</t>

    <t>This name is in the aps: namespace rather than the proposed: namespace
    other features of this revision use, because its semantics are fixed for this
    record_type and version,
    its wire shape is specified below, a fixture family exercises it against
    distinct negative cases, and both reference implementations map to it. The
    record type is inside the signed content, so the name is part of every
    preimage in this subsection. Wire compatibility: the released packages emit
    and verify records under this exact record_type and version, so a record
    minted by either of them is a record under this subsection.</t>

    <artwork type="ascii-art"><![CDATA[
  {
    "record_type": "aps:authority-revocation:v1",
    "version": "1.0",
    "revocation_id": "sha256:<64-lowercase-hex>",
    "delegation_id": "sha256:<64-lowercase-hex>",
    "revoker": "did:example:principal",
    "verification_method": "did:example:principal#key-1",
    "revoked_at": "2026-03-15T12:00:00.000Z",
    "reason_code": "issuer-key-compromise",
    "detail": "Issuer key retired after hardware replacement.",
    "cascade_transaction_id": "sha256:<64-lowercase-hex>",
    "nonce": "<32-lowercase-hex>",
    "signature": "<128-lowercase-hex>"
  }
  ]]></artwork>

    <t>delegation_id names the revoked delegation. revoker is that delegation's
    issuer, and <xref target="revocation-cascade"/> names no other party for a
    direct revocation, so this format covers issuer revocation and no other.
    A record whose revoker member differs from the named delegation's issuer is
    invalid under a revoker-not-issuer reason code, and a conforming issuer does
    not issue one. Both reference implementations decide such a record invalid
    under that reason code and both refuse to issue one, which is the behavior
    <xref target="implementation-status"/> records.
    verification_method names the key that signed. All
    timestamps use exact UTC milliseconds with a second value from 00 through
    59. nonce is 16 random bytes. A record carrying a record_type other than
    "aps:authority-revocation:v1", or a version other than "1.0", is unsupported
    rather than invalid.</t>

    <t>A record under this format MUST carry revoked_at. revoked_at is a member,
    so the revocation time is inside every preimage below, and the closed schema
    leaves no member that could carry a revocation time outside the signed
    content.</t>

    <t>The three identifiers and the signature are constructed as follows,
    following the pattern of <xref target="faceted-attenuation"/>. Each domain
    tag is followed by one zero byte.</t>

    <artwork type="ascii-art"><![CDATA[
  cascade_transaction_id = "sha256:" || lowercase-hex(SHA-256(
      ASCII("APS-AUTHORITY-REVOCATION-CASCADE-TRANSACTION-ID-V1")
      || 0x00 ||
      UTF8(JCS(revocation without revocation_id, signature and
               cascade_transaction_id))))

  revocation_id = "sha256:" || lowercase-hex(SHA-256(
      ASCII("APS-AUTHORITY-REVOCATION-ID-V1") || 0x00 ||
      UTF8(JCS(revocation without revocation_id and signature))))

  signature = Ed25519-Sign(revoker_private_key,
      ASCII("APS-AUTHORITY-REVOCATION-SIGNATURE-V1") || 0x00 ||
      UTF8(JCS(revocation without signature)))
  ]]></artwork>

    <t>revocation_id is inside the signature preimage, so the identifier is
    signed rather than carried as a label beside the signature. A verifier MUST
    recompute cascade_transaction_id and revocation_id from the record's own
    content before it checks the signature. A verifier resolves
    verification_method for the revoked delegation's issuer at revoked_at, not
    for the revoker member the record carries, so no field inside a revocation
    selects the key that authorizes it. revoked_at is the signing instant for key
    selection, so the key version that has to be authorized is the one authorized
    at revoked_at and not the one current at verification time, which is the
    historical selection rule of <xref target="key-rotation"/>.</t>

    <t>cascade_transaction_id is derived from the record's own originating
    content rather than chosen by the party that issues it, so a verifier
    recomputes it instead of accepting the value written there. It is the
    transaction identity that <xref target="revocation-evidence"/> says every
    record one cascade produces shares. This section defines the direct
    revocation only. It defines no cascade-derived record and no
    cascade-completion record.</t>

    <t>A revocation evidenced by a record under this format satisfies the SHOULD
    in <xref target="revocation-evidence"/>.</t>

    <t>Revocation is irreversible (INV-5, <xref target="core-invariants"/>). A
    party that records one of these MUST NOT replace a record it already holds
    for the same delegation_id. A later valid record naming that delegation
    leaves the earlier one in place.</t>

    <t>reason_code is a non-empty string. This document defines no vocabulary
    for its value and no rule relating a value to an authority result. No family
    named in the status block below varies a reason-code value, so nothing here
    is a statement about which values an implementation uses.</t>

    <t>This section does not establish that this is the format
    <xref target="revocation-evidence"/> requires, and does not establish that a
    record under this format is an input to the authority result of
    <xref target="chain-verification"/>. The record is evidence in the sense of
    <xref target="revocation-evidence"/>, and the prohibition stated there
    applies to it unchanged: neither the presence nor the absence of the record
    is an input to that result. It does not establish that a cascade was
    processed, that a subtree was completely processed, or that any descendant
    chain is invalid, which follows instead from
    <xref target="revocation-cascade"/> and the signed chain. It does not
    establish that a recorded record is persistent, and it states nothing about
    how a party keeps the first-wins property above under concurrent writers. It
    states nothing about the recheck at the next authorization boundary required
    by <xref target="revocation-cascade"/>.</t>

    <t>Requirements. APS-REC-REVOCATION-TIME-SIGNED, a record carries
    revoked_at, exercised by ARR-04. APS-REC-REVOCATION-UNKNOWN-TYPE-UNSUPPORTED,
    a record_type or version other than the ones named is unsupported rather
    than invalid, exercised by ARR-05. APS-REC-REVOCATION-RECOMPUTE-IDS, a
    verifier recomputes cascade_transaction_id and revocation_id from the
    record's own content before checking the signature, exercised by ARR-02 and
    ARR-06, with ARR-03 covering the signature preimage.
    APS-REC-REVOCATION-FIRST-WINS, a party does not replace a record it already
    holds for the same delegation_id, exercised by ARR-07 and ARR-08.
    APS-REC-REVOCATION-REVOKER-IS-ISSUER, a record whose revoker member differs
    from the named delegation's issuer is invalid under a revoker-not-issuer
    reason code and a conforming issuer does not issue one, specified, not
    exercised: no vector in the family presents a revoker other than the
    issuer.</t>

    <t>Status: Candidate feature. Normative for an implementation claiming this feature, not a requirement of APS Core conformance. Related fixture families:
    authority-revocation-record, 8 vectors, 6 under record verification and 2
    under store first-wins. Both reference runners reported 8 pass, 0 fail, 0
    not_supported, asserting the state, the valid flag and the full failure list
    including message strings: TypeScript against agent-passport-system 7.2.0
    from npm, and Python against agent-passport-system 4.2.0 from PyPI. The
    family is merged into the conformance suite at commit
    5829e2ff00d75f49ce21e9d87e756658deb1ef33. This subsection is a Candidate
    feature because the format is one format under the SHOULD of the previous
    subsection, and supporting it is not a requirement of APS Core. Exercised requirements: APS-REC-REVOCATION-TIME-SIGNED, APS-REC-REVOCATION-UNKNOWN-TYPE-UNSUPPORTED, APS-REC-REVOCATION-RECOMPUTE-IDS, APS-REC-REVOCATION-FIRST-WINS. Implemented requirements: APS-REC-REVOCATION-TIME-SIGNED, APS-REC-REVOCATION-UNKNOWN-TYPE-UNSUPPORTED, APS-REC-REVOCATION-RECOMPUTE-IDS, APS-REC-REVOCATION-FIRST-WINS, APS-REC-REVOCATION-REVOKER-IS-ISSUER. Related implementation surfaces: agent-passport-system 7.2.0 (npm),
    agent-passport-system 4.2.0 (PyPI).</t>

  </section>
      </section>

      <section anchor="core-invariants" numbered="true" toc="default">
        <name>Core Invariants</name>
        <t>The protocol specifies eight invariants: INV-1 (Identity
Verifiability), INV-2 (Scope Monotonic Narrowing), INV-3 (Spend Limit
Narrowing), INV-4 (Cascade Completeness), INV-5 (Revocation
Irreversibility), INV-6 (Intent-Receipt Binding), INV-7 (Authority
Attribution Completeness), and INV-8 (Signature Integrity).  INV-4 is
a claim about evidence processing, reported as the evidence cascade
state of <xref target="revocation-cascade"/>, and is not an input to the authority result.  It
is verifiable only from a completion record whose basis <xref target="revocation-evidence"/>
leaves undefined.  The signed receipt layer in <xref target="signed-receipts"/> elaborates
INV-6.  INV-7 requires every governed action to identify an acting
agent, an authority path, and a receipt context.  It does not concern
contribution-attribution or beneficiary-attribution, which are
outside the scope of this document as described in <xref target="attribution-axes"/>.</t>
        <t>INV-2, INV-3, and INV-8 are enforced at issuance, not only at
        verification. An issuer minting a child delegation MUST verify
        the parent delegation's signature and temporal validity before
        signing the child, and MUST refuse to issue under an expired,
        not-yet-valid, or revoked parent. Issuance from an expired
        parent MUST fail at the issuer; it MUST NOT produce a delegation
        whose invalidity is left for a later verifier to discover.
        Verification-time checking remains required (<xref target="chain-verification"/>), but a
conforming issuer does not rely on it as the sole enforcement point:
a delegation that was invalid at issuance never becomes valid later.</t>
      </section>
    </section>

    <section anchor="policy-chain" numbered="true" toc="default">
      <name>Policy Chain</name>
      <t>APS defines a three-record policy chain: an action-intent record in
which the agent declares the intended action; a policy-decision
record in which the policy engine returns permit, deny, or narrow,
with narrow carrying the reduced authority and applied constraints;
and an action-result record in which the enforcement boundary records
the observed execution result.  The policy engine splits into a
deterministic gate (scope, signature, revocation, authority path,
spend) and an advisory evaluation path (deception,
proportionality).  The structure and verification of each signed
record are specified in <xref target="signed-receipts"/>.</t>
      <t>The spend check in the deterministic gate compares amounts only
      within a declared unit. When the action's declared unit
      and the governing delegation's declared unit differ, the
      gate MUST deny; it MUST NOT compare raw numeric amounts across
      units, and it MUST NOT apply a conversion. When the action does not declare a unit, the
amount is evaluated under the delegation's resolved unit
(<xref target="component-orders"/>); this is a defined interpretation rule, not a verifier
assumption. Deployments
      handling monetary spend SHOULD require actions to declare their
      unit, and a profile MAY require the gate to deny when it
      is undeclared.</t>
      <t>A unit is an opaque non-empty string. This document defines no
      grammar for unit values. Two units are the same unit when their
      UTF-8 byte sequences are equal, and are
      different units otherwise. An implementation MUST NOT reject a unit for
      failing a grammar this document does not state, and MUST NOT treat two
      unequal unit strings as one unit because they appear related.</t>

      <t>A delegation's spend value is a limit fixed at issuance. A signed
      delegation is immutable and cannot carry mutable state; live spend is
      enforcement-boundary state. A cumulative limit applies to the complete
      delegation subtree, not independently to each descendant. Before
      dispatch, the boundary MUST atomically reserve the proposed amount
      against every bounded ancestor in the selected root-to-leaf chain. It
      MUST dispatch only if the reservation succeeds for all of them. After
      settlement, the boundary atomically moves the reservation to committed
      spend for every affected ancestor. This all-or-none operation prevents
      sibling delegations and concurrent requests from overspending a shared
      ancestor. Signatures establish the static limits; the accounting ledger
      establishes the live totals.</t>

      <t>A reservation is keyed by action_ref. Its footprint is the
      action_ref, the unit, the amount, and the set of bounded ancestor
      delegation_id values in the selected chain. Unbounded ancestors do not
      contribute to that footprint. A request presenting a footprint already
      reserved and not yet settled or cancelled is a retry of the same
      reservation, and the boundary MUST NOT reserve a second amount for it.
      A request under the same action_ref whose unit, amount or bounded
      ancestor set differs is conflicting reuse, and the boundary MUST reject
      it. After a reservation is cancelled, a later request carrying the same
      footprint MUST reserve again.</t>

      <section anchor="action-reference" numbered="true" toc="default">
        <name>Action Reference Computation</name>
        <t>Each governed action is identified by an action_ref under the
        profile "aps-action-ref-v2". The reference commits to who is acting,
        what operation is requested, where it will occur, the exact payload,
        the authority scopes needed, when the intent was issued, and a
        replay-resistant nonce. The input object has exactly these members:</t>
        <artwork type="json"><![CDATA[
{
  "profile": "aps-action-ref-v2",
  "agent_id": "did:key:z6Mk...",
  "action_type": "commerce_preflight",
  "target": "https://api.example/payments",
  "payload_ref": "<64 lowercase hexadecimal characters>",
  "scope_required": ["commerce:read", "commerce:write"],
  "issued_at": "2026-04-08T12:00:00.000Z",
  "nonce": "<32 lowercase hexadecimal characters>"
}
]]></artwork>
        <t>profile MUST equal "aps-action-ref-v2". agent_id is the acting
        agent's identifier. action_type is the operation identifier. target is
        the exact resource, tool, or endpoint against which the action will be
        dispatched; a profile MUST define its target string construction.
        payload_ref is the lowercase hexadecimal SHA-256 digest defined below.
        scope_required is a duplicate-free array of NFC <xref target="UAX15" format="default"/> strings sorted by the lexicographic order of their UTF-8 encodings. issued_at is an RFC 3339 <xref target="RFC3339" format="default"/> UTC timestamp with exactly three fractional digits, a second value from 00 through 59, and the literal
        "Z" suffix. nonce is 16 random bytes encoded as 32 lowercase
        hexadecimal characters. All string fields MUST be non-empty except
        that a profile MAY permit an empty scope_required array.</t>
        <t>Each scope_required value is a scope string under <xref target="component-orders"/>.
        This document states no grammar for it beyond what that section
        states, and an implementation MUST NOT reject a scope value against a
        pattern this document does not state.</t>
        <t>Because profile is fixed to "aps-action-ref-v2", the input object
        cannot name the profile that permits an empty scope_required array.
        The permission is therefore supplied to the implementation as profile
        context, alongside the object and outside it, by the caller that holds
        the applicable profile. An implementation given no such context MUST
        reject an empty scope_required array. An implementation MUST NOT infer
        the permission from any member of the object.</t>
        <t>The payload reference and action reference are computed as:</t>
        <artwork type="ascii-art"><![CDATA[
payload_ref = lowercase-hex(
    SHA-256("APS-ACTION-PAYLOAD-V1" || 0x00 || JCS(payload)))

action_ref = lowercase-hex(
    SHA-256("APS-ACTION-REF-V2" || 0x00 || JCS(input_object)))
]]></artwork>
        <t>JCS is RFC 8785 <xref target="RFC8785"/> and SHA-256 is defined in
        <xref target="RFC6234"/>. The payload is the exact JSON value presented
        for authorization and dispatch. The input_object includes payload_ref
        and excludes the payload itself. A verifier MUST reject an object with
        an unknown or duplicate member, a non-I-JSON value, a non-canonical
        scope array, an invalid timestamp, or an invalid hexadecimal field. A
        parser MUST detect duplicate names before conversion to an ordinary
        map; it MUST NOT accept the last occurrence silently.</t>
        <t>A number MAY appear in any spelling I-JSON admits. JCS serializes a
        number to one canonical form, so two admissible spellings of the same
        value produce the same digest, and an implementation MUST NOT reject a
        value on the ground that its spelling is not the canonical one. This
        governs spelling only. A value I-JSON does not admit is rejected as
        before.</t>
        <t>A string containing an unpaired UTF-16 surrogate has no UTF-8
        encoding and MUST be rejected. An implementation MUST NOT substitute
        U+FFFD, delete the code unit, or otherwise repair the string. Scope
        normalization occurs when the intent is created; a verifier accepts
        only the resulting NFC, sorted, duplicate-free form and does not
        normalize an untrusted wire object before verification.</t>
        <t>The enforcement boundary MUST recompute payload_ref from the
        payload it will dispatch and action_ref from the received input object.
        It MUST reject either mismatch before policy evaluation. It MUST also
        reject reuse of nonce by the same agent within the deployment's replay
        window. The nonce prevents two otherwise identical requests from
        sharing an approval or receipt identity; it does not replace an
        enforcement-boundary replay ledger.</t>
      </section>

      <section anchor="external-correlation" numbered="true" toc="default">
        <name>Legacy External Correlation Form</name>
        <t>For correlating APS-governed actions with records produced by
        systems outside an APS deployment, this document defines a
        second deterministic reference, the external action reference,
        identified by the label "action-ref-v1-jcs-sha256":</t>
        <artwork type="ascii-art"><![CDATA[
external_action_ref =
    lowercase-hex(SHA-256(canonicalize(input_object)))
]]></artwork>
        <t>where canonicalize is RFC 8785 <xref target="RFC8785"/>, the hash is computed
        over the UTF-8 encoding of the canonicalized JSON, and
        input_object is a JSON object with exactly four fields, named in
        snake_case:</t>
        <dl>
          <dt>action_type</dt>
          <dd>The action identifier string.</dd>
          <dt>agent_id</dt>
          <dd>The acting agent's identifier string, in the form the
          correlating ecosystem uses.</dd>
          <dt>scope</dt>
          <dd>A single scope string.</dd>
          <dt>timestamp</dt>
          <dd>An RFC 3339 UTC timestamp at exactly millisecond precision,
          with three fractional-second digits, a second value from 00 through
          59, and the literal "Z" designator
          (e.g., "2026-04-08T12:00:00.000Z"). The timestamp is hashed as
          the byte sequence supplied. An implementation MUST reject a
          timestamp that does not match this shape; it MUST NOT coerce,
          truncate, extend, or renormalize a non-conforming value.</dd>
        </dl>
        <t>Field values in the external form are hashed as supplied. The
        external form applies none of the native form's field
        transformations: no Unicode normalization and no array sorting,
        since the scope field is a single string.</t>
        <t>This form predates aps-action-ref-v2 and remains only for
        correlation with records that already use it. It omits the target,
        payload digest, and nonce, and therefore MUST NOT identify an APS
        policy decision, approval, dispatch, spend reservation, or receipt.
        An implementation MUST label it "action-ref-v1-jcs-sha256" and MUST
        NOT present its digest as an action_ref under <xref target="action-reference"/>. A digest
        produced by any construction other than the one specified in this
        section MUST NOT carry that label.</t>
        <t>The external form exists for cross-ecosystem byte parity:
        independent implementations outside an APS deployment compute
        this key from their own records, and agreement with the value
        carried in or derived from an APS receipt correlates the two
        without prior coordination. The aps-action-ref-v2 form of <xref target="action-reference"/>
        is the only action identity within the APS policy chain. The
        two forms differ in field naming, field forms, scope arity, and
        timestamp precision, and produce unrelated digest values for the
        same underlying action.</t>
      </section>

      <section anchor="two-phase-execution" numbered="true" toc="default">
        <name>Two-Phase Execution</name>
        <t><xref target="revocation-cascade"/> requires revocation to be rechecked at the moment the
approval is consumed to admit dispatch,
and the action-result record of <xref target="action-result"/> records the observed
outcome after a policy decision is consumed.  These requirements
place enforcement at two distinct moments; this section names that
model.</t>
        <t>In two-phase execution, the enforcement boundary first evaluates
        the policy chain and, on a permit or narrow verdict, issues an
        approval bound to the authority the verdict grants: a
        first-class consumable artifact, bound to the action_ref it
        approves, single-use, and carrying a bounded lifetime. The permit or
        narrow policy-decision record of <xref target="policy-decision"/> is that artifact. Its
        receipt_id is the consumable identity, its action_ref is the binding,
        and its valid_until is the bounded lifetime. Execution
        then presents and consumes the approval. At the moment the approval is
consumed to admit dispatch, the boundary MUST re-validate what can
have changed since issuance, including revocation status and temporal
validity, as required by <xref target="revocation-cascade"/>. An approval that has expired, has
        already been consumed, or fails re-validation MUST NOT admit
        execution.</t>
        <t>For actions carrying a spend dimension, the two phases align
        with reserve-then-settle: the amount is reserved against the
        boundary-held cumulative total (<xref target="policy-chain"/>) at approval, and
        settled at completion. This document specifies the gate model
        and its obligations; the internal mechanics of an enforcement
        boundary implementing it are out of scope.</t>
      </section>
    </section>

    <section anchor="profile-model" numbered="true" toc="default">
      <name>Profile Model</name>

      <t>This document leaves several constructions to a profile. A profile is a
      separate document that fixes those constructions for a deployment or for a
      community of deployments, under a name that records can carry. This document
      does not register profiles, does not define a profile document format, and
      does not name any profile other than the facet, action-reference and receipt
      profile identifiers it already fixes.</t>

      <t>Two things a profile is not. It is not a policy. Policy decides whether a
      particular action is allowed under authority that is already established, and
      is carried in the policy chain. A profile decides how the records are
      constructed and read before any policy runs. It is also not an extension
      point for new authority. The dimensions a verifier compares are the ones the
      delegation section fixes, and a profile supplies the construction inside a
      dimension rather than adding one.</t>

      <section anchor="profile-required-content" numbered="true" toc="default">
        <name>What a Profile Identifies</name>

        <t>The requirements in this subsection bind a profile document. They are
        requirements on what a profile has to say, not runtime checks a verifier
        performs on a record, so no fixture exists for them. This is the only
        normative content of <xref target="profile-model"/>, and it is marked as
        such because the rest of this section reports behavior that fixture
        families do exercise.</t>

        <t>A profile MUST identify all of the following.</t>

        <dl newline="false" spacing="normal">
          <dt>Identifier.</dt>
          <dd>The exact string that appears in records claiming the profile, in the
          member that names a profile at the extension point the profile serves.</dd>

          <dt>Version.</dt>
          <dd>A version distinct from the identifier, or a statement that the
          identifier carries the version. Two profiles that differ in any
          requirement below MUST NOT share an identifier and version.</dd>

          <dt>Canonicalization.</dt>
          <dd>The canonical byte form of every structure the profile defines, and
          whether it is the RFC 8785 <xref target="RFC8785"/> form this document
          uses or another form. A profile that defines a signed structure and does
          not fix its canonical bytes has defined nothing verifiable.</dd>

          <dt>Authority dimensions and their orders.</dt>
          <dd>For each dimension the profile constructs, the set of values, the
          order relation over them, and which direction of that order is narrowing.
          A verifier compares a child against its parent under that order, so a
          profile that states the values and omits the order leaves the comparison
          undefined.</dd>

          <dt>Target construction.</dt>
          <dd>The target string construction that the action-reference computation
          of the policy chain section requires a profile to define, including how
          the string is derived from the resource, tool or endpoint the action will
          reach, and which differences in that resource produce different
          strings.</dd>

          <dt>Required decision context.</dt>
          <dd>The members a decision under the profile commits to beyond those the
          DecisionRefV1 construction of <xref target="decision-ref"/> already
          names, and whether a verifier that cannot resolve one of them reports the
          decision as not established or proceeds without it.</dd>

          <dt>Evidence types and resolution rules.</dt>
          <dd>Each evidence type the profile accepts, how a verifier resolves it,
          what a resolved value establishes, and what the verifier reports when
          resolution fails or returns an answer the profile does not recognize.
          Where the profile supplies evidence this document requires but does not
          define, such as the acceptable timestamp or transparency-log evidence at
          a historical key-selection boundary, the profile MUST state the
          acceptance rule and not only the record shape.</dd>

          <dt>Freshness policy.</dt>
          <dd>For each answer the profile reads from live state rather than from a
          signed record, the age past which the answer is no longer usable, and
          what a verifier reports past that age. An answer with no stated freshness
          bound is unbounded, and a profile MUST say so explicitly rather than
          leave it unstated.</dd>

          <dt>Unknown-profile behavior.</dt>
          <dd>What an implementation that does not hold this profile reports when
          it meets a record naming it. A profile MUST NOT require that such an
          implementation treat the record as valid.</dd>

          <dt>Admission requirements.</dt>
          <dd>What the next authorization boundary checks again before the action
          takes effect, and what it consumes or reserves when it admits. A profile
          that adds a construction which a boundary has to re-evaluate MUST say so,
          because a construction checked only at issuance is not an admission
          control.</dd>

          <dt>Semantic preservation.</dt>
          <dd>For each semantic this document defines that the profile touches,
          which of six values applies to it: preserved exactly, transformed with
          equivalent semantics, narrowed, omitted and irrelevant to the operation,
          not representable, or externally resolved. This is the loss model
          <xref target="adapter-contracts"/> states, and a profile fills it for
          its own constructions rather than only for external protocols. A profile
          MUST state the verifier result for a semantic it cannot represent that
          an operation under the profile requires, and that result MUST NOT be
          valid.</dd>

          <dt>External protocol mapping.</dt>
          <dd>For each external protocol the profile carries APS concepts over, the
          concept-by-concept mapping, and, for every concept that does not survive
          the mapping, whether the result is unsupported or not established. A
          profile MUST NOT map a concept onto a weaker external construct without
          recording the loss.</dd>
        </dl>

        <t>A profile MUST NOT widen authority. A profile defines constructions, and
        a construction that admits a grant, an action or an effect which the same
        records would not admit without the profile is a widening. This constraint
        is on the profile document, in the same way as the requirements above, and
        this document states no runtime test by which a verifier detects a widening
        construction.</t>

        <t>The following is informative. Where an implementation does recognize
        such a construction, reporting the record unsupported rather than valid is
        the disposition consistent with the rest of this document. What recognizing
        a widening construction consists of is not defined here, so this
        disposition is not stated as a requirement.</t>

        <t>What this subsection does not establish. It does not establish that any
        profile exists, that a profile satisfying this list produces
        interoperability with another profile that also satisfies it, or that a
        verifier can tell a conforming profile from a widening one by inspecting
        records. It states what a profile document has to contain and stops
        there.</t>

        <t>Requirements. APS-PROF-REQUIRED-CONTENT, a profile identifies every
        item in the list above. APS-PROF-SEMANTIC-PRESERVATION, a profile states
        which of the six loss values applies to each APS semantic it touches and
        states the verifier result for a semantic it cannot represent, which is
        never valid. APS-PROF-NO-WIDENING, a profile does not widen authority.
        APS-PROF-UNKNOWN-NOT-VALID, a
        profile does not require an implementation that does not hold it to treat
        a record naming it as valid. All four are specified, not exercised, and no
        fixture exists for a requirement on a profile document.</t>

        <t>Status: Candidate feature. Normative for an implementation claiming this feature, not a requirement of APS Core conformance. Related fixture families: none.
        Implemented requirements: none. Related implementation surfaces: no released package.</t>
      </section>

      <section anchor="unknown-profile" numbered="true" toc="default">
        <name>Profiles at the Extension Points</name>

        <t>This subsection is informative. It collects every point at which this
        document defers a construction to a profile, states what an implementation
        that does not hold the profile reports there, and names the fixture
        families that exercise the point. The obligations themselves are stated in
        the sections listed, not here.</t>

        <dl newline="true" spacing="normal">
          <dt>Facet profiles in the delegation record.</dt>
          <dd>The scope, reputation, values and reversibility facets of
          <xref target="faceted-attenuation"/> each carry a profile identifier. The
          component orders subsection requires the profiles on a facet to match
          between parent and child, and states that a profile change is unsupported
          rather than narrower. Chain verification returns unsupported for an
          unsupported facet profile. Both reference SDKs report this as
          UNSUPPORTED_PROFILE and return the chain state unsupported rather than
          invalid. No fixture family changes a facet profile between parent and
          child. The requirement inventory records this as not exercised, and the
          behavior described here is read from the SDK sources rather than from a
          vector.</dd>

          <dt>Cross-principal composition.</dt>
          <dd>The chain verification subsection requires one root-to-leaf chain per
          action, forbids a verifier from taking the union of scopes or budgets
          across chains, and leaves cross-principal composition to a separate
          profile. No such profile exists. Without one, a record set carrying
          several chains over one leaf supports the grants of whichever single
          chain is selected and nothing more. Related fixture families: chain-selection-no-union
          and single-chain-selection, both of which state in their own READMEs that
          they neither define nor approximate that profile.</dd>

          <dt>Historical key-selection evidence.</dt>
          <dd>The key rotation subsection requires a profile to identify an
          acceptable timestamp, transparency-log or equivalent evidence source
          wherever key retirement makes the result depend on which side of a
          boundary an artifact was signed. Without that evidence the key-authority
          result is indeterminate even when the signature is cryptographically
          valid, and it is reported through the ambiguous resolution outcome
          KEY_AMBIGUOUS rather than as a key that was not found, as malformed key
          material, or as a signature failure. Related fixture families:
          key-rotation-historical, which supplies its own test evidence record and
          records that the record is a fixture stand-in and not a proposal.</dd>

          <dt>Target string construction.</dt>
          <dd>The action-reference computation requires a profile to define how the
          target string is built. The implementation status appendix records this
          as a construction the released packages leave to a profile. Exercised
          indirectly by capability-binding-drift, which shows that a target naming
          a tool or endpoint does not distinguish two revisions of that tool, and
          which returns not established rather than invalid when the grant carries
          no construction that would.</dd>

          <dt>Empty scope_required.</dt>
          <dd>The action-reference object fixes its own profile member, so the
          object cannot name the profile that permits an empty scope_required
          array. That permission reaches the implementation as profile context
          supplied alongside the object by the caller holding the profile. An
          implementation given no such context rejects an empty array and does not
          infer the permission from any member of the object. This is the one
          extension point at which the absence of a profile is a rejection rather
          than an unsupported result. No family supplies or withholds profile
          context.</dd>

          <dt>Revocation record format and cascade completion.</dt>
          <dd>The revocation evidence subsection leaves the wire format of the
          signed revocation record, and of any cascade-completion record, to the
          applicable profile. A verifier that holds the originating revocation
          record and a profile for its format establishes why a descendant chain is
          invalid from the records. A verifier holding one and not the other
          reports the evidence cascade state as indeterminate, which does not
          change the authority result. Related fixture families: ancestor-revocation-chain,
          for the per-member revocation path. The record format itself is exercised by
          no family in this corpus at this commit.</dd>

          <dt>Undeclared spend unit.</dt>
          <dd>The policy chain section lets a profile require the gate to deny when
          an action does not declare its unit, and otherwise evaluates the amount
          under the delegation's resolved unit. No family presents an action and a
          delegation whose units differ, and none omits the unit.</dd>

          <dt>Receipt envelope and stage result profiles.</dt>
          <dd>A receipt whose envelope profile is not aps-receipt-v1 is unsupported
          and is not judged against the aps-receipt-v1 schema, which is not its
          schema. A result object whose profile is not the one its named stage
          defines is invalid rather than unsupported, because those objects are
          closed. Both reference SDKs implement the envelope case as
          UNSUPPORTED_PROFILE returning unsupported. Exercised for the positive
          envelope profile by the receipts families under cross-stack and by
          accountability-record. No family presents an unknown envelope
          profile.</dd>

          <dt>Signatures the profile requires.</dt>
          <dd>The receipt verification subsection
          (<xref target="receipt-verification"/>) makes the required signature set
          the issuer signature plus any signature the applicable profile or the
          verifier's own input requires. Failure or non-resolution of a signature
          outside that set does not change the record's aggregate state and is
          reported on its own axis. Related fixture families: receipts-aeoess, in its
          two-signature vectors.</dd>

          <dt>Imported grants.</dt>
          <dd>The OAuth identity-assertion grant binding states that an external
          grant carrying no spend semantics cannot be projected into a conforming
          chain root unless an importing profile supplies an explicit spend basis
          that verifier policy accepts, and that the projection is otherwise
          unsupported. No family presents such a projection.</dd>

          <dt>Principal binding revocation.</dt>
          <dd>Revoking a principal binding does not revoke the agent's key or
          unrelated delegations, and an enforcement profile defines which authority
          records depended on that binding. No family carries a principal-binding
          revocation.</dd>

          <dt>Attestation tiers.</dt>
          <dd>The attestation provenance subsection defines the tier and status
          terminology that profiles import, defines no general attested-signal wire
          format, and imposes no verifier behavior beyond keeping tier and
          verification status independent. Exercised in part by
          instruction-provenance, whose tier mutation is rejected under that
          document's own tier lock rather than under the independence rule.</dd>

          <dt>Identifier scope.</dt>
          <dd>The privacy considerations recommend that profiles use
          context-specific agent and principal identifiers where global correlation
          is unnecessary. Every family reuses stable identifiers across its
          vectors, so nothing exercises this.</dd>

          <dt>External protocol carriage.</dt>
          <dd>A profile that carries APS concepts over another protocol states the
          mapping and the losses. Related fixture families: arap-binding, which models one
          external approval profile against a pinned source, and by the cross-stack
          families, which carry artifacts produced by other systems.</dd>
        </dl>

        <t>Across the points above, the pattern this document holds to is that an
        unknown or unheld profile yields unsupported or not established, and never
        valid and never a narrower reading. The text states that outcome directly
        at the facet, receipt-envelope, imported-grant and cascade-evidence points.
        At the empty scope_required point the outcome is rejection instead, for the
        reason given above. The nearest exercised evidence for the general pattern
        is revocation-resolution-forward-compat, which shows both reference SDKs
        failing closed on a revocation answer they do not recognize rather than
        reading it as active. That family is about a resolver answer and not about
        a profile, so it supports the pattern by analogy and does not establish
        it.</t>

        <t>What this subsection does not establish. It does not establish that the
        extension points listed are the complete set for future revisions, that any
        implementation behaves as described at a point no family covers, or that
        the SDK behavior read from source at the facet-profile point would survive
        a vector. Where a point has no family, that is recorded above rather than
        argued past.</t>

        <t>This subsection states no requirement of its own and carries no
        requirement identifier. The obligations are in the sections it names.</t>

        <t>Status: Candidate feature. Normative for an implementation claiming this feature, not a requirement of APS Core conformance. Related fixture families:
        chain-selection-no-union, single-chain-selection, key-rotation-historical,
        capability-binding-drift, ancestor-revocation-chain,
        revocation-resolution-forward-compat, instruction-provenance,
        arap-binding. Implemented requirements: none. Related implementation surfaces: agent-passport-system
        7.2.0 (npm) and agent-passport-system 4.2.0 (PyPI) for the
        UNSUPPORTED_PROFILE and KEY_AMBIGUOUS outcomes only. No released package
        implements a profile document, a profile registry, or profile-context
        passing.</t>
      </section>
    </section>

    <section anchor="signed-receipts" numbered="true" toc="default">
      <name>Governed Action Records</name>
      <t>APS represents a governed action as three signed records: an agent's
      intent, the enforcement boundary's policy decision, and, when dispatch
      occurs, the boundary's observed execution result. All three use the
      ReceiptV1 envelope. The common envelope permits one verification
      algorithm while receipt_type and result state the record's stage and
      bounded semantics.</t>

      <section anchor="receipt-envelope" numbered="true" toc="default">
        <name>ReceiptV1 Envelope</name>
        <t>A ReceiptV1 is a closed JSON object.  The example below is an
action-intent record and therefore omits the conditional decision_ref
and prev members described after the example:</t>
        <artwork type="json"><![CDATA[
{
  "profile": "aps-receipt-v1",
  "receipt_id": "<64 lowercase hexadecimal characters>",
  "receipt_type": "aps:action-intent:v1",
  "issuer": "did:key:z6Mk...",
  "subject_agent": "did:key:z6Mk...",
  "action_ref": "<64 lowercase hexadecimal characters>",
  "delegation_ref": "sha256:<64 lowercase hexadecimal characters>",
  "issued_at": "2026-04-08T12:00:00.000Z",
  "evidence_refs": [],
  "result": {
    "profile": "aps-action-intent-result-v1",
    "status": "declared"
  },
  "signatures": [{
    "signer": "did:key:z6Mk...",
    "key_id": "did:key:z6Mk...#z6Mk...",
    "alg": "Ed25519",
    "value": "<128 lowercase hexadecimal characters>"
  }]
}
]]></artwork>
        <t>profile MUST equal "aps-receipt-v1". receipt_type identifies a
        stage defined in <xref target="receipt-stages"/>. issuer is the party responsible for that
        record. subject_agent is the acting agent. action_ref is the
        aps-action-ref-v2 digest from <xref target="action-reference"/>. delegation_ref identifies
        the selected AuthorityDelegationV1 leaf, or the authority basis when
        no delegation exists. decision_ref is REQUIRED for policy-decision and
        action-result records and MUST be absent from an action-intent record.
        issued_at uses exact UTC milliseconds with a second value from 00
        through 59. prev is REQUIRED for
        policy-decision and action-result records and MUST be absent from an
        action-intent record. A member that is not applicable is absent, not
        null.</t>
        <t>evidence_refs is a duplicate-free array of objects containing
        exactly artifact_type and sha256. sha256 is the lowercase hexadecimal
        SHA-256 digest of the artifact bytes defined by artifact_type.
        References are sorted first by the UTF-8 bytes of artifact_type and
        then by the ASCII bytes of sha256. result is the closed, typed object
        defined by receipt_type. signatures is a non-empty array sorted first
        by the UTF-8 bytes of signer and then by the UTF-8 bytes of key_id.
        Each signer and key_id pair occurs at most once, alg MUST equal
        "Ed25519", and one signature MUST be from issuer.</t>
      </section>

      <section anchor="receipt-crypto" numbered="true" toc="default">
        <name>Receipt Identifiers and Signatures</name>
        <t>The receipt identifier is computed over the validated envelope with
        receipt_id and signatures absent:</t>
        <artwork type="ascii-art"><![CDATA[
receipt_id = lowercase-hex(SHA-256(
    ASCII("APS-RECEIPT-ID-V1") || 0x00 ||
    UTF8(JCS(receipt without receipt_id and signatures))))
]]></artwork>
        <t>Each signature descriptor contains signer, key_id, and alg. Its
        value is computed over a form that contains the receipt with
        signatures absent and the descriptor as a separate signer member:</t>
        <artwork type="ascii-art"><![CDATA[
signature_form = {
  "receipt": receipt without signatures,
  "signer": {
    "signer": signer,
    "key_id": key_id,
    "alg": "Ed25519"
  }
}

value = lowercase-hex(Ed25519-Sign(signing_key,
    ASCII("APS-RECEIPT-SIG-V1") || 0x00 ||
    UTF8(JCS(signature_form))))
]]></artwork>
        <t>The signature form includes receipt_id. It therefore binds the
        complete content-addressed body and the signer's own identifier,
        verification method, and algorithm. A verifier MUST recompute
        receipt_id before signature verification, resolve each key as
        authorized for signer at issued_at, and verify every required
        signature. A valid signature establishes that an authorized signing
        key attested to the canonical receipt body. It does not establish that
        an external event occurred or that a signed claim is true.</t>
        <t>A prev reference cryptographically links one receipt body to a
        claimed predecessor. It does not establish wall-clock ordering,
        completeness, or absence of omitted receipts without an external log
        or sequencing mechanism.</t>
      </section>

      <section anchor="receipt-stages" numbered="true" toc="default">
        <name>Core Receipt Types</name>
        <t>This section defines three stages and their receipt_type values:
        "aps:action-intent:v1", "aps:policy-decision:v1", and
        "aps:action-result:v1". A verifier selects the rules to apply from the
        receipt_type the record carries, never from the stage a caller
        expects. A record whose receipt_type names no stage defined here is
        unsupported. A verifier MUST NOT report such a record valid, and MUST
        NOT judge its result object against a stage schema the record does not
        name. Each result object defined below is closed, so a result whose
        profile is not the one its named stage defines is invalid.</t>
        <t>These rules bind the issuer as well as the verifier. A conforming
        issuer MUST NOT emit a receipt whose receipt_type names a stage
        defined here and whose content breaks that stage's rules. This is the
        obligation <xref target="core-invariants"/> states for delegations, applied to receipts. It
        does not require a general-purpose record-building function to apply
        the stage rules itself, but a record that breaks them is not a
        conforming receipt whatever produced it.</t>
        <t>Where a stage below names the enforcement boundary as issuer, the
        expected boundary identity is a trust input the verifier supplies.
        A verifier given an expected identity MUST report a record whose
        issuer differs from it as invalid on that axis. A verifier given none
        MUST report that axis as not established, which is indeterminate and
        is never valid. This document states no rule that issuer differs from
        subject_agent at those stages, and no separate rule that an
        action-result issuer equals the issuer of the policy decision it
        follows. The latter follows only where both are checked against the
        same supplied boundary identity.</t>
        <section anchor="action-intent" numbered="true" toc="default">
          <name>Action Intent</name>
          <t>An action-intent record has receipt_type
          "aps:action-intent:v1". issuer and subject_agent MUST be the acting
          agent, prev and decision_ref MUST be absent, and result MUST contain
          exactly profile "aps-action-intent-result-v1" and status
          "declared". The agent signature binds the action_ref and selected
          delegation_ref before policy evaluation. It attests to the declared
          request; it does not establish that dispatch occurred.</t>
        </section>
        <section anchor="policy-decision" numbered="true" toc="default">
          <name>Policy Decision</name>
          <t>A policy-decision record has receipt_type
          "aps:policy-decision:v1". issuer is the enforcement boundary, prev
          is the receipt_id of the action-intent record, and decision_ref is
          computed as specified in <xref target="decision-ref"/>. result is a
          CoreDecisionOutputV1 object with exactly these members:</t>
          <artwork type="json"><![CDATA[
{
  "profile": "aps-core-decision-output-v1",
  "verdict": "permit",
  "effective_authority_ref":
      "<64 lowercase hexadecimal characters>",
  "constraints": [],
  "valid_until": "2026-04-08T12:00:05.000Z"
}
]]></artwork>
          <t>verdict is permit, deny, or narrow. constraints is a
          duplicate-free array of NFC strings sorted by UTF-8 bytes.
          effective_authority_ref identifies the exact effective authority
          admitted by the decision. It is null for deny and a lowercase
          hexadecimal SHA-256 digest for permit or narrow. valid_until is null
          for deny and an exact UTC-millisecond timestamp later than issued_at
          for permit or narrow. valid_until and issued_at are compared as
          instants, not as strings.</t>
          <t>The issuer puts constraints into that canonical form when it
          builds the decision output, before the output is hashed for
          <xref target="decision-ref"/>, so that two byte-different encodings of one decision
          cannot produce different decision_ref values. A verifier takes the
          array as received. It MUST NOT normalize, deduplicate or sort a
          received array before evaluating it, and a received array that is
          not already duplicate-free, in NFC and sorted by UTF-8 bytes makes
          the record invalid. This is the rule <xref target="action-reference"/> states for the
          other canonical array in this document.</t>
          <t>A permit or narrow policy-decision record is a bounded,
          single-use approval for its action_ref. At the moment the approval is
          consumed to admit dispatch, the
          enforcement boundary MUST verify that it has not expired, atomically
          consume its receipt_id, recheck time and revocation state, and
          complete any spend reservation. An already consumed, expired, or
          stale approval MUST NOT admit dispatch. A deny record is terminal
          and MUST NOT be consumed as an approval.</t>
        </section>
        <section anchor="action-result" numbered="true" toc="default">
          <name>Action Result</name>
          <t>An action-result record has receipt_type
          "aps:action-result:v1". issuer is the enforcement boundary, prev is
          the consumed policy-decision receipt_id, and decision_ref MUST equal
          that decision's decision_ref. result contains exactly profile,
          status, effect_ref, and error_code:</t>
          <artwork type="json"><![CDATA[
{
  "profile": "aps-action-result-v1",
  "status": "succeeded",
  "effect_ref": "<64 lowercase hexadecimal characters>",
  "error_code": null
}
]]></artwork>
          <t>status is succeeded, failed, or unknown. For succeeded,
          effect_ref is REQUIRED and error_code is null. For failed,
          error_code is a non-empty stable identifier and effect_ref is either
          a digest of a returned error artifact or null. For unknown, both are
          null. A failure the boundary cannot characterize is reported unknown,
          because failed carries a stable failure identifier the boundary does not
          hold in that case. A non-null effect_ref is computed as lowercase-hex(SHA-256(
          ASCII("APS-ACTION-EFFECT-V1") || 0x00 || JCS(effect))). An
          action-result record attests to what the enforcement boundary
          observed after dispatch. External occurrence or settlement requires
          separately resolved evidence.</t>
          <t>The validity window belongs to the policy decision. valid_until
          bounds the moment at which that decision may be consumed to admit
          dispatch, as <xref target="policy-decision"/> requires. It does not bound the issued_at
          of the action-result record that follows, because execution and
          observation can complete after the decision is consumed. A verifier
          MUST NOT treat an action-result record as invalid on the sole ground
          that its issued_at is later than the consumed decision's
          valid_until, and MUST NOT report a temporal relation between the two
          that it did not check.</t>

<!-- PENDING RULING (not applied): -04-C2, action-result predecessor binding (<xref target="action-result"/> and <xref target="receipt-verification"/>)
     Held, not applied in this revision. Reproduced verbatim from the section patch,
     except that every double hyphen is written as two hyphens separated by a space,
     which an XML comment does not permit.

## PENDING RULING: -04-C2, action-result predecessor binding (5.3.3, 5.6)

**Held. Not part of the patch above. Do not apply until ruled.**

-04-C2 is recorded as a candidate with text agreed in chat, not ruled through
Consilium. It is the only item in this patch's sections that would change what
a conforming verifier must do about `prev`, and it is left out on purpose.

The -03 text it would touch, XML lines 817-821, unchanged by this patch:

```xml
          <t>An action-result record has receipt_type
          "aps:action-result:v1". issuer is the enforcement boundary, prev is
          the consumed policy-decision receipt_id, and decision_ref MUST equal
          that decision's decision_ref. result contains exactly profile,
          status, effect_ref, and error_code:</t>
```

The -03 position, unchanged: the `prev` clause in that sentence carries no BCP
14 keyword, the `decision_ref` equality in the same sentence carries MUST, and
<xref target="receipt-verification"/> step 9 ("validate prev and stage transitions") carries none either.
A suite case exposed the consequence, that both reference SDKs accept an
action-result whose `prev` names the action-intent rather than the consumed
decision. Opt-in predecessor binding shipped in TS 7.1.0 and Python 4.1.0 and
is documented in both changelogs as hardening rather than a draft-03
conformance fix.

If and when C2 is ruled in, the shape it would take in these sections:

- 5.3.3: for an `aps:action-result:v1` record, `prev` MUST equal the receipt_id
  of the policy-decision record consumed for that action, and a verifier MUST
  resolve `prev` and reject the record where the predecessor is absent, is not
  an `aps:policy-decision:v1` record, or its recomputed receipt_id does not
  equal `prev`.
- 5.6 step 9: predecessor and stage-transition validation become normative.

Two things a ruling has to settle first, and this patch does not presume
either:

1. Whether the action-intent to policy-decision link of 5.3.2 is ruled in at
   the same time. It is stated in the same unkeyworded form and is a different
   pairing with a different expected predecessor type. Ruling one and not the
   other leaves the chain half-normative.
2. What a verifier that cannot obtain the predecessor reports. On the axis
   discipline this patch applies everywhere else, the answer is indeterminate
   and never valid, not invalid, because an unobtainable predecessor is a gap
   in the verifier's evidence rather than a defect in the record. C2's proposed
   text as recorded does not distinguish those two cases.

Until then, `prev` stays as -03 has it, and nothing in this patch makes the
`prev` relation a conformance failure.

-->

        </section>
      </section>

      <section anchor="decision-ref" numbered="true" toc="default">
        <name>DecisionRefV1</name>
        <t>DecisionRefV1 commits the policy decision to the action, evaluated
        authority state, policy input, decision context, and decision output
        without requiring those potentially sensitive objects to be embedded
        in every receipt. Each component reference is computed over the exact
        JSON value evaluated by the enforcement boundary:</t>
        <artwork type="ascii-art"><![CDATA[
authority_state_ref = H("APS-DECISION-AUTHORITY-V1",
                        authority_state)
policy_ref          = H("APS-DECISION-POLICY-V1",
                        policy_input)
context_ref         = H("APS-DECISION-CONTEXT-V1",
                        decision_context)
decision_output_ref = H("APS-DECISION-OUTPUT-V1",
                        decision_output)

where H(tag, value) =
    lowercase-hex(SHA-256(ASCII(tag) || 0x00 || UTF8(JCS(value))))
]]></artwork>
        <t>The DecisionRefV1 input is a closed object:</t>
        <artwork type="json"><![CDATA[
{
  "profile": "aps-decision-ref-v1",
  "action_ref": "<64 lowercase hexadecimal characters>",
  "authority_state_ref": "<64 lowercase hexadecimal characters>",
  "policy_ref": "<64 lowercase hexadecimal characters>",
  "context_ref": "<64 lowercase hexadecimal characters>",
  "decision_output_ref": "<64 lowercase hexadecimal characters>"
}
]]></artwork>
        <artwork type="ascii-art"><![CDATA[
decision_ref = lowercase-hex(SHA-256(
    ASCII("APS-DECISION-REF-V1") || 0x00 ||
    UTF8(JCS(decision_ref_input))))
]]></artwork>
        <t>authority_state MUST include the selected authority chain,
        authority-basis resolution, revocation observations, and the spend
        state used by the decision. policy_input MUST identify the policy and
        version actually evaluated and include its decision-relevant input.
        decision_context contains decision-relevant environmental state.
        decision_output is the exact CoreDecisionOutputV1 carried in the
        policy-decision receipt. A deployment MAY keep component values
        private, but a verifier cannot independently recompute a component
        whose value is unavailable.</t>
        <t>Matching decision_ref values establish that the same component
        digests were named. They do not establish that the policy was correct,
        the inputs were complete, or the underlying claims were true.</t>
      </section>

      <section anchor="receipt-evidence" numbered="true" toc="default">
        <name>Evidence Resolution</name>
        <t>An evidence reference is a commitment, not evidence availability.
        When a verification policy depends on referenced evidence, the
        verifier resolves the artifact under the rules named by artifact_type,
        hashes the exact bytes those rules select, and compares the digest.
        Resolution reports at least resolved, not_found, unreachable,
        malformed, digest_mismatch, or unsupported. A not_found, digest_mismatch, or malformed result is invalid for a
required artifact; unreachable is indeterminate; unsupported is
unsupported. A verifier
        MUST NOT report the containing receipt fully valid for a claim that
        depends on unresolved evidence.</t>
        <t>A verifier that does not resolve evidence at all reports the
        evidence-resolution axis as not_attempted, which is indeterminate.
        Declining to resolve evidence is a permitted verifier scope. Omitting
        the axis, or reporting a receipt valid for a claim that depends on
        evidence the verifier never resolved, is not.</t>
        <t>Retrieval code MUST apply scheme allowlists, size limits, redirect
        limits, timeouts, and private-network restrictions appropriate to its
        environment. A receipt signature does not make an evidence locator
        safe to fetch.</t>
      </section>

      <section anchor="receipt-verification" numbered="true" toc="default">
        <name>Receipt Verification</name>
        <t>A verifier performs these checks in order:</t>
        <ol spacing="normal">
          <li>parse bounded I-JSON while preserving duplicate names</li>
          <li>enforce the closed ReceiptV1 envelope schema and the schema of
          the stage named by receipt_type</li>
          <li>recompute receipt_id</li>
          <li>resolve signer authority at issued_at, and, for a stage that names
          the enforcement boundary as issuer, compare issuer with the
          expected boundary identity where one is supplied</li>
          <li>verify the required signatures</li>
          <li>recompute action_ref from the independently supplied action
          input object, and compare that object's agent_id with the record's
          subject_agent</li>
          <li>verify delegation_ref against the selected authority chain, and
          verify that chain</li>
          <li>recompute decision_ref where required, over the decision output
          in the canonical form of <xref target="policy-decision"/>, using the construction of
          <xref target="decision-ref"/></li>
          <li>validate prev and stage transitions</li>
          <li>enforce freshness and single-use state for an approval</li>
          <li>resolve evidence required by the verifier's policy</li>
        </ol>
        <t>On step 5, the required signature set is the signature from issuer
        that <xref target="receipt-envelope"/> requires, plus any signature the applicable profile
        or the verifier's own input explicitly requires. Failure or
        non-resolution of a signature outside that set MUST NOT change the
        record's aggregate state and is reported on its own axis. A
        structurally malformed signature descriptor still makes the envelope
        invalid, because the envelope schema is closed and the descriptor is
        part of it.</t>
        <t>On step 6, the action binding is established only against an
        independently supplied action input object. Where the verifier holds
        none, the action-binding axis is not established, which is
        indeterminate. Where it holds one, the object's agent_id of
        <xref target="action-reference"/> and the record's subject_agent of <xref target="receipt-envelope"/> MUST be
        equal, and a verifier MUST report a mismatch as invalid on that axis.
        The two name the acting agent from the two sides of one action, and a
        record binding an action declared by one agent to a different
        subject_agent is not a conforming receipt.</t>
        <t>On step 7, where an authority chain is supplied, delegation_ref
        MUST equal the delegation_id of the selected leaf byte for byte, and a
        verifier MUST report a mismatch as invalid. Where no chain is
        supplied, a verifier checks the form of delegation_ref only and MUST
        NOT report the delegation-validity axis as valid. Where delegation_ref
        names an authority basis rather than a delegation leaf, this document
        defines no encoding for that basis, and a verifier MUST report that
        axis as unsupported.</t>
        <t>On step 10, the policy-decision record identifies the approval.
        Whether that approval has been consumed is enforcement-boundary state
        keyed by its receipt_id and is not content of the record. A verifier
        without access to that state reports the approval-state axis as not
        established, which is indeterminate.</t>
        <t>The result keeps artifact integrity, signer authority, action
        binding, delegation validity, decision binding, stage continuity,
        enforcement-boundary identity, approval state, and evidence
        resolution separate. An
        invalid cryptographic or structural check is invalid. Missing live
        state is indeterminate. An unknown required profile is unsupported, as
        is a receipt_type that names no stage of <xref target="receipt-stages"/>. A result object
        whose profile is not the one its named stage defines is invalid,
        because those objects are closed. A caller MUST NOT collapse
        indeterminate or unsupported into valid, and a verifier MUST NOT let
        an axis it did not establish contribute to a valid result.</t>
        <t>A ceiling an implementation reaches while parsing or verifying,
        such as a nesting depth, a wire size, or a chain length limit, is a
        property of that verifier and not of the record: the same bytes verify
        under a verifier with a higher ceiling. A verifier that reaches such a
        ceiling MUST report indeterminate with a reason naming the limit, and
        MUST NOT report the record invalid on that ground. A parse failure, a
        duplicate member, or any other schema violation remains invalid. Where
        a bounded parser both reaches a ceiling and observes a syntax
        violation, a ceiling reached before any syntax violation is observed
        is indeterminate, and a syntax violation observed first is
        invalid.</t>
      </section>
    </section>

    <section anchor="authority-lifecycle" numbered="true" toc="default">
      <name>Authority Lifecycle</name>

      <t>An agent can outlive the session that started it, the person who sponsored
      it, the key it first signed with, the approval that let it act, and the
      workflow it was built for. This section states what happens to its authority
      across those changes: what stays continuous, what must stop, what may be
      transferred, who can establish replacement authority, when current authority
      is checked again, and what evidence supports each transition.</t>

      <t>This section has four parts. Concepts names the findings the rest of it
      keeps apart. Authority Continuity Rules states what authority means across
      change, as twelve rules L1 to L12. Lifecycle Mechanisms specifies the
      machinery a deployment uses to make those rules checkable: activation,
      purpose exhaustion, capability and policy binding, authority epoch,
      suspension cause sets, status sources, succession and handover, and what
      changes when a person leaves. Candidate Lifecycle Extensions lists
      statements written against this text that no requirement here depends
      on.</t>

      <t>Lifecycle Core is an enumerated set of propositions, not a reading of
      this section, and it is an informative grouping name rather than a claimable
      base. A proposition is in it only where it restates a requirement the closed
      core of this document already states, which is the only ground on which
      anything in this section is Core. Six of the twelve continuity rules
      contribute to it, one requirement identifier each. L1 is in it whole,
      restating the per-member revocation check of
      <xref target="chain-verification"/> applied to a dependent chain. From L3,
      that revocation is irreversible for the authority object it names, which
      <xref target="core-invariants"/> states as INV-5. From L5, that an action is
      decided against one root-to-leaf chain with no union across chains, per
      <xref target="chain-verification"/>. From L6, that the boundary rechecks
      revocation state and temporal validity at the moment the approval is
      consumed to admit dispatch, per <xref target="revocation-cascade"/>,
      <xref target="two-phase-execution"/> and
      <xref target="policy-decision"/>. From L7, that an unknown
      revocation state is not active. From L9, historical key selection at the
      artifact's issued_at together with the issuer-claim timestamp and the
      indeterminate result where the signing instant is not established, all three
      per <xref target="key-rotation"/>. Every other rule, every remaining part of
      L3, L5, L6, L7 and L9, and every mechanism in this section is a Candidate
      feature, normative for an implementation claiming it and not a requirement of
      APS Core conformance.</t>

      <t>Every normative subsection here ends with its requirement identifiers and
      a status block naming the fixture families that exercise it and the released
      packages that implement it. A requirement is marked exercised only where a
      named vector carries an assertion that fails when the requirement is
      violated. Everything else is marked specified, not exercised.</t>

      <t>Record types this section names are in the proposed: namespace. They are
      the names the reference packages ship. No fixture family in the conformance
      suite mints a record under any of them, so none of them graduates to the
      aps: namespace in this revision, and none of them is a frozen wire
      name.</t>

      <section anchor="lifecycle-concepts" numbered="true" toc="default">
        <name>Concepts</name>

        <t>Authority is the bounded set of actions an agent may perform on behalf of
        a principal under currently valid grants and constraints. It is not one
        record and not one status flag. It depends on parties, on authority
        artifacts, on lifecycle state, on action state, and on what a verifier can
        establish about each of them. These change independently. A transition in
        one does not imply a transition in another unless the authority model in
        force binds them.</t>

        <t>Not every concept named below is a separate protocol object. The names
        exist so that two findings a deployment tends to run together can be
        reported apart.</t>

        <t>Parties and standing:</t>
        <dl>
          <dt>Agent identity</dt>
          <dd>Which agent is acting. Identity continuity does not establish
          authority continuity.</dd>
          <dt>Principal</dt>
          <dd>The person, office, organization or other body on whose behalf
          authority exists.</dd>
          <dt>Issuer</dt>
          <dd>Whoever issues or signs an authority artifact. The issuer and the
          principal can be different parties.</dd>
          <dt>Issuer standing</dt>
          <dd>Why the issuer was allowed to create, narrow, suspend, revoke or
          replace authority for the principal at the moment of issuance.</dd>
          <dt>Lifecycle standing</dt>
          <dd>Who may suspend, revoke, replace or reaffirm an authority artifact
          now. This is not always the issuer. An organization, a quorum, a
          successor or a security function can hold standing over authority it
          never issued. In this revision a party with lifecycle standing that is
          not the delegation's issuer ends dependent authority by revoking its own
          ancestor grant, or through a suspension cause under
          <xref target="lifecycle-suspension"/>, because
          <xref target="revocation-cascade"/> names only the issuer for a direct
          revocation. Direct revocation by a party other than the issuer is open at
          <xref target="oq-non-issuer-revocation"/>.</dd>
          <dt>Principal binding</dt>
          <dd>Which principal an agent acts for. It can exist before any grant and
          outlive one.</dd>
          <dt>Sponsor</dt>
          <dd>Who is responsible for an agent's continued operation, where a
          deployment has that role. Changing a sponsor does not on its own
          transfer or replace existing authority.</dd>
        </dl>

        <t>A signature that verifies establishes which key signed, and, where an
        identifier-to-key binding is established, which party signed. A verifier
        MUST NOT read it as establishing that the signer held standing to make the
        statement the record carries. Standing MUST be resolved from a source the
        authority model accepts for that statement, and MUST NOT be read from the
        record asserting it. A record's own claim about the role its signer holds is
        the signer's claim about itself, and where that claim conflicts with the
        accepted source the conflict MUST be reported under its own reason code
        rather than folded into a plain role mismatch.</t>

        <t>A standing answer has three values, not two: the party holds the role,
        the party does not hold the role, and the source cannot say. Where the
        source cannot say, the verifier MUST report the state as not established and
        MUST NOT report it as a finding that the party lacks standing.</t>

        <t>Issuer standing and lifecycle standing are separate findings. Issuer
        standing is about the issuer at the moment of issuance and does not change
        with later events. Lifecycle standing is about who may change the artifact
        now. A verifier MUST NOT derive one from the other. Whether an artifact was
        validly issued and whether it still confers authority are likewise two
        findings, established separately. A grant can be validly issued and stay
        dependent on an authority path that later ends.</t>

        <t>Authority and dependencies:</t>
        <dl>
          <dt>Delegated authority</dt>
          <dd>That a subject may take an action because a principal granted it,
          under which constraints, for which targets, for what period, through a
          specific chain.</dd>
          <dt>Authority path and current dependency</dt>
          <dd>Which other authority a grant depends on now. Historical provenance
          and current dependency are two findings.</dd>
          <dt>Presented credential or session</dt>
          <dd>A session or derived token used to exercise authority in one request.
          Ending a grant does not on its own invalidate every session or derived
          token already issued, and ending a session does not on its own end the
          grant.</dd>
          <dt>Activation condition</dt>
          <dd>When already issued authority becomes exercisable. A grant can be
          validly issued and still wait on a date or a recorded event. See
          <xref target="lifecycle-activation" format="default"/>.</dd>
          <dt>Target binding</dt>
          <dd>Which resource, counterparty or object the authority applies to.
          Continuity of a name does not on its own establish continuity of the
          thing named.</dd>
          <dt>Capability binding</dt>
          <dd>Which operation, implementation or declared schema a grant refers to,
          where that distinction matters. See
          <xref target="lifecycle-capability-binding" format="default"/>.</dd>
        </dl>

        <t>Lifecycle state:</t>
        <dl>
          <dt>Issuance</dt>
          <dd>The event that creates an authority artifact.</dd>
          <dt>Suspension</dt>
          <dd>Pauses or narrows the use of authority without permanently ending
          it.</dd>
          <dt>Expiry or exhaustion</dt>
          <dd>Ends authority because a declared time, use count, budget, purpose or
          other bound has been reached.</dd>
          <dt>Revocation</dt>
          <dd>Permanently ends a named authority artifact.</dd>
          <dt>External restriction</dt>
          <dd>A block from outside the grant chain. It can stop some effects while
          the grant itself stays valid.</dd>
          <dt>Authority epoch</dt>
          <dd>Separates current authority from stale authority surviving in
          sessions, queues, replicas, snapshots or restored state. See
          <xref target="lifecycle-epoch" format="default"/>.</dd>
        </dl>

        <t>Decisions and effects:</t>
        <dl>
          <dt>Approval</dt>
          <dd>A principal or approver allows a proposed action. It is an input to
          authorization, with its own scope, expiry and use count, and it can be
          withdrawn before the next authorization boundary consumes it.</dd>
          <dt>Policy version</dt>
          <dd>Which policy an approval or decision was evaluated against. The same
          action can be allowed under one version and denied under the next.</dd>
          <dt>Authorization decision</dt>
          <dd>The record an enforcement point makes that an action was allowed or
          denied, against the authority, policy and inputs it evaluated. The signed
          form is the policy-decision record of
          <xref target="receipt-stages" format="default"/>.</dd>
          <dt>Invocation and execution</dt>
          <dd>The exact action submitted for execution, and the attempt to carry it
          out.</dd>
          <dt>Effect</dt>
          <dd>The externally observable result, if any.</dd>
          <dt>In-flight state</dt>
          <dd>Where an action sits between authorization and a known outcome.
          Authority can change inside that interval.</dd>
        </dl>

        <t>This section is written against three enumerations, and they are never
        mixed. An artifact verdict is what a verifier says about an authority
        artifact at a moment: valid, invalid, not established, not yet effective,
        suspended, or restricted. A boundary outcome is what an enforcement point
        decides about one action at one authorization boundary: authorized, denied
        with a stated reason, or not established. A chain-verification result is
        what <xref target="chain-verification"/> returns for one selected
        root-to-leaf chain: valid, invalid, indeterminate, or unsupported. Two
        findings that share a name across the artifact-verdict and
        boundary-outcome enumerations MUST carry different reason codes.</t>

        <t>The chain-verification result relates to the other two without being
        converted into either. A chain result of valid supports the artifact
        verdict valid for the artifacts on that chain and supports no boundary
        outcome on its own. A chain result of invalid supports the artifact
        verdict invalid. A chain result of indeterminate is carried as
        indeterminate on its own axis, and where a verifier also reports an
        artifact verdict for the artifacts on that chain, that verdict is not
        established with the source or freshness limb named, as
        <xref target="admissibility"/> states. The chain result is not replaced by
        the artifact verdict. A chain result
        of unsupported is carried as unsupported and is neither erased nor folded
        into another value, as <xref target="chain-verification"/> already
        requires of a caller.</t>

        <t>Not established keeps one meaning, which is the evidential one. The
        verifier cannot reach a conclusion because a source is missing,
        unrecognized, stale past its declared bound, silent, self-attested with
        nothing to check it against, or in unresolved conflict with another accepted
        source. It is ignorance and it is not the negation of the claim. Where a
        verifier has reached a conclusion and the conclusion is negative, the
        finding MUST be reported under the shape it has. An enabling condition
        established not to have occurred yet is the artifact verdict not yet
        effective. A composition rule established not to be satisfied denies the
        action at that boundary. A pinned referent established to have changed
        denies the action at that boundary. A verdict of not established MUST name
        at least one missing limb from source, freshness and coverage.</t>

        <t>What this subsection does not establish. It does not say which party
        holds any of these roles in a deployment, and it does not define a registry
        or a protocol for resolving standing. It does not give an authority epoch,
        an activation condition or a non-time bound a place inside a signed
        delegation, because the authority vector of
        <xref target="faceted-attenuation" format="default"/> is closed at seven
        facets and a missing facet is invalid rather than an implicit unconstrained
        value. Human agency law draws related distinctions between actual authority,
        notice and apparent authority. Those doctrines are a source of cases for
        this work. This document does not assume that any of them applies to AI
        agents.</t>

        <t>Requirements. APS-LC-STANDING-NOT-FROM-RECORD, standing is resolved
        from a source the authority model accepts and is not read from the record
        asserting it. APS-LC-STANDING-THREE-VALUED, a source that cannot say
        gives not established rather than a finding that the party lacks standing.
        APS-LC-ISSUER-VS-LIFECYCLE-STANDING, a verifier derives neither issuer
        standing nor lifecycle standing from the other.
        APS-LC-VERDICT-ENUMERATIONS-DISTINCT, artifact verdicts and boundary
        outcomes are two enumerations and two findings sharing a name across them
        carry different reason codes. APS-LC-NOT-ESTABLISHED-LIMB, a verdict of
        not established names at least one missing limb from source, freshness and
        coverage. All five are specified, not exercised.</t>

        <t>Status: Candidate feature. Normative for an implementation claiming this feature, not a requirement of APS Core conformance. Related fixture families:
        activation-not-established, lifecycle-purpose-exhaustion,
        authority-epoch-rollback, sponsor-handover, conflicting-status-sources.
        Implemented requirements: APS-LC-STANDING-NOT-FROM-RECORD, APS-LC-STANDING-THREE-VALUED, APS-LC-VERDICT-ENUMERATIONS-DISTINCT, APS-LC-NOT-ESTABLISHED-LIMB. Related implementation surfaces: agent-passport-system 7.2.0 (npm) and agent-passport-system
        4.2.0 (PyPI), experimental lifecycle-state module.</t>
      </section>

      <section anchor="lifecycle-invariants" numbered="true" toc="default">
        <name>Authority Continuity Rules</name>

        <t>Twelve rules, L1 through L12, about what authority means when the
        records stay the same and the surroundings move. They are separate from
        the eight protocol invariants of
        <xref target="core-invariants" format="default"/> and do not extend that
        numbering. Each subsection states the rule, states what the rule does not
        claim, and carries its own identifiers and status block. Six of the
        twelve are Lifecycle Core. The rest are Candidate.</t>

        <section anchor="lifecycle-l1" numbered="true" toc="default">
          <name>L1. Revoking an Ancestor Invalidates the Authority That Depends on It</name>

          <t>Once a verifier establishes, under the status and freshness rules its
          authority model declares, that a delegation is revoked, every chain that
          depends on that delegation is invalid. This holds where the dependent
          delegation carries no revocation record of its own and appears on no
          enumeration of descendants. Enumerating descendants is a cleanup and
          reporting mechanism. It MUST NOT be what makes a chain-verifiable
          descendant invalid.</t>

          <t>What it does not claim. It does not claim a teardown report is useless.
          It does not reach a credential that carries no chain a verifier can check,
          such as an opaque bearer token, where an issuer-side revocation mechanism
          is still needed. It does not claim a verifier can always establish the
          revocation: an unavailable or stale answer is governed by
          <xref target="lifecycle-l7" format="default"/>, not by this
          invariant.</t>

          <t>Requirement. APS-LC-ANCESTOR-REVOCATION-REACHES-DEPENDENTS, an
          established revocation invalidates every chain that depends on the
          revoked delegation, and enumeration of descendants is not what makes a
          chain-verifiable descendant invalid. Specified, not exercised: no vector
          in either family named below carries an assertion that fails when
          enumeration is treated as the operative mechanism.</t>

          <t>Status: Lifecycle Core. This rule restates the per-member revocation
          check of <xref target="chain-verification"/> applied to a dependent
          chain, which is a requirement of the closed core. Related fixture families:
          ancestor-revocation-chain (4 vectors), authority-epoch-rollback (12
          vectors). Implemented requirements:
          APS-LC-ANCESTOR-REVOCATION-REACHES-DEPENDENTS. Related implementation
          surfaces: agent-passport-system 7.2.0 (npm) and agent-passport-system
          4.2.0 (PyPI).</t>
        </section>

        <section anchor="lifecycle-l2" numbered="true" toc="default">
          <name>L2. Identity Continuity Does Not Imply Authority Continuity</name>

          <t>The same agent identity MAY appear as the subject of a revoked chain
          and of an independent replacement chain. A verifier MUST decide each chain
          on its own members and MUST NOT carry a result from one chain to the
          other. Revoking the first chain's ancestor invalidates the first chain and
          says nothing about the second.</t>

          <t>What it does not claim. It does not claim the agent must stop running.
          It does not claim the replacement chain is narrower or wider than the one
          it replaces. It does not state when replacement authority must exist, and
          it does not decide whether a handover accepts an overlap or accepts a
          gap.</t>

          <t>Requirement. APS-LC-IDENTITY-NOT-AUTHORITY, a verifier decides each
          chain on its own members and carries no result from one chain to
          another. Specified, not exercised.</t>

          <t>Status: Candidate feature. Normative for an implementation claiming this feature, not a requirement of APS Core conformance. Related fixture families: sponsor-handover (6 vectors).
          Implemented requirements: APS-LC-IDENTITY-NOT-AUTHORITY. Related implementation surfaces: agent-passport-system 7.2.0 (npm) and
          agent-passport-system 4.2.0 (PyPI).</t>
        </section>

        <section anchor="lifecycle-l3" numbered="true" toc="default">
          <name>L3. Reauthorization Creates New Authority</name>

          <t>Continuity after revocation is a new grant from a principal that
          currently holds the authority being granted. A verifier MUST NOT treat a
          revocation as reversed and MUST NOT re-parent a revoked chain under a new
          ancestor. A record stating that a revocation was published in error is a
          new record that references the revocation. It does not remove the
          revocation, the revocation still verifies, and the record does not on its
          own change any chain result.</t>

          <t>Recording that a revocation was made in error is permitted only as an
          explicit, attributable record from a source with lifecycle standing. Such
          a record is a new record and not a reversal of the old one. Revocation is
          irreversible,
          as <xref target="core-invariants" format="default"/> states, and a record
          withdrawing a recorded revocation does not remove it. A
          proposed:revocation-withdrawal:v0 record references the revocation by identifier,
          carries the delegation that revocation named, the party stating the
          withdrawal, the instant, a machine-readable reason code and optional
          free-text detail. After an accepted withdrawal the revocation is still held,
          still verifies byte for byte, and the chain result does not change. The
          resulting position is not that the revocation never happened. It is that the
          revocation was withdrawn by a named record, which is this document's rule
          that a later finding is a new record rather than an edit of an earlier
          one.</t>

          <t>Whether a party may withdraw a revocation is a lifecycle-standing
          question the authority model answers, and it MUST NOT be read from the
          withdrawal record itself. WITHDRAWAL_ACCEPTED states that the store
          accepted the record and states nothing about authority. The revocation
          stands, the chain result is unchanged, and no authority returns. The
          outcome codes are WITHDRAWAL_ACCEPTED,
          WITHDRAWAL_SCHEMA_INVALID, WITHDRAWAL_NAMES_NO_HELD_REVOCATION,
          WITHDRAWAL_TARGET_MISMATCH, WITHDRAWAL_SIGNER_WITHOUT_STANDING and
          WITHDRAWAL_STANDING_NOT_ESTABLISHED. The last two are different findings and
          MUST NOT be collapsed: one says the party may not, the other says nobody has
          told the verifier either way. A withdrawal that changes nothing in silence
          is indistinguishable from one that was never submitted, so a refusal MUST be
          reported with its code.</t>

          <t>What it does not claim. It does not claim a correction is forbidden.
          The word doing the work is silently. It does not state who may withdraw a
          recorded revocation, which is a lifecycle-standing question the authority
          model answers. It does not state what a verifier reports after an accepted
          withdrawal beyond keeping the revocation and its result.</t>

          <t>Requirements. APS-LC-NO-REVOCATION-REVERSAL, a verifier does not
          treat a revocation as reversed, which restates the irreversibility INV-5
          states in the closed core. APS-LC-NO-REPARENTING, a verifier does not
          re-parent a revoked chain under a new ancestor, which the closed core
          does not state. APS-LC-WITHDRAWAL-NOT-REMOVAL, a record
          withdrawing a recorded revocation is a new record, the revocation is
          still held and still verifies, and the chain result does not change.
          All three are specified, not exercised.</t>

          <t>Status: Lifecycle Core for one proposition, carried by
          APS-LC-NO-REVOCATION-REVERSAL, that revocation is
          irreversible for the authority object it names, which
          <xref target="core-invariants"/> states as INV-5 and which is a
          requirement of the closed core. Everything else in this subsection is a
          Candidate feature under the lifecycle continuity rules named in
          <xref target="conformance-labels"/>, normative for an implementation
          claiming it and not a requirement of APS Core conformance: the rule
          against re-parenting a revoked chain under a new ancestor, carried by
          APS-LC-NO-REPARENTING, the treatment
          of a record stating that a revocation was published in error, and the
          withdrawal record and its outcome codes above. Related fixture families:
          sponsor-handover (6 vectors), authority-epoch-rollback (12 vectors).
          Implemented requirements: APS-LC-NO-REVOCATION-REVERSAL, APS-LC-NO-REPARENTING, APS-LC-WITHDRAWAL-NOT-REMOVAL. Related implementation surfaces: agent-passport-system 7.2.0 (npm) and
          agent-passport-system 4.2.0 (PyPI), experimental authority-state
          module.</t>
        </section>

        <section anchor="lifecycle-l4" numbered="true" toc="default">
          <name>L4. A Successor Does Not Inherit the Predecessor's Delegation Tree</name>

          <t>A successor's authority covers what the successor issues. A
          descendant whose ancestor artifact was revoked is invalid, and it stays
          invalid until a party that currently holds the authority issues it a new
          grant. The departure is not the event that invalidated it. A departure
          with no revocation anywhere on the path leaves the descendant's result to
          chain verification, as <xref target="lifecycle-principal-departure"/>
          states.</t>

          <t>What it does not claim. It does not decide whether office-based
          authority continues, suspends or needs reaffirmation when no current
          holder can exercise or revoke it. It does not settle how to treat
          long-lived grants an issuer signs shortly before leaving. Both remain
          open.</t>

          <t>Requirement. APS-LC-SUCCESSOR-NO-INHERITANCE, a successor's
          authority covers what the successor issues, and descendants whose
          selected chain contains the revoked predecessor delegation stay invalid
          until a party that currently holds the authority issues new grants.
          Departure is never the invalidating event. Specified, not
          exercised.</t>

          <t>Status: Candidate feature. Normative for an implementation claiming this feature, not a requirement of APS Core conformance. Related fixture families: sponsor-handover (6 vectors).
          Implemented requirements: none. Related implementation surfaces: no released package.</t>
        </section>

        <section anchor="lifecycle-l5" numbered="true" toc="default">
          <name>L5. Independent Chains Are Not Combined</name>

          <t>Each action selects one root-to-leaf authority chain. A verifier MUST
          NOT union scope grants or spend ceilings from more than one chain. An
          agent that holds two valid chains MUST NOT use them together to obtain
          authority broader than either chain allows on its own. An implementation
          that judges an action against a held set MUST report the single chain the
          action was decided against, and that report MUST name one chain rather
          than a set.</t>

          <t>A presentation that concatenates two root-to-leaf chains into one array
          is not a selection of one chain, and an implementation MUST NOT decide an
          action against it. An implementation MAY refuse such a presentation before
          chain verification runs, on the ground that the fault is the presentation
          rather than the records, or it MAY let chain verification report the
          broken parent link. Both paths refuse the action.</t>

          <t>What it does not claim. It does not forbid independently rooted chains
          from coordinating on a shared objective while each keeps its own scope. It
          does not define how an action selects its chain, which is an
          implementation choice. It does not define cross-principal composition,
          which requires a separate profile. It does not decide what an
          implementation does next when the chain an action selected turns out to be
          unusable, which is
          <xref target="lifecycle-l11" format="default"/>.</t>

          <t>Requirements. APS-AUTH-CHAIN-NO-UNION, an action is decided against
          one root-to-leaf chain and no verifier unions scope grants or spend
          ceilings across chains, which restates the two propositions
          <xref target="chain-verification"/> states in the closed core, exercised
          by single-chain-selection SCS-06, whose
          assertion expects the chain verifier's PARENT_MISMATCH at index 1 when a
          concatenated presentation is offered as one chain, and by the eleven
          cases of chain-selection-no-union. APS-AUTH-CHAIN-SET-NOT-A-SELECTION, a
          concatenated presentation is not a selection of one chain and no action
          is decided against it, exercised by the same vector.
          APS-AUTH-CHAIN-REPORT-ONE-CHAIN, an implementation that judges an action
          against a held set reports the single chain the action was decided
          against and names one chain rather than a set, specified and not
          exercised. Neither of the last two is stated in the closed core.</t>

          <t>Status: Lifecycle Core for one proposition, carried by
          APS-AUTH-CHAIN-NO-UNION, that an action is decided against one
          root-to-leaf chain with no union across chains, which
          <xref target="chain-verification"/> states. The reporting rule of
          APS-AUTH-CHAIN-REPORT-ONE-CHAIN and the concatenated-presentation rule of
          APS-AUTH-CHAIN-SET-NOT-A-SELECTION are a Candidate feature under the
          lifecycle continuity rules named in
          <xref target="conformance-labels"/>, normative for an implementation
          claiming it and not a requirement of APS Core conformance. Related fixture families: single-chain-selection (6
          vectors), chain-selection-no-union (11 vectors). Exercised requirements: APS-AUTH-CHAIN-NO-UNION, APS-AUTH-CHAIN-SET-NOT-A-SELECTION. Implemented requirements: APS-AUTH-CHAIN-NO-UNION, APS-AUTH-CHAIN-SET-NOT-A-SELECTION, APS-AUTH-CHAIN-REPORT-ONE-CHAIN. Related implementation surfaces:
          agent-passport-system
          7.2.0 (npm) and agent-passport-system 4.2.0 (PyPI), chain-selection
          module, stable.</t>
        </section>

        <section anchor="lifecycle-l6" numbered="true" toc="default">
          <name>L6. An Earlier Approval Is Not Current Authority</name>

          <t>An approval issued earlier does not establish that the authority it
          rested on is still current. The enforcement boundary MUST recheck
          revocation state and temporal validity at the next authorization
          boundary, meaning the moment
          the approval is consumed to admit the action, and not only at the moment
          the decision was issued. A cached authorization decision MUST NOT be used
          past the freshness bound the authority model declares for it.</t>

          <t>What it does not claim. It does not state that every input of the
          earlier decision is re-evaluated at that boundary. The recheck of
          temporal validity sits in the closed core beside the revocation recheck,
          at <xref target="two-phase-execution"/>. Revalidation broader than those
          two is exercised only as a candidate. It does not
          state what happens to an operation already in flight when the recheck
          fails, which stays open.</t>

          <t>Requirements. APS-LC-RECHECK-AT-ADMISSION, the enforcement boundary
          rechecks revocation state and temporal validity at the moment the
          approval is consumed to admit dispatch and not only at the moment the
          decision was issued. This
          obligation is stated normatively in the closed core, at
          <xref target="revocation-cascade"/>,
          <xref target="two-phase-execution"/> and
          <xref target="policy-decision"/>, and this rule restates it rather than
          adding to it. APS-LC-CACHED-DECISION-FRESHNESS, a cached authorization
          decision is not used past the freshness bound the authority model
          declares for it, which the closed core does not state. Both are
          specified, not exercised: no vector named below asserts a failure keyed
          to the recheck moment itself.</t>

          <t>Status: Lifecycle Core for one proposition, carried by
          APS-LC-RECHECK-AT-ADMISSION, that the boundary rechecks revocation state
          and temporal validity at the moment the approval is consumed to admit
          dispatch, which the closed core states at
          <xref target="revocation-cascade"/>,
          <xref target="two-phase-execution"/> and
          <xref target="policy-decision"/>. The cached-decision freshness bound,
          carried by APS-LC-CACHED-DECISION-FRESHNESS, is a Candidate feature,
          normative for an implementation claiming it and not a requirement of APS
          Core conformance. Related fixture families: cached-authorization-revocation (9 vectors),
          approval-single-use (9 vectors), runtime-authority-denial-continuity (9
          vectors). Implemented requirements: none. Related implementation surfaces: no released package.</t>
        </section>

        <section anchor="lifecycle-l7" numbered="true" toc="default">
          <name>L7. Unknown Revocation State Is Not Active</name>

          <t>A revocation answer that is unavailable or stale is indeterminate. A
          verifier MUST NOT read it as active, and the record MUST NOT claim a
          revocation that no source stated. An enforcement point MAY deny on an
          indeterminate answer. Where it does, the denial MUST say that the state
          was not established rather than say that a revocation occurred. A resolver
          answer the implementation does not recognize, including a status value
          added after the implementation was written, MUST be treated as not
          established rather than as active.</t>

          <t>What it does not claim. It does not decide between denying and waiting.
          It does not define freshness bounds, which the authority model declares
          per source. It does not on its own extend to every current lifecycle state
          claim, which is a candidate broadening rather than this invariant.</t>

          <t>Requirements. APS-LC-UNKNOWN-NOT-ACTIVE, an unavailable, stale or
          unrecognized revocation state is not active. Specified, not exercised:
          the families below decide the normalization, and neither names a vector
          whose assertion fails when an unavailable answer is read as active.
          APS-LC-UNKNOWN-DENIAL-SAYS-NOT-ESTABLISHED, an enforcement point may
          deny on an indeterminate answer, and a denial on it says the state was
          not established rather than that a revocation occurred. Specified, not
          exercised: neither family names a vector whose assertion turns on the
          wording of the denial.</t>

          <t>Status: Lifecycle Core for one proposition, that an unknown
          revocation state is not active, which
          <xref target="chain-verification"/> states for an unavailable, stale or
          unrecognized revocation-resolution outcome and which is a requirement of
          the closed core. Everything else in this subsection is a Candidate
          feature under the lifecycle continuity rules named in
          <xref target="conformance-labels"/>, normative for an implementation
          claiming it and not a requirement of APS Core conformance: the
          permission to deny on an indeterminate answer, and the obligation that
          such a denial say the state was not established rather than say a
          revocation occurred, which APS-LC-UNKNOWN-DENIAL-SAYS-NOT-ESTABLISHED
          carries. Related fixture families: revocation-resolution-forward-compat
          (14 vectors), conflicting-status-sources (14 vectors). Implemented requirements: APS-LC-UNKNOWN-NOT-ACTIVE. Related implementation surfaces:
          agent-passport-system 7.2.0 (npm) and agent-passport-system 4.2.0
          (PyPI).</t>
        </section>

        <section anchor="lifecycle-l8" numbered="true" toc="default">
          <name>L8. Suspension Is Not Revocation</name>

          <t>Suspension pauses the use of an authority artifact and of the authority
          that depends on it, and it can be released. Revocation is terminal for the
          artifact it names. A verifier MUST report the two under different verdicts
          and MUST NOT report one as the other. A restricted state is a third
          finding: authority continues in reduced form under a live constraint that
          does not pause it, and a restriction is not required to pause
          descendants.</t>

          <t>What it does not claim. It does not define who may release a
          suspension. It does not define a precedence order among concurrent causes.
          It does not state what happens to an action queued before a suspension
          that is still queued after the release.</t>

          <t>Requirement. APS-LC-SUSPENSION-NOT-REVOCATION, a verifier reports
          suspension and revocation under different verdicts and reports neither
          as the other, and a restricted state is a third finding. Specified, not
          exercised.</t>

          <t>Status: Candidate feature. Normative for an implementation claiming this feature, not a requirement of APS Core conformance. Related fixture families:
          suspension-cause-composition (16 vectors). Implemented requirements: APS-LC-SUSPENSION-NOT-REVOCATION. Related implementation surfaces:
          agent-passport-system 7.2.0 (npm) and agent-passport-system 4.2.0
          (PyPI), experimental suspension module.</t>
        </section>

        <section anchor="lifecycle-l9" numbered="true" toc="default">
          <name>L9. Key Rotation Is Not Delegation Revocation</name>

          <t>An identity MAY rotate its signing key and continue. A verifier MUST
          select the key version authorized at the artifact's issued_at rather than
          the key current at verification time, so a rotation does not on its own
          invalidate artifacts signed before it. The artifact timestamp is an issuer
          claim. Where the result depends on whether an artifact was signed before a
          key was retired, the verifier needs timestamp or log evidence its
          authority model accepts, and without it the result is indeterminate.
          Revoking a delegation is a statement about that delegation and not about
          the key that signed it.</t>

          <t>What it does not claim. It does not state which evidence establishes
          the signing instant. It does not cover key compromise, where an authority
          model may need to reach artifacts signed before the rotation, and this
          document states no rule for that case.</t>

          <t>Requirements. APS-LC-ROTATION-NOT-REVOCATION, a verifier selects the
          key version authorized at the artifact's issued_at rather than the key
          current at verification time, the artifact timestamp is an issuer claim,
          and the key-authority result is indeterminate where the signing instant
          is not established. All three are stated in the closed core at
          <xref target="key-rotation"/> and this rule restates them.
          APS-LC-REVOCATION-NOT-ABOUT-KEY, revoking a delegation says nothing
          about the key that signed it, which the closed core does not state. Both
          are specified, not exercised: the family below
          supplies its own stand-in evidence record and records that it is a
          fixture stand-in.</t>

          <t>Status: Lifecycle Core for the three propositions the closed core
          states, carried by APS-LC-ROTATION-NOT-REVOCATION: historical key
          selection at the artifact's issued_at, the artifact timestamp as an
          issuer claim, and the indeterminate key-authority result where the
          signing instant is not established.
          <xref target="key-rotation"/> states all three. One proposition is a
          Candidate feature under the lifecycle continuity rules named in
          <xref target="conformance-labels"/>, normative for an implementation
          claiming it and not a requirement of APS Core conformance, carried by
          APS-LC-REVOCATION-NOT-ABOUT-KEY: that revoking a delegation says nothing
          about the key that signed it.
          Related fixture families: key-rotation-historical (5 vectors). Implemented requirements: APS-LC-ROTATION-NOT-REVOCATION, APS-LC-REVOCATION-NOT-ABOUT-KEY. Related implementation surfaces:
          agent-passport-system 7.2.0 (npm) and agent-passport-system 4.2.0
          (PyPI).</t>
        </section>

        <section anchor="lifecycle-l10" numbered="true" toc="default">
          <name>L10. Expiry Is Not Revocation</name>

          <t>Expiry ends authority because a declared bound was reached. Revocation
          ends it because a party with lifecycle standing ended it early. Both stop
          use. A verifier MUST report which of the two occurred and MUST NOT
          collapse them into a single state. Exhaustion of a non-time bound is an
          ending of the expiry kind and is not a revocation. A grant MAY be expired
          and exhausted at the same instant, and a verifier MUST report both rather
          than letting one overwrite the other.</t>

          <t>What it does not claim. It does not state that an ending must produce a
          signed record, although
          <xref target="lifecycle-bounds" format="default"/> defines one for
          exhaustion. It does not state that a replacement grant is owed after
          either ending.</t>

          <t>Requirement. APS-LC-EXPIRY-NOT-REVOCATION, a verifier reports which
          of expiry and revocation occurred and does not collapse them, and
          reports a grant expired and exhausted at one instant as both. Specified,
          not exercised.</t>

          <t>Status: Candidate feature. Normative for an implementation claiming this feature, not a requirement of APS Core conformance. Related fixture families:
          lifecycle-purpose-exhaustion (21 vectors), lifecycle-expiry-and-renewal
          (15 vectors). Implemented requirements: APS-LC-EXPIRY-NOT-REVOCATION. Related implementation surfaces: agent-passport-system 7.2.0 (npm) and
          agent-passport-system 4.2.0 (PyPI), experimental bounds module.</t>
        </section>

        <section anchor="lifecycle-l11" numbered="true" toc="default">
          <name>L11. No Silent Authority Resurrection</name>

          <t>Where the authority path an implementation selected becomes invalid,
          the implementation MUST NOT decide the action against another held grant
          unless that switch was itself authorized. A switch MUST be reported as a
          decision that names the path switched away from and the authorization
          relied on for the switch. An implementation that refuses to switch MUST
          NOT read any held chain other than the one the action selected, so that a
          refusal cannot conceal a switch.</t>

          <t>What it does not claim. The backup-restore and rollback case, where a
          restore presents authority state from before a change as current, is
          carried by <xref target="lifecycle-epoch"/> and <xref target="cand-02"/>
          rather than here. It does not define what makes a switch
          authorized. It does not forbid an agent from holding more than one chain.
          It does not state what happens to the operation after the refusal. It does
          not make an implementation that has never observed the newer authority
          state at fault for not detecting a regression it could not see.</t>

          <t>Requirement. APS-LC-NO-RESURRECTION, an implementation does not
          decide an action against another held grant when the selected authority
          path becomes invalid unless the switch was itself authorized, and a
          switch is reported as a decision naming the path switched away from.
          Specified, not exercised.</t>

          <t>Status: Candidate feature. Normative for an implementation claiming this feature, not a requirement of APS Core conformance. Related fixture families:
          chain-selection-no-union (11 vectors), authority-epoch-rollback (12
          vectors). Implemented requirements: APS-LC-NO-RESURRECTION. Related implementation surfaces: agent-passport-system 7.2.0 (npm) and
          agent-passport-system 4.2.0 (PyPI), the fallback surface of the
          chain-selection module.</t>
        </section>

        <section anchor="lifecycle-l12" numbered="true" toc="default">
          <name>L12. Completeness Is a Separate and Stronger Claim</name>

          <t>A record stating that a teardown processed a set of descendants
          establishes that its signer made that statement. It does not establish
          that the set was every descendant at the relevant boundary, that every
          write persisted, or that nothing was issued concurrently. A claim that a
          set is complete MUST state the basis on which it is complete, and a
          verifier that cannot establish that basis MUST report not established with
          the coverage limb named, rather than reading the claim as covering the
          whole set. A query whose interval is still inside a declared delivery lag
          does not cover that interval, and an empty result over it is delivery lag
          rather than absence.</t>

          <t>What it does not claim. It does not define what basis is sufficient for
          a completeness claim. That is open: what set a boundary claims to have
          accepted at a moment, what prevents an addition afterwards that still
          counts as earlier authority, and what public commitment can establish
          closure over that set without exposing private state are all
          unsettled. It does not turn an incomplete teardown into a finding that the
          descendants the record does not name are valid.</t>

          <t>Requirement. APS-LC-COMPLETENESS-BASIS, a claim that a set is
          complete states the basis on which it is complete, and a verifier that
          cannot establish that basis reports not established with the coverage
          limb named. This requirement is exercised by lifecycle-infrastructure-failure LC-F-016-b,
          LC-F-026-a, LC-F-027-a, LC-F-027-b and LC-F-029-a, the five cases in
          which the family names this rule.</t>

          <t>Status: Candidate feature. Normative for an implementation claiming this feature, not a requirement of APS Core conformance. Related fixture families:
          lifecycle-infrastructure-failure (30 vectors),
          lifecycle-evidence-and-record (12 vectors). Exercised requirements: APS-LC-COMPLETENESS-BASIS. Implemented requirements: none. Related implementation surfaces: no released
          package.</t>
        </section>
      </section>

      <section anchor="lifecycle-mechanisms" numbered="true" toc="default">
        <name>Lifecycle Mechanisms</name>

        <t>Eight mechanisms, each its own Candidate feature. An implementation
        claims them one at a time, and claiming one implies none of the others.
        They are the machinery the continuity rules above are checked with:
        activation conditions, purpose bounds and exhaustion, capability and
        policy binding, the authority epoch, suspension cause sets, status
        sources, succession and handover, and what changes when a person
        leaves.</t>

        <section anchor="lifecycle-activation" numbered="true" toc="default">
          <name>Activation Conditions</name>

          <t>Authority subject to an activation condition is not exercisable until
          that condition is established by evidence the authority model accepts, from
          a source the model accepts for that condition. An activation condition is a
          separate signed record that references a delegation by its identifier. It is
          not a facet, because the authority vector of
          <xref target="faceted-attenuation" format="default"/> is closed at seven
          facets.</t>

          <t>Two record types carry this surface. A proposed:activation-condition:v0
          record declares the condition and names the delegation it gates. A
          proposed:activation-attestation:v0 record is one party's statement about the
          condition. An authority model MAY accept condition evidence in a record
          shape this document does not define, and where it does, the model MUST
          declare which record types it accepts for that condition.</t>

          <t>A condition is of kind date or of kind recorded_event. A date condition
          carries an activation_date and needs no evidence. The verifier compares the
          action instant with the date, so an unreached date is a known negative and
          never an unknown one. A recorded_event condition carries an event_type, an
          event_id, at least one required attestor role, a threshold of at least one,
          and an instant_basis.</t>

          <t>Required attestor roles are roles and never principals. Who holds a role
          at an instant is resolved outside the record, and a condition that names no
          accepted source has not stated what it accepts and MUST be refused rather
          than treated as accepting anything. A record from a party holding any named
          role is acceptable, which is a union and not a conjunction. The threshold
          states how many acceptable attestations establish a finding and has no
          default value.</t>

          <t>The instant_basis states which instant a positive attestation is measured
          against, and it has no default value. Under condition_occurrence the
          governing instant is the instant the condition is asserted to have occurred.
          Under attestation_written it is the instant the record was written. The two
          give opposite answers for an occurrence before an action attested after it,
          so the condition MUST state which one governs.</t>

          <t>An attestation asserts either condition_occurred, carrying the occurrence
          instant, or condition_not_occurred_through, carrying the instant through
          which the attestor states the condition had not occurred. The second is a
          negative that is evidence rather than an absence of evidence, and that is
          what separates not yet effective from not established.</t>

          <t>A verifier checks each presented attestation in this order, and the first
          failing check is that record's reason:</t>
          <ol spacing="normal">
            <li>the record type is one the model declared it accepts for this
            condition, else ATTESTATION_RECORD_TYPE_NOT_ACCEPTED</li>
            <li>a key resolves for the record's verification method at the record's
            own written instant, and the signature verifies over the canonical bytes
            of the body, else ATTESTATION_SIGNATURE_UNVERIFIED</li>
            <li>the verification method belongs to the attestor the body names, else
            ATTESTATION_ATTESTOR_BINDING_MISMATCH</li>
            <li>the accepted source can say whether the attestor holds the role, else
            ATTESTATION_ATTESTOR_ROLE_UNKNOWN</li>
            <li>the role the record claims for itself agrees with the accepted source,
            else ATTESTATION_ROLE_CLAIM_CONFLICT</li>
            <li>the attestor holds a role the condition requires, else
            ATTESTATION_ATTESTOR_ROLE_MISMATCH</li>
            <li>the condition identifier, event type and event identifier are the
            condition's own, else ATTESTATION_CONDITION_MISMATCH</li>
            <li>the assertion is one of the two defined above and carries the member
            that assertion needs, else ATTESTATION_UNKNOWN_ASSERTION</li>
            <li>every instant on the record is one the verifier will compare, else
            ATTESTATION_INSTANT_MALFORMED</li>
            <li>a condition_not_occurred_through record reaches the action instant,
            else ATTESTATION_DOES_NOT_REACH_ACTION</li>
          </ol>

          <t>A record that fails any of these checks is not evidence in either
          direction. It cannot establish the condition and it equally cannot establish
          that the condition was unmet. A negative statement from a source the model
          does not accept for this condition therefore gives not established and MUST
          NOT give not yet effective.</t>

          <t>Each accepted record yields one finding, measured on the condition's own
          instants: occurred_by_action, occurred_after_action, or
          not_occurred_through_action. The verdict follows in this order. Where both
          occurred_by_action and not_occurred_through_action are present, two accepted
          records disagree, the verdict is not established with reason
          CONDITION_EVIDENCE_CONFLICT, and neither record is discarded in favour of
          the other. Where occurred_by_action alone is present and the threshold is
          met, the verdict is valid with reason ACTIVATION_ESTABLISHED. Where
          not_occurred_through_action is present, the verdict is not yet effective
          with reason CONDITION_ESTABLISHED_NOT_YET_OCCURRED. Where
          occurred_after_action is present, the verdict is not yet effective with
          reason CONDITION_FIRST_OCCURRED_AFTER_ACTION. Where no finding is present,
          the verdict is not established, with ACTIVATION_THRESHOLD_NOT_MET where
          accepted records exist but fall short of the threshold, with
          NO_ATTESTATION_PRESENTED where nothing was presented, and otherwise with the
          reason of the record that got furthest through the checks.</t>

          <t>A condition presented against a different delegation gives not
          established with reason CONDITION_DELEGATION_MISMATCH and the coverage limb
          named. The claim does not state that it covers what the verdict needed.</t>

          <t>Only three verdicts are reachable here: valid, not yet effective and not
          established. An unmet activation condition MUST NOT make a grant invalid.
          Whether the grant is valid at all is chain verification's answer and not
          this surface's. A record written after an action MAY establish a condition
          that obtained before it, which is the ordinary case for any model built
          around a determination recorded after the fact. A condition whose first
          occurrence is after the action does not reach back to that action, and the
          same record establishes the condition for a later action.</t>

          <t>What it does not establish. An activation condition is enforced only
          at a boundary that claims this feature. A delegation gated by a
          recorded_event condition verifies as valid at a boundary that does not
          claim it, because the condition is a separate record the chain does not
          carry and chain verification never reads. An issuer that needs a gate
          enforced at every boundary has only the time facet of
          <xref target="faceted-attenuation"/>, whose not_before every chain
          verifier applies. It does not settle which clock governs an
          instant comparison, and a single time source or a declared smear window can
          both produce readings a verifier has no basis to accept. It has no
          vocabulary for a condition whose trigger is that something did not happen
          within a declared window, and the unresolved standing answer is what keeps
          that case reachable rather than silently answered. It does not state whether
          a condition, once established, stays established. It does not decide whether
          a wait carried by the time facet is reported as invalid or as not yet
          effective: chain verification returns invalid with NOT_YET_VALID for a
          not_before that has not been reached, this surface returns not yet effective
          for an activation date at the same instant, and the difference is recorded
          here rather than resolved.</t>

          <t>Requirements. APS-LC-ACTIVATION-SOURCE-DECLARED, an authority model
          accepting condition evidence in a record shape this document does not
          define declares which record types it accepts for that condition, and a
          condition naming no accepted source is refused rather than read as
          accepting anything. APS-LC-ACTIVATION-EVIDENCE-ORDER, each presented
          attestation is checked in the stated order and the first failing check is
          that record's reason. APS-LC-ACTIVATION-NOT-INVALID, an unmet activation
          condition does not make a grant invalid, and only valid, not yet effective
          and not established are reachable on this surface. All three are
          specified, not exercised: the family below decides the verdicts and does
          not carry an assertion keyed to the order of the checks.</t>

          <t>Status: Candidate feature. Normative for an implementation claiming this feature, not a requirement of APS Core conformance. Related fixture families:
          activation-not-established (19 vectors). Implemented requirements: APS-LC-ACTIVATION-SOURCE-DECLARED, APS-LC-ACTIVATION-EVIDENCE-ORDER, APS-LC-ACTIVATION-NOT-INVALID. Related implementation surfaces:
          agent-passport-system 7.2.0 (npm) and agent-passport-system 4.2.0 (PyPI),
          experimental activation module.</t>
        </section>

        <section anchor="lifecycle-bounds" numbered="true" toc="default">
          <name>Purpose Bounds and Exhaustion</name>

          <t>A grant can end because a declared non-time bound was reached. Three
          bound kinds are defined: purpose, use_count and budget. A
          proposed:authority-bound:v0 record declares one bound on one delegation, carrying
          a bound identifier, the delegation's identifier, the kind, the bound value,
          and the attestor roles that may state the bound was reached. Like an
          activation condition, a bound is a separate record rather than a facet.</t>

          <t>The three kinds are reached by different means and MUST NOT be conflated.
          A purpose bound is reached when a fulfilment record from a party with
          standing establishes that the stated reason was met. Exercising the grant
          does not reach it. A use_count bound is reached by the admission itself, and
          no fulfilment record is involved. A budget bound is reached when committed
          plus reserved spend reaches the cumulative ceiling, under the cumulative
          spend rules this document states for a delegation subtree, where signatures
          establish static limits and do not establish the current cumulative
          total. A budget bound is never wider than the facet's cumulative limit.
          Reaching the facet's limit is the reservation refusal the closed core
          already states at <xref target="cumulative-spend"/>, not exhaustion
          under this feature, and a boundary reports the two separately.</t>

          <t>Purpose membership is not purpose exhaustion. Whether a requested purpose
          falls inside a grant's allowed purposes answers the same way for the second
          action as for the first. An implementation that checks the chain, the time
          facet, revocation state and purpose membership, and stops there, admits an
          action under a grant that has already done its one job. A conforming
          enforcement boundary MUST evaluate the bound separately from
          membership.</t>

          <t>A fulfilment record has record type proposed:authority-bound-fulfilment:v0 and
          carries the bound identifier, the delegation identifier, the attestor, the
          verification method, the instant the record was written inside the signed
          content, a machine-readable outcome of fulfilled or not_fulfilled, a
          machine-readable reason code, and optional free-text detail. It is shaped
          after what this document requires of a revocation record, which is the
          nearest case of a party with standing recording that an authority artifact's
          state changed. A record that says not_fulfilled is a statement about the
          world, so that a fulfilment record existing and the record saying the
          purpose was met stay two facts.</t>

          <t>A bound evaluation reports one of three states. The bound is not reached,
          with reason BOUND_NOT_REACHED. The bound is exhausted, with reason
          PURPOSE_EXHAUSTED, USE_COUNT_EXHAUSTED or BUDGET_EXHAUSTED according to the
          kind. Or the state is not established, with reason
          BOUND_STATE_NOT_ESTABLISHED. A fulfilment claim the boundary cannot
          establish MUST give not established and MUST NOT give exhausted. That
          covers a record whose signature does not verify and a record authenticated
          by a party without standing, and the two MUST be reported under different
          per-record codes: FULFILMENT_SIGNATURE_INVALID and
          FULFILMENT_ATTESTOR_WITHOUT_STANDING. Where no key resolves for the
          attestor's method the code is FULFILMENT_KEY_UNRESOLVED, which is a source
          gap and not a signature failure. Where the accepted source cannot say
          whether the attestor holds a role the code is
          FULFILMENT_ATTESTOR_ROLE_UNKNOWN, which is not the same finding as the party
          lacking standing. The remaining per-record codes are FULFILMENT_ACCEPTED,
          FULFILMENT_SCHEMA_INVALID, FULFILMENT_NOT_BOUND_TO_BOUND,
          FULFILMENT_OUTCOME_NOT_FULFILLED, FULFILMENT_NOT_YET_ATTESTED and
          FULFILMENT_NOT_APPLICABLE_TO_KIND. A verifier asked about one instant MUST
          NOT read a record written after it.</t>

          <t>An exhaustion is not reversible. A record asking to void an exhaustion
          MUST be refused, and it MUST be refused whether or not its signer holds
          standing to revoke the grant, because standing to revoke is not standing to
          undo an ending that already occurred. A refusal for want of standing and a
          refusal because the ending is terminal are two findings and are reported
          apart. This document fixes no reason code for either refusal, and no
          released package ships one.</t>

          <t>An exhaustion MAY be recorded. A proposed:authority-exhaustion:v0 record
          carries the bound identifier, the delegation identifier, the kind, the
          enforcement boundary making the finding, the verification method, the
          instant the finding was made inside the signed content, the reason code that
          reached exhausted, and the evidence the finding rests on. For a purpose
          bound the evidence names the attestor and written instant of every accepted
          fulfilment record. For a use_count or budget bound the evidence is empty,
          because the basis is the boundary's own ledger. The record attests that the
          named boundary found, from the evidence it names, that the bound had been
          reached. It does not attest that the purpose was met in the world, which is
          the same separation
          <xref target="receipt-stages" format="default"/> draws for an action-result
          record.</t>

          <t>Expiry and exhaustion are separate endings and can hold at the same
          instant. A verifier MUST report the chain result and the bound state side by
          side, and neither overwrites the other. Neither is a revocation.</t>

          <t>What it does not establish. This document does not authenticate a bound
          declaration. Because the facet set is closed, a bound cannot ride inside the
          signed delegation, and the declaration is an input the authority model
          establishes by its own means, whether a principal signature over the body,
          an entry in a registry the verifier accepts, or a term outside the wire
          format. It does not state who holds standing to attest a fulfilment. It does
          not let a verifier with no access to the boundary's ledgers reach an
          exhaustion verdict for a use_count or budget bound from signed records
          alone, and the empty evidence array on the record says so rather than hiding
          it. It does not settle how far a detected reuse of a single-use artifact
          reaches into artifacts already issued under that grant.</t>

          <t>Requirements. APS-LC-BOUND-KINDS-DISTINCT, the three bound kinds are
          reached by different means and are not conflated.
          APS-LC-PURPOSE-MEMBERSHIP-NOT-EXHAUSTION, a conforming enforcement
          boundary evaluates the bound separately from purpose membership.
          APS-LC-FULFILMENT-UNESTABLISHED-NOT-EXHAUSTED, a fulfilment claim the
          boundary cannot establish gives not established rather than exhausted, and
          a signature failure and an attestor without standing carry different
          codes. APS-LC-EXHAUSTION-IRREVERSIBLE, a record asking to void an
          exhaustion is refused whether or not its signer holds standing to revoke
          the grant. All four are specified, not exercised: the family below carries
          the events and no vector named in the handoff asserts a failure keyed to
          one of these rules alone.</t>

          <t>Status: Candidate feature. Normative for an implementation claiming this feature, not a requirement of APS Core conformance. Related fixture families:
          lifecycle-purpose-exhaustion (21 vectors). Implemented requirements: APS-LC-BOUND-KINDS-DISTINCT, APS-LC-PURPOSE-MEMBERSHIP-NOT-EXHAUSTION, APS-LC-FULFILMENT-UNESTABLISHED-NOT-EXHAUSTED, APS-LC-EXHAUSTION-IRREVERSIBLE. Related implementation surfaces:
          agent-passport-system 7.2.0 (npm) and agent-passport-system 4.2.0 (PyPI),
          experimental bounds module.</t>
        </section>

        <section anchor="lifecycle-capability-binding" numbered="true" toc="default">
          <name>Capability Binding and Policy Version</name>

          <t>A stable identifier, name or identity does not establish that what it
          refers to is unchanged. A tool can keep its name while its implementation or
          its declared schema, description and permissions change, which widens
          effective authority with no change to the grant. Where the authority model
          declares a class of referent change capability-relevant, continuity of the
          referent across such a change MUST be established by something the grant,
          the model or an attesting party pins. A verifier MUST NOT treat an unchanged
          name as evidence of an unchanged controller, an unchanged implementation or
          an unchanged declared schema.</t>

          <t>A pin is carried in one of two encodings, and an implementation states
          which it used. Under scope_grant_v0 the pin is further colon-separated
          segments under the tool grant, which keeps it inside the scope grammar of
          <xref target="faceted-attenuation" format="default"/>. That encoding has one
          consequence worth stating: a pin then narrows across a chain by the ordinary
          covering rule, so a child carrying a different pin fails as scope widening
          rather than as a binding failure. Under bound_record_v0 the pin is a
          separate signed record referencing the delegation identifier. This document
          reserves the name and does not define that record's wire format.</t>

          <t>Two axes are pinned separately, and each is a set rather than a single
          value, so that a grant may pin more than one acceptable revision. The
          implementation axis pins digests of acceptable implementations. The
          declared-metadata axis pins digests of acceptable declared metadata blocks.
          They are distinct because a tool can keep its name and its implementation
          bytes while its declared schema, description or permissions change, which is
          a different evidence problem. An empty set on an axis means that axis is not
          pinned.</t>

          <t>Continuity of the referent has three values. Established means the
          referent the grant pinned is the referent observed. Mismatch means the
          verifier reached a conclusion and the conclusion is that the referent
          changed. Not established means the verifier could not reach a conclusion
          either way, because nothing was pinned or because no accepted attestation
          covered what the answer needed. An established mismatch MUST deny the action
          at that boundary under a mismatch reason and MUST NOT be reported as not
          established. A not-established continuity MUST name at least one missing
          limb from source, freshness and coverage. Neither outcome makes the
          delegation invalid. The grant is intact, and what is not established is that
          the action now attempted is within it.</t>

          <t>The reason codes for this surface are
          CAPABILITY_CONTINUITY_ESTABLISHED for an authorized outcome,
          TOOL_NOT_IN_GRANT_SCOPE, SCOPE_NOT_GRANTED,
          PINNED_IMPLEMENTATION_DIGEST_MISMATCH and PINNED_METADATA_DIGEST_MISMATCH
          for a denial, and TOOL_ATTESTOR_KEY_UNRESOLVED,
          TOOL_ATTESTATION_SIGNATURE_INVALID, TOOL_ATTESTATION_ABSENT,
          REGISTRY_ENTRY_TOOL_NAME_MISMATCH, REGISTRY_ENTRY_IMPLEMENTATION_MISMATCH,
          NO_CAPABILITY_PIN_IN_GRANT, IMPLEMENTATION_NOT_PINNED_IN_GRANT,
          METADATA_NOT_PINNED_IN_GRANT and OBSERVATION_ABSENT for a not-established
          outcome. A metadata pin does not cover an implementation and an
          implementation pin does not cover a declared schema, which is what the two
          partial-pin codes record. An axis the verifier did not observe MUST NOT be
          reported as matching.</t>

          <t>The identifier limb is the same rule applied to who controls a name. A
          grant that does not declare an identifier the action in fact relies on gives
          not established, because a verifier that never modelled the identifier has
          no record to invalidate when control of it moves. A single accepted holder
          at the instant that is not a pinned controller denies the action under
          IDENTIFIER_CONTROLLER_CHANGED, and the result names the party that holds the
          identifier now. Two accepted custodian records naming different holders at
          one instant give not established under IDENTIFIER_BINDING_CONFLICT rather
          than a winner. An interval between issuance and the instant that is neither
          bound to the holder nor covered by an accepted retention record gives not
          established under IDENTIFIER_CONTINUITY_GAP_UNCOVERED, and a retention
          record whose issuer is not the custodian the verifier resolves for that
          identifier kind gives RETENTION_CUSTODIAN_WITHOUT_STANDING. The remaining
          codes are IDENTIFIER_CONTINUITY_ESTABLISHED,
          IDENTIFIER_DEPENDENCY_NOT_DECLARED, IDENTIFIER_CONTROLLER_NOT_PINNED and
          IDENTIFIER_BINDING_LAPSED.</t>

          <t>The released capability-binding module evaluates custodian binding and
          retention records it does not itself produce. Its entry point takes the
          binding and retention records as inputs together with two caller-supplied
          resolvers, one for which custodian the caller resolves for an identifier
          kind and one for that custodian's key, and its contract states that
          standing is resolved "by KIND and never from the custodian member the
          record asserts about itself: a valid signature establishes who signed,
          not that they had standing". The module issues no custodian record and
          signs none. It exports the signed-byte construction a custodian signs
          over and nothing that mints or signs a record.</t>

          <t>A policy version is a dependency of a decision that the grant does not
          carry. The same action can be allowed under one version and denied under the
          next. A decision record MUST identify the policy version it was evaluated
          against. <xref target="decision-ref"/> already requires the policy input a
          decision commits to through policy_ref to identify the policy and version
          actually evaluated, so a decision whose policy_ref commits to such an input
          satisfies this rule even where the deployment keeps the value private and no
          reader can recompute the component. Not established applies where no such
          commitment exists, because a reader then cannot tell which rules produced
          the decision. A pin that
          resolves to no version is likewise not established. A pinned decision
          renders under its own version whatever version is operative at the moment it
          is read, which is this document's rule that later findings never rewrite
          earlier records applied to a policy change.</t>

          <t>Which version is operative at an instant is resolved from pointers, not
          from write order. The operative version at an instant is the target of the
          acceptable pointer with the greatest effective instant at or before it. Two
          acceptable pointers sharing that instant and naming different targets give
          not established rather than a winner. A pointer from an issuer that does not
          hold standing over the policy is not established. A pointer's own claim to
          be a rollback does not make it one: a rollback is established only where the
          version it names was already operative under an earlier acceptable pointer,
          and a newly authored version that reproduces an older version's rules is a
          new version whatever the pointer calls it.</t>

          <t>A policy that tightens after a grant was issued restricts the action at
          the authorization boundary. The chain is unchanged and the grant stays
          valid. A verifier MUST report that case as restricted and MUST NOT report it
          as invalid. Invalid is what an actual revocation produces, and keeping the
          two apart is what lets a reader tell a policy change from an authority
          change. A tightened policy does not reach backward on its own, and the
          earlier grant does not need to be revoked for the new rule to bind future
          actions.</t>

          <t>What it does not establish. It does not claim every referent must be
          pinned, because pinning has real cost and many grants do not need it. The
          claim is that where nothing pins it, continuity is not established and the
          verdict says so. It does not claim a verifier can always detect a referent
          change, and often a verifier cannot. It does not cover narrowing: a referent
          that loses a capability has not widened or redirected what the authority
          permits, and denying there would be a false denial. It does not claim a
          capability change invalidates the grant. It does not claim re-consent is the
          only remedy. It does not resolve semantic drift generally, and when a change
          in meaning should invalidate an earlier grant or approval stays open. It
          does not define how a policy version is published, who holds standing over a
          policy, or how a verifier learns which pointers are acceptable. This
          document fixes no reason codes for the policy-version limb, and no released
          package ships any.</t>

          <t>One divergence is recorded rather than resolved. The candidate families
          named below were authored against an earlier reading and label an
          established pinned-referent mismatch as not established, in a verdict set
          that has no denial member. This document specifies the denial. A family run
          that reproduces the earlier labelling is reproducing the family's vocabulary
          and is not deciding the rule.</t>

          <t>Requirements. APS-LC-REFERENT-CONTINUITY-PINNED, continuity of a
          referent across a change the authority model declares capability-relevant
          is established by something the grant, the model or an attesting party
          pins, and an unchanged name is not evidence of an unchanged controller,
          implementation or declared schema. APS-LC-PINNED-MISMATCH-DENIES, an
          established mismatch denies the action under a mismatch reason and is not
          reported as not established, and a not-established continuity names at
          least one missing limb. APS-LC-POLICY-VERSION-IDENTIFIED, a decision record
          identifies the policy version it was evaluated against, and one that does
          not is not established when read afterwards. That identifier restates
          <xref target="decision-ref"/> and adds nothing to it, and
          <xref target="requirement-matrix"/> carries it as a Core restatement.
          APS-LC-POLICY-TIGHTENING-RESTRICTS, a policy that tightens after issuance
          is reported as restricted and not as invalid. All four are specified, not
          exercised, and the divergence recorded below is why: the families label the
          mismatch outcome differently from the rule this subsection states.</t>

          <t>Status: Candidate feature. Normative for an implementation claiming this feature, not a requirement of APS Core conformance. Related fixture families:
          lifecycle-policy-change (13 vectors). Diverging families, not evidence:
          capability-binding-drift (8 vectors) and
          lifecycle-identifier-reuse-and-rename (13 vectors), whose vectors label
          an established pinned-referent mismatch as not established, so a run of
          either counts neither for nor against the rule this subsection states,
          and <xref target="impl-deviation"/> records the same divergence. Implemented requirements: APS-LC-REFERENT-CONTINUITY-PINNED, APS-LC-PINNED-MISMATCH-DENIES. Related implementation surfaces:
          agent-passport-system 7.2.0 (npm) and agent-passport-system 4.2.0 (PyPI),
          experimental capability-binding module, for the capability and identifier
          limbs, and no released package for the policy-version limb.</t>
        </section>

        <section anchor="lifecycle-epoch" numbered="true" toc="default">
          <name>Authority Epoch and Fencing</name>

          <t>An authority epoch detects regression of a monotonic value the
          deployment supplies, where a stale value can survive in sessions, queues,
          replicas, snapshots or restored state. The feature specified here is a
          regression rule and a fencing comparison over that value, and nothing
          more. A value that has not regressed establishes nothing about whether
          the authority behind it is current. No record defined by this
          document carries an epoch value, and no decision commits to one. An
          approval's usability is decided by the rules in
          <xref target="policy-decision"/> and not by an epoch comparison.</t>

          <t>This document names the concept and the comparison and defines no wire
          field for either. A deployment that uses generations supplies the value,
          and what is specified here is what a verifier does with it.</t>

          <t>The design is incomplete, and the gaps are stated rather than filled.
          The value the reference packages carry is an in-memory marker. It is not
          signed, it is not a wire field, and the module that holds it supports
          neither durability nor concurrency. Five questions follow from that and
          none of them is answered here. Which authority the epoch is counted for,
          which this document leaves to the deployment or its profile and for
          which the root authority basis and its delegation lineage is the
          recommended answer. Who is authorized to advance it. How an advance is authenticated, given that an unsigned
          marker can be presented by any party that can reach the comparison. What a
          verifier does on a first observation, where there is no high-water mark to
          compare against. And what a verifier does when its own remembered
          high-water mark is itself restored from stale state.</t>

          <t>An implementation claiming the authority-epoch feature MUST define its
          epoch domain, its authorized updater, the authenticated representation of
          an advance, its first-observation trust rule and its handling of stale
          verifier state. An implementation that leaves any of the five undefined
          MUST report the feature as unsupported rather than applying the
          comparisons below to a value whose meaning it cannot state.</t>

          <t>An epoch value is a canonical unsigned decimal integer with no sign, no
          leading zero and no separators, compared as an integer and never lexically.
          It is counted within an epoch domain, which the deployment or the
          applicable profile defines and declares. A declared domain names what the
          value is counted within. A verifier MUST compare two values only where
          both are carried in the same declared domain, and two values from
          different domains order nothing.</t>

          <t>Placing a presented value against what a verifier has already established
          gives one of three results. Forward means the value advanced or held equal,
          and the presented state is read normally. Regressed means the value went
          backwards against an established high-water mark. Unplaceable means there is
          nothing to compare against, or the two values are counted in different
          declared domains.</t>

          <t>For each authority subject, an enforcement point MUST NOT act on a state
          older than the newest state it has established for that subject under the
          scheme in force. Where the value regresses, the operation MUST be refused
          rather than resolved by recency of write. Monotonicity is per subject and is
          measured against what the verifier has established, not against global
          truth, so a verifier legitimately holds a current epoch for one artifact and
          an older snapshot for another.</t>

          <t>Unplaceable is not a verdict. A high-water mark has to start somewhere,
          and this document does not state whether a first observation is read or
          refused. Both are defensible and the outcomes differ, so the authority
          model MUST declare which disposition applies and an implementation MUST
          NOT supply a default. This is the first-observation trust rule the feature
          definition above requires, and declaring it is not the same as
          establishing that the first value observed was current.</t>

          <t>A regressed view never answers active. Two verifiers holding the same
          high-water mark can give different answers about the same restored state,
          and the difference is what each retained. A verifier that retained the
          revocation records it observed can establish the revocation from those
          records and answers revoked. A verifier that retained only the epoch value
          cannot, and answers unknown, which chain verification reports as
          indeterminate under a revocation-unknown failure code. Both answers are
          correct for the verifier that gives them, and neither is active.</t>

          <t>Fencing applies between the components of one enforcement boundary.
          Where the component that evaluates authority is not the component that
          performs the effect, the value MUST be carried to the performing component
          inside the boundary and checked there. A write to an authority state
          source inside the boundary MUST carry the value of whoever claims to be
          the current publisher, and that source MUST refuse a write whose value
          went backwards against the highest it has already seen. An equal value has
          not gone backwards, so an equal value is accepted and the retry is
          idempotent. The three refusal codes are STALE_FENCING_TOKEN,
          FENCING_SCOPE_MISMATCH and FENCING_TOKEN_UNREADABLE. A write path that
          cannot order a value is not fenced, so the second and third refuse rather
          than guess. This document places no obligation on a party outside the
          deployment's enforcement boundary, here or anywhere else.</t>


          <t>What it does not establish. It does not require a deployment to run an
          epoch scheme. It claims that where a deployment has one, a regression is a
          refusal rather than an input to a merge. It does not make a verifier that
          has never seen the newer state at fault, because that verifier cannot
          detect the regression at all. It does not say who advances an epoch, whether the value is signed, or
          what evidence carries it, and the feature definition above turns those
          into obligations on an implementation rather than answers from this
          document. It does not state that last-writer-wins storage is
          misconfigured, only that such a store is the wrong place to resolve a
          revocation. It does not bind any decision or approval to an epoch. It does
          not close authority rollback, which stays open at
          <xref target="oq-authority-rollback"/>, and it does not establish that a
          verifier whose own remembered high-water mark was restored from stale
          state can detect that it was.</t>

          <t>Requirements. APS-LC-EPOCH-FEATURE-DEFINITION, an implementation
          claiming this feature defines the five items above or reports the feature
          unsupported. APS-LC-EPOCH-NO-REGRESSION, an enforcement point does not act
          on a state older than the newest it has established for that subject, and
          refuses rather than resolving by recency of write.
          APS-LC-EPOCH-SCOPE-DECLARED, an epoch value is counted within a declared
          epoch domain that names what it is counted within, a verifier compares
          two values only within the same declared domain, and two values from
          different domains order nothing. APS-LC-EPOCH-NO-REGRESSION is exercised
          by authority-epoch-rollback for the rejection of stale authority. The
          other two are specified, not exercised.</t>

          <t>Status: Candidate feature. Normative for an implementation claiming this feature, not a requirement of APS Core conformance. Related fixture families:
          authority-epoch-rollback (12 vectors), for the rejection of stale
          authority only. That family is not cited here for recovery from stale
          verifier memory, which no family exercises. chain-selection-no-union (11
          vectors). Exercised requirements: APS-LC-EPOCH-NO-REGRESSION. Implemented requirements: APS-LC-EPOCH-NO-REGRESSION, APS-LC-EPOCH-SCOPE-DECLARED. Related implementation surfaces: agent-passport-system 7.2.0 (npm) and
          agent-passport-system 4.2.0 (PyPI), experimental authority-state module,
          whose marker is unsigned, is not a wire field, and supports neither
          durability nor concurrency.</t>
        </section>

      <section anchor="lifecycle-suspension" numbered="true" toc="default">
        <name>Suspension, Cause Sets and Release</name>
        <t>Suspension pauses the use of an authority artifact without ending it.
        Restriction leaves the artifact in force and blocks some of what it covers.
        The two are separate states and neither is revocation. Revocation is terminal
        for the artifact it names, and a release record never reverses one.</t>

        <t>A lifecycle cause is a separate signed record that references a
        delegation_id. It is not a facet. The authority vector is closed at seven
        facets and a missing facet is invalid, so a cause cannot ride inside a signed
        delegation. A cause record carries record_type <tt>proposed:suspension-cause:v0</tt>,
        a cause_id unique within one evaluation, the delegation_id it stands against,
        a kind of either <tt>suspension</tt> or <tt>restriction</tt>, the party that
        imposed it, the instant it was imposed, a stable reason code, a verification
        method prefixed by the imposing party, and a signature over the RFC 8785 <xref target="RFC8785"/>
        canonical bytes of the record with record_id and signature removed.</t>

        <t>A verifier MUST represent the causes standing against one artifact as a
        set, and MUST NOT collapse them into a single flag. Where any cause remains
        unreleased, the verdict is <tt>suspended</tt> if at least one remaining cause
        is of kind suspension, and <tt>restricted</tt> if every remaining cause is of
        kind restriction. The result MUST name the remaining causes, each with its
        kind and its reason code. A count or a boolean does not satisfy this.</t>

        <t>A release record carries record_type <tt>proposed:cause-release:v0</tt>, a
        release_id, the delegation_id, the list of cause_ids it claims to clear, the
        releasing party, the instant it was recorded, a verification method prefixed
        by the releasing party, and a signature over the same preimage rule. One
        release record MAY name several causes. A verifier MUST decide each named
        cause independently, so a record from a party holding standing over two of
        the three causes it names clears exactly those two. Releasing one cause MUST
        NOT clear another as a side effect.</t>

        <t>Standing over a cause is resolved outside the record. A verifier MUST NOT
        read standing from the record asserting it, and MUST NOT treat a cause's own
        statement of who may release it as deciding the question. Standing is not
        authorship. A party that holds standing over a cause it did not impose can
        release it, and a party that imposed a cause does not thereby hold standing
        over a different one.</t>

        <t>A record that fails a record-level check releases nothing and is never
        applied to any cause. The record-level checks are the signature under the key
        the verification method names, the binding of that verification method to the
        party the body names, and that the record was recorded at or before the
        instant being evaluated. An unverified claim does not become a lifecycle
        state. Reporting suspended on a cause whose signature does not verify converts
        an unauthenticated assertion into a pause the artifact never carried.</t>

        <t>Three time rules apply. A cause is not in evidence at an instant before it
        was imposed, and the same record is in evidence at a later instant. A release
        is not in evidence at an instant before it was recorded. A release recorded
        before the cause it names was imposed clears nothing.</t>

        <t>Where a standing resolver cannot establish whether a releasing party holds
        standing over a cause, the state is not established, with reason code
        <tt>RELEASE_STANDING_NOT_ESTABLISHED</tt> and the source limb missing.
        Failing to establish that a cause was released is not establishing that it
        still holds, and it is not a finding that the release was ineffective.</t>

        <t>A release never clears a revocation recorded while the artifact was
        suspended. Where chain verification returns anything other than valid, a
        verifier MUST report that result and MUST NOT report the pause state as if it
        answered the chain question. A fully released cause set on a revoked chain is
        invalid. A fully released cause set with an unresolvable revocation answer is
        not established. Neither is exercisable.</t>

        <t>The reason codes for this subsection are
        <tt>NO_CAUSE_PRESENTED</tt>, <tt>NO_CAUSE_IN_EVIDENCE</tt>,
        <tt>ALL_CAUSES_RELEASED</tt>, <tt>CAUSES_OUTSTANDING</tt> and
        <tt>RELEASE_STANDING_NOT_ESTABLISHED</tt> on a verdict, and
        <tt>CAUSE_IN_EVIDENCE</tt>, <tt>CAUSE_NOT_ON_DELEGATION</tt>,
        <tt>CAUSE_RECORD_TYPE_UNRECOGNISED</tt>, <tt>CAUSE_NOT_YET_IN_EVIDENCE</tt>,
        <tt>CAUSE_SIGNATURE_UNVERIFIED</tt>, <tt>CAUSE_IMPOSER_BINDING_MISMATCH</tt>,
        <tt>CAUSE_RELEASED</tt>, <tt>RELEASE_IN_EVIDENCE</tt>,
        <tt>RELEASE_NOT_ON_DELEGATION</tt>, <tt>RELEASE_RECORD_TYPE_UNRECOGNISED</tt>,
        <tt>RELEASE_SIGNATURE_UNVERIFIED</tt>, <tt>RELEASE_ISSUER_BINDING_MISMATCH</tt>,
        <tt>RELEASE_AFTER_EVALUATION_INSTANT</tt>, <tt>CAUSE_NOT_PRESENTED</tt>,
        <tt>RELEASE_PRECEDES_IMPOSITION</tt> and <tt>RELEASER_WITHOUT_STANDING</tt> on
        a per-record or per-cause disposition.</t>

        <t>What this subsection does not establish. It defines no precedence order
        among causes, so a deployment holding two causes whose releases point in
        opposite directions has no rule here to apply. It says nothing about whether a
        cause propagates to descendants of the artifact it names, and it decides the
        state of that one artifact only. It does not claim that a release returns
        authority to its shape before the cause was imposed, because something else
        may have ended in the interval. It does not say where a standing registry
        comes from or who publishes one. It does not say what a verifier should report
        first when a chain is revoked and causes are still outstanding.</t>

        <t>Informative. The open question this subsection was written against asks that
        lifting one suspension not clear another, not bypass a revocation that
        happened while the agent was suspended, and not recreate rights that changed
        in the meantime. The composition rule above answers the first two. The third is
        the same question as the pre-suspension shape, and it stays open.</t>

        <t>Requirements. APS-LC-CAUSE-SET-NOT-FLAG, a verifier represents the
        causes standing against one artifact as a set, names the remaining causes
        with kind and reason code, and does not collapse them into a flag or a
        count. APS-LC-RELEASE-PER-CAUSE, each named cause is decided independently
        and releasing one clears no other. APS-LC-RELEASE-STANDING-EXTERNAL,
        standing over a cause is resolved outside the record and is not read from
        the record asserting it or from the cause's own statement of who may release
        it. APS-LC-CHAIN-RESULT-PRECEDES-PAUSE, where chain verification returns
        anything other than valid the verifier reports that result and does not
        report the pause state as if it answered the chain question. All four are
        specified, not exercised: the family below carries sixteen composition cases
        and the handoff names no single vector whose assertion fails on one of these
        rules alone.</t>

        <t>Status: Candidate feature. Normative for an implementation claiming this feature, not a requirement of APS Core conformance. Related fixture families:
        suspension-cause-composition, 16 cases and 5 gates. Implemented requirements: APS-LC-CAUSE-SET-NOT-FLAG, APS-LC-RELEASE-PER-CAUSE, APS-LC-RELEASE-STANDING-EXTERNAL, APS-LC-CHAIN-RESULT-PRECEDES-PAUSE. Related implementation surfaces:
        agent-passport-system 7.2.0 (TypeScript) and agent-passport-system 4.2.0
        (Python), suspension module, experimental and opt-in.</t>
      </section>

      <section anchor="lifecycle-status-coverage" numbered="true" toc="default">
        <name>Status Sources, Freshness and Coverage</name>
        <t>A claim about the current lifecycle state of an authority artifact,
        meaning its revocation, suspension, restriction, expiry or exhaustion state,
        is established only from a source the deployment profile accepts for that
        state, within a freshness bound that profile declares for that source, and
        only over the set the claim itself states it covers. An answer from a source
        the profile does not accept for the state does not establish it, whatever the
        answer says.</t>

        <t>A status answer is <tt>active</tt>, <tt>revoked</tt> or
        <tt>unavailable</tt>. The first two are determinate. <tt>unavailable</tt> is a
        source that was consulted and produced no usable answer, and a verifier MUST
        NOT use it as a third determinate state. A source that produced no observation
        at all is silent, which is a different input, and a profile MUST declare
        whether silence from a required source is a coverage gap or is read as that
        source answering unavailable.</t>

        <t>Freshness is declared per source, not globally. Each accepted source
        carries its own bound in whole seconds, and the comparison is inclusive, so an
        age exactly equal to the bound is within it. A profile MUST declare whether an
        answer past its own bound still counts, separately for a revoked answer and
        for an active answer. The two readings differ and this document does not
        choose between them. An answer dated after the boundary instant has no
        measurable age and MUST NOT be read as fresh. A verifier records that answer
        as skew, distinctly from staleness, and does not use it.</t>

        <t>Where the used answers carry more than one determinate state, that is an
        unresolved conflict. A verifier MUST NOT admit on a conflict, whatever
        coverage says. The record MUST name both states and the sources that carried
        them, because a
        conflict a record does not attribute cannot be acted on. A profile declares
        whether a conflict denies the action with a conflict reason or returns not
        established. Under either reading the artifact verdict is not established and
        never invalid. The verifier refused the action. It reached no conclusion about
        the authority, and it does not claim that either answer is false.</t>

        <t>Unknown is not active. A revocation answer that is unavailable, stale past
        its declared bound, silent or in unresolved conflict leaves the state not
        established. It does not become active, and the record MUST NOT claim a
        revocation that was never observed. An enforcement boundary MAY deny on not
        established, and the denial records which of source, freshness or coverage was
        missing.</t>

        <t>Chain verification already requires that a revocation-resolution outcome a
        verifier does not recognise is not treated as active, leaving the revocation
        state not established and the chain result indeterminate. That rule covers
        more shapes than an implementation tends to anticipate. A casing or whitespace
        variant of a recognised answer, a value of the wrong type, a null, an empty
        object or array, and a resolver that raises rather than answering all land in
        the same place. A known-active answer at one chain member does not make the
        chain valid when another member's answer is not understood. This document
        defines no failure-code vocabulary for chain verification, so the reason an
        implementation reports for that result is the implementation's own.</t>

        <t>A verifier that declared an offline posture in advance, with a snapshot
        source and the maximum snapshot age it declared it would admit on, MAY admit
        on a snapshot inside that bound. The record MUST name the snapshot source, the
        instant the snapshot was known correct, the age it admitted at, and the
        declared bound. A verifier that declared no bound in advance MUST NOT admit on
        a snapshot. Being offline does not soften an observed revocation.</t>

        <t>Where a decision is cached, the profile declares two limits. The first is
        the maximum age of a cached authorization decision usable without consulting
        the authority again. The second is the maximum delay between a revocation
        being acknowledged and denial of subsequent protected operations. A cached
        decision past the first limit MUST be re-resolved at the next authorization
        boundary, on a retained session, after a reconnect and on any other worker
        holding the same credential. A grant the authority can be reached for but
        whose state it cannot resolve is denied rather than served from cache.</t>

        <t>Coverage is measured over the source set the relying party declared, and
        the record states which denominator was used. A coverage block reporting that
        every declared source produced a usable determinate answer MUST NOT be read as
        a statement that the declared set was every source that mattered. A verifier
        MUST NOT read a state claim as covering more than the claim states.</t>

        <t>The reason codes for this subsection are
        <tt>STATUS_ACTIVE_ALL_SOURCES_AGREE</tt>,
        <tt>ADMITTED_ON_SNAPSHOT_WITHIN_DECLARED_BOUND</tt>, <tt>STATUS_REVOKED</tt>,
        <tt>STATUS_SOURCES_CONFLICT</tt>, <tt>STATUS_STALE_BEYOND_BOUND</tt>,
        <tt>STATUS_COVERAGE_INCOMPLETE</tt> and
        <tt>STATUS_NO_USABLE_OBSERVATION</tt>. The bases a record carries for why one
        answer was or was not used are <tt>within_freshness_bound</tt>,
        <tt>revocation_observed_outside_bound_still_used</tt>,
        <tt>stale_active_admitted_by_policy</tt>, <tt>stale_beyond_bound</tt>,
        <tt>source_gave_no_answer</tt>, <tt>answer_dated_after_boundary</tt> and
        <tt>source_not_accepted</tt>.</t>

        <t>What this subsection does not establish. It does not solve completeness.
        The coverage rule is a rule for reading a claim, not a duty to establish that
        a set was complete, and the completeness invariant stays open. It declares no
        freshness number, and a deployment with no declared bound has nothing to
        measure against. It does not say which sources a profile must accept for which
        state. It does not choose what a conflict returns or whether a stale answer
        counts, and two implementations choosing differently are both consistent with
        this text. It does not rule clock skew beyond refusing an answer dated after
        the boundary. It does not say what a relying party that acted on stale but
        authentic evidence is entitled to.</t>

        <t>Requirements. APS-LC-STATUS-SOURCE-ACCEPTED, a lifecycle-state claim is
        established only from a source the profile accepts for that state, and an
        answer from a source it does not accept establishes nothing whatever the
        answer says. APS-LC-FRESHNESS-PER-SOURCE, freshness is declared per source,
        and an answer dated after the boundary instant is recorded as skew and not
        used. APS-LC-STATUS-CONFLICT-NO-ADMIT, a verifier does not admit on an
        unresolved conflict between determinate answers, and the record names both
        states and their sources. APS-LC-COVERAGE-AS-STATED, a verifier does not
        read a state claim as covering more than the claim states.
        APS-LC-OFFLINE-DECLARED-IN-ADVANCE, a verifier that declared no snapshot
        bound in advance does not admit on a snapshot. All five are specified, not
        exercised.</t>

        <t>Status: Candidate feature. Normative for an implementation claiming this feature, not a requirement of APS Core conformance. Related fixture families:
        conflicting-status-sources, 14 cases. revocation-resolution-forward-compat,
        14 cases. cached-authorization-revocation, 9 cases.
        Implemented requirements: APS-LC-STATUS-SOURCE-ACCEPTED, APS-LC-FRESHNESS-PER-SOURCE, APS-LC-STATUS-CONFLICT-NO-ADMIT, APS-LC-COVERAGE-AS-STATED. Related implementation surfaces: the unrecognised-answer path is in the released chain verifier of
        agent-passport-system 7.2.0 (TypeScript) and agent-passport-system 4.2.0
        (Python), which report it as <tt>REVOCATION_UNKNOWN</tt> under their own
        failure-reason vocabulary. Multi-source status, per-source freshness and the
        coverage block are the status-coverage module of the same two packages,
        experimental and opt-in. The cached-decision limits are no released
        package.</t>
      </section>

      <section anchor="lifecycle-succession" numbered="true" toc="default">
        <name>Succession, Handover and Reauthorization</name>
        <t>Continuity after an authority ends means a new grant from a principal who
        currently holds authority. It never means reversing a revocation and it never
        means re-parenting the old chain onto a new ancestor. Revocation is
        irreversible, and a succession record is not an exception to that.</t>

        <t>A successor does not inherit the predecessor's delegation tree. A
        successor's grant covers what the successor issues. A descendant whose
        ancestor artifact was revoked stays invalid until a party with current
        authority issues it a new grant, and the departure is not what invalidated
        it. A successor's fresh grant is bounded by the successor's own
        ceiling and not by the predecessor's.</t>

        <t>An agent identity can appear as the subject of one chain issued under one
        root and, separately, as the subject of a chain issued under an independently
        issued root. Revoking the shared ancestor of the first chain invalidates that
        chain at that ancestor's own index. The second chain is unaffected. This is
        the whole of what chain verification says about a handover, and a verifier
        MUST NOT read the continuing identity as continuity of the revoked authority.
        How the cutover is ordered is a deployment choice. A planned handover may
        accept a short overlap and a compromised principal may call for revoking first
        and accepting a gap. In either case the old grant cannot authorize a new
        effect at the next authorization boundary after revocation, and continued
        operation has to run on the replacement authority.</t>

        <t>A delegation may be bound to an office, so that turnover moves it, or to an
        identity, so that turnover does not. Where the delegation's terms declare
        neither and the actor is the very subject the delegation names, the answer is
        valid and the missing term does not have to be resolved. Where the terms
        declare neither and the actor is somebody else, the binding mode is not
        established, and a verifier MUST NOT supply a default in either direction.
        Not established here is not a finding that the new occupant inherits, and it
        is not a finding that they do not.</t>

        <t>Under office binding, an office-holder record from a party with standing,
        whose window covers the action instant, has to name the acting party. No
        covering record leaves the question not established. A covering record naming
        somebody else is invalid, which is a positive finding rather than a missing
        one. A vacancy record covering the action instant leaves the question not
        established, and a verifier MUST NOT carry the last known holder through a
        vacancy. A verifier MUST NOT read an attestor's role off the record body.</t>

        <t>Replacement authority does not have to be issued after the contingency.
        Where an instrument or a declared rule of the authority model pre-commits it,
        the replacement holder's authority derives from that source at the scope that
        source declared, and becomes exercisable when the declared contingency is
        established by evidence the model accepts for that contingency. A
        pre-committed replacement whose pre-committing instrument is itself revoked or
        otherwise invalid is invalid with it. Pre-commitment does not reverse a
        revocation, and the successor receives the scope the pre-committing source
        declares for the successor, not the predecessor's other descendants.</t>

        <t>Where an instrument names several co-equal holders, the declared decision
        rule is evaluated over the holders current at the action instant. A holder
        whose vacancy reaches that instant is not a current holder and that holder's
        approval is not counted. An acting holder's own vacancy ends the enquiry.
        Where the model declares a majority rule, a vacancy does not have to be filled
        before the remaining holders can act.</t>

        <t>A later record from a party with standing may attach effects to an act
        already taken, including effects the governing authority model gives
        retroactive reach. Such a record is a new record that references the earlier
        one. It does not rewrite the decision record the earlier boundary produced,
        and a verifier evaluating before that later record exists reaches the answer
        the evidence then available supports. Where the model bounds such a record,
        for example by requiring it to cover the whole of a single act, by requiring
        capacity at the moment it was made, or by excluding effect on interests
        acquired in the meantime, those bounds are checked and recorded.</t>

        <t>What this subsection does not establish. It does not say what happens when
        nobody holds an office and nobody is empowered to exercise, reaffirm or revoke
        what the previous holder issued. That stays open. It sets no bound on what an
        outgoing issuer may pre-commit, so grants signed shortly before a departure
        stay open. It does not say whether an operation already running resumes,
        restarts, compensates or stops after the authority it ran under changes. It
        does not say which clock governs a contingency. It does not decide the order
        of a cutover for any deployment.</t>

        <t>Requirements. APS-LC-SUCCESSION-NEW-GRANT, continuity after an
        authority ends is a new grant from a principal who currently holds the
        authority, never a reversal of a revocation and never a re-parenting of the
        old chain. APS-LC-BINDING-MODE-NO-DEFAULT, where a delegation's terms
        declare neither office nor identity binding and the actor is not the named
        subject, the binding mode is not established and a verifier supplies no
        default in either direction. APS-LC-VACANCY-NOT-ESTABLISHED, a vacancy
        record covering the action instant leaves the question not established and a
        verifier does not carry the last known holder through a vacancy. All three
        are specified, not exercised.</t>

        <t>Status: Candidate feature. Normative for an implementation claiming this feature, not a requirement of APS Core conformance. Related fixture families:
        lifecycle-root-authority-succession, 13 cases. lifecycle-fiduciary-succession,
        25 cases. sponsor-handover, 6 cases. lifecycle-organization-events, 35 cases.
        Implemented requirements: APS-LC-SUCCESSION-NEW-GRANT. Related implementation surfaces: chain verification, revocation state per chain member and the
        independence of separately rooted chains are the released chain verifier of
        agent-passport-system 7.2.0 (TypeScript) and agent-passport-system 4.2.0
        (Python). Subject binding mode, office-holder and vacancy records, co-holder
        decision rules, pre-commitment and later attached effects are no released
        package.</t>
      </section>

      <section anchor="lifecycle-principal-departure" numbered="true" toc="default">
        <name>Principals, Identities and What Changes When a Person Leaves</name>
        <t>A person's departure is not a revocation. It is an external event, and its
        effect on authority depends on the authority relationship involved and the
        rules that govern it. A personnel change does not silently remove a
        dependency, re-parent authority or create replacement authority. Where an
        authority artifact a grant currently depends on is revoked, the dependent
        authority is invalid, and a departure does not change which artifact that
        is.</t>

        <t>Whether an artifact was validly issued and whether it still confers
        authority are two findings, established separately. Issuance standing turns on
        the issuer at the moment of issuance and does not change with later events.
        Continuing authority turns on what the grant depends on now, on its lifecycle
        state, on any restriction from outside the grant chain, and on the profile's
        freshness rules. A verifier MUST NOT report either finding as if it answered
        the other.</t>

        <t>A person can be the principal of a grant. A person can instead be an issuer
        acting for an organization or an office, with standing to issue that comes
        from another authority relationship. These are not interchangeable, and the
        supporting evidence has to distinguish the principal, the issuer and the
        relevant dependency. Where it cannot, continuation of authority is not
        established.</t>

        <t>Identity continuity does not establish authority continuity. The same agent
        identity can appear under an old chain and under an independent replacement
        chain. Revoking the old chain's ancestor invalidates the old chain and leaves
        the replacement chain standing on its own.</t>

        <t>A record of a principal event, such as death, a finding of incapacity, a
        forfeiture of an appointment or the appointment of an outside authority over
        the principal, decides nothing without a role the profile accepts for that
        record type. A verifier MUST NOT read an attestor's role off the record body,
        and MUST NOT honour a grant's own claim that it survives an event when nothing
        outside the grant supports that claim. A finding recorded later may reach an
        earlier instant where the model gives it that reach. Such a finding is a new
        record that references the earlier one and does not rewrite the decision
        record an earlier boundary produced.</t>

        <t>Recording a transition and observing it are different events. Where a
        profile makes a change effective on a party's notice rather than at the event,
        the notice finding carries its own time, and a verifier records a notice
        finding or records that it has none.</t>

        <t>Where a grant's own terms make an action class effective only once an
        agreed confirmation procedure with the principal has been completed, and that
        confirmation cannot be obtained, the boundary outcome is not established. It
        is neither an approval nor a denial. Silence past a deadline MUST NOT be read
        as the principal answering, and an unreachable principal MUST NOT be read as a
        refusal. A confirmation reaches an action only from the instant the
        confirmation exists, it has to come from a party the profile accepts for it,
        and it has to cover this action rather than another. A different action class
        under the same grant, at the same instant, is unaffected.</t>

        <t>Authority can also end from the agent's side. An agent may end its own
        role, and where the profile makes that effective on delivery of notice, the
        principal's silence is not a veto. A stated later date or a stated triggering
        event moves when it takes effect and does not change what it is. An
        obligation outside this protocol that the renunciation may have breached
        belongs to the accountable principal and is outside this document. A
        verifier does not answer it, and the result carries no finding about it. A
        renunciation that breached such an obligation reaches the same verdict and
        the same reason code as a clean one.</t>

        <t>Continuity of a name does not establish continuity of the thing named.
        Where a grant depends on an identifier that no party in the delegation graph
        controls, such as a mail domain a recovery path delivers to or an account
        name a reference resolves, that identifier has its own lifecycle run by a
        custodian. <xref target="lifecycle-capability-binding"/> states the rule for
        that case, including which outcomes deny the action and which leave
        continuity not established, and this subsection adds nothing to it. The
        reason the case belongs here as well is that a departure is one of the
        events that moves control of such an identifier without producing any record
        in the delegation graph.</t>

        <t>A credential more than one person can drive establishes authority and does
        not establish who acted. Accountability is a separate finding with its own
        evidence. Where a record from a party with standing assigns the action to an
        individual and covers this action at this instant, accountability is
        established. Where no such record exists, where two such records overlap and
        resolve to neither individual, or where the record references a different
        action, authority can be valid and accountability not established at the same
        boundary. An accountability finding does not by itself establish legal
        liability.</t>

        <t>What this subsection does not establish. It does not say whether a validly
        issued organizational grant survives the departure of the individual who
        issued it. Authority models differ and the departure alone does not choose
        between them, so this document leaves the choice to the profile. It does not
        resolve office vacancy, and it does not bound what an issuer may sign shortly
        before leaving. It establishes nothing about who covers an agent's work after
        the agent gives up the role. It makes no claim that any doctrine of human
        agency law applies to an AI agent. Those doctrines are a source of case shapes
        here and nothing more.</t>

        <t>Requirements. APS-PRIN-TWO-FINDINGS, whether an artifact was validly
        issued and whether it still confers authority are established separately and
        neither is reported as if it answered the other.
        APS-PRIN-ROLE-NOT-FROM-BODY, a verifier does not read an attestor's role off
        the record body and does not honour a grant's own claim that it survives an
        event when nothing outside the grant supports it.
        APS-PRIN-SILENCE-NOT-CONSENT, silence past a deadline is not the principal
        answering and an unreachable principal is not a refusal.
        APS-PRIN-ACCOUNTABILITY-SEPARATE, authority can be valid while
        accountability is not established at the same boundary. All four are
        specified, not exercised.</t>

        <t>Status: Candidate feature. Normative for an implementation claiming this feature, not a requirement of APS Core conformance. Related fixture families:
        lifecycle-principal-events, 32 cases. lifecycle-principal-unreachable, 12
        cases. lifecycle-identifier-reuse-and-rename, 13 presentations.
        lifecycle-shared-identity-with-no-accountable-principal, 12 cases.
        lifecycle-agent-renunciation, 13 cases. Implemented requirements: none. Related implementation surfaces: chain verification and revocation
        state per chain member are the released chain verifier of
        agent-passport-system 7.2.0 (TypeScript) and agent-passport-system 4.2.0
        (Python). Principal-event records, confirmation procedures, renunciation
        and accountability findings are no released package. Identifier custodian
        records are implemented, in the experimental capability-binding module of
        the same two packages, which is the surface
        <xref target="lifecycle-capability-binding"/> records and to which this
        subsection adds nothing.</t>
      </section>
      </section>

    <section anchor="lifecycle-candidate-invariants" numbered="true" toc="default">
      <name>Candidate Lifecycle Extensions</name>
      <t>This subsection is informative. Each entry below is a candidate
      extension: a short name, the rule in precise terms, its status, the families
      that exercise it or a record that none does, the strongest counterexample
      found against it, and whether adopting it would change Core behavior.
      Nothing here is normative, nothing here is an adoption claim, and no
      requirement elsewhere in this document depends on any of it.</t>

      <t>Two candidates that were in this list are not here. A candidate whose
      strongest counterexample is unresolved is not a candidate extension, it is
      an open question, and it is carried in
      <xref target="limits-and-open-questions"/> with the behavior this document
      requires until the question is settled. The two are the conferral rule, at
      <xref target="oq-conferral-authority"/>, and the effectiveness-rule default,
      at <xref target="oq-effectiveness-default"/>.</t>

      <t>Status: none of the entries below is a feature an implementation can
      claim. Implemented: the lifecycle-state vocabulary these statements are
      written in is the lifecycle-state module of agent-passport-system 7.2.0
      (TypeScript) and agent-passport-system 4.2.0 (Python), experimental and
      opt-in. No released package decides any statement in this subsection.</t>

      <section anchor="cand-01" numbered="true" toc="default">
      <name>CAND-01: An External Event Is Authority-Changing Only When Established</name>
        <t>A verifier may treat an external event as authority-changing only when
        evidence it accepts establishes both the event and its authority effect
        under the applicable authority model. Absence of such evidence gives not
        established for the event, which is not a finding that the event did not
        occur.</t>
        <t>Strongest counterexample. A successor designation is simply missing, and
        under the applicable model the absence resolves to a named fallback holder.
        A literal reading returns not established and denies authority the model
        says exists. The clause about the applicable model carries this, because
        the established event is the absence and the model's own default rule
        supplies the authority effect.</t>
        <t>What it does not establish. It does not claim the world only changes when
        a record exists, and it does not claim that a valid verdict means no
        authority-changing event occurred. It does not say which events are
        authority-changing. It does not resolve when a change becomes effective.</t>
        <t>Related fixture families: lifecycle-purpose-exhaustion, 21 ordered events, the
        unauthenticated event record and the record authenticated by a party without
        standing. conflicting-status-sources, 14 cases, for two accepted sources
        disagreeing. Not covered: events a model makes effective with no record
        anywhere, and a default supplied on absence.</t>
          <t>Changes Core behavior: no. No requirement of APS Core conformance depends on this statement, and an implementation that ignores it is not for that reason non-conforming.</t>
    </section>

      <section anchor="cand-02" numbered="true" toc="default">
      <name>CAND-02: Later Evidence Does Not Rewrite Earlier Evidence</name>
        <t>Later lifecycle evidence does not rewrite contemporaneous decision
        evidence. A later finding is a new record that references the earlier one
        and states its own effect, including how far back that effect reaches.</t>
        <t>Strongest counterexample. A later denial of ratification recharacterises
        a past action as having only ever been provisional, which is the closest
        thing in the corpus to a rewrite. The recharacterisation is itself a dated
        record from a party with standing, and the sentence it has to write is only
        writable while the original record still exists in its original form.</t>
        <t>What it does not establish. It does not claim the earlier decision's
        authority effect is unchanged, and retroactive effect is real. It does not
        claim a later finding can reach back without limit. It does not claim
        records are immutable, and it does not override an obligation to correct the
        content of a record. It does not say who has standing to make a later
        finding.</t>
        <t>Related fixture families: authority-epoch-rollback, 12 cases, a signed withdrawal
        accepted as a new record with the original still held and still verifying.
        conflicting-status-sources, 14 cases, where a later conflict does not change
        the record written at the earlier boundary. Not covered: the bounded-reach
        limb and the amendment-obligation case.</t>
          <t>Changes Core behavior: no. No requirement of APS Core conformance depends on this statement, and an implementation that ignores it is not for that reason non-conforming.</t>
    </section>

      <section anchor="cand-03" numbered="true" toc="default">
      <name>CAND-03: Issuance Validity, Later Attached Effects and Current Validity Are Three Separate Findings</name>
        <t>Three findings about an authority artifact are separate and separately
        established. Whether it was validly issued, which turns on the issuer's
        standing at issuance and does not change with later events. Whether a later
        record from a party with lifecycle standing has attached effects to it or to
        acts taken under it. Whether it is currently valid, which turns on its
        dependencies, its lifecycle state, any restriction from outside the chain
        and the profile's freshness rules. A verifier does not report any one of
        these as if it answered another.</t>
        <t>Strongest counterexample. Where the finding is that issuance was never
        valid, current validity looks moot, and if the findings always moved
        together the separation would be decoration. They do not move together.
        Issuance can be untouched while continuing scope is narrowed from outside
        the chain, and issuance can be valid while exercisability is still pending.
        A void-from-issuance status is also not a revocation event, which needs the
        issuance question to stay answerable after the fact.</t>
        <t>What it does not establish. Standing at issuance cannot be inferred from
        a valid signature. It does not claim an organizational grant survives its
        issuer's departure and it does not claim the opposite. It does not resolve
        grants signed just before a departure, and it does not resolve office
        vacancy.</t>
        <t>Related fixture families: no family in this suite. No built fixture tests issuer
        standing at issuance.</t>
          <t>Changes Core behavior: no. No requirement of APS Core conformance depends on this statement, and an implementation that ignores it is not for that reason non-conforming.</t>
    </section>

      <section anchor="cand-06" numbered="true" toc="default">
      <name>CAND-06: Collective Authority Must Satisfy Its Declared Composition</name>
        <t>Where the authority model requires an operation to be authorized
        collectively, the operation is authorized only when the declared composition
        rule is satisfied at the boundary the operation requires. A composition rule
        states which members are required, the threshold, the direction, and any
        restriction carried by an individual member. What it takes to authorize an
        action is not necessarily what it takes to stop or narrow it. A single valid
        chain does not satisfy a multi-member rule however broad that chain is. The
        authority the collective act exercises is the authority the rule attaches
        to, and satisfying the rule adds nothing to any contributing member's own
        scope. Where collective authority is required and the rule's membership,
        threshold or direction is not declared, composition is not established and a
        verifier does not supply one. A default declared by the authority model is a
        declared rule and not an inference.</t>
        <t>Strongest counterexample. A joint release that neither party may perform
        alone does something neither may do alone, which an earlier drafting of the
        no-widening clause forbade. The scope clause is about contributing members.
        The collective authority was never either individual's to begin with, so
        neither member's scope grows.</t>
        <t>What it does not establish. Composition is not a union of scopes.
        Composition rules are not symmetric. There is no universal default for
        undeclared composition. Not every member must be reachable. Concurrences may
        not be aggregated across time without a declared freshness rule. A standing
        superior override is lifecycle standing and not composition.</t>
        <t>Related fixture families: chain-selection-no-union, 11 vectors, the negative half
        only. The obligation half has no coverage and must not be reported as
        covered.</t>
          <t>Changes Core behavior: no. No requirement of APS Core conformance depends on this statement, and an implementation that ignores it is not for that reason non-conforming.</t>
    </section>

      <section anchor="cand-09" numbered="true" toc="default">
      <name>CAND-09: Chain Validity Is Not Permission to Execute</name>
        <t>Whether an authority chain is valid and whether the action it authorizes
        is permitted by rules outside the grant chain are separate findings. This
        candidate is stated in full at <xref target="d2e-chain-validity"/>, with its
        counterexample and its limits, and is listed here so that the candidate set
        is complete.</t>
        <t>Related fixture families: no family in this suite.</t>
          <t>Changes Core behavior: no. No requirement of APS Core conformance depends on this statement, and an implementation that ignores it is not for that reason non-conforming.</t>
    </section>

      <section anchor="cand-11" numbered="true" toc="default">
      <name>CAND-11: A Valid Grant Can Be Unexecutable</name>
        <t>An artifact can be valid while the target, executor or capability it
        names no longer exists, in which case the artifact verdict is unchanged and
        the execution attempt fails. This candidate is stated in full at
        <xref target="d2e-unexecutable"/>, with its counterexample and its limits,
        and is listed here so that the candidate set is complete.</t>
        <t>Related fixture families: no family in this suite.</t>
          <t>Changes Core behavior: no. No requirement of APS Core conformance depends on this statement, and an implementation that ignores it is not for that reason non-conforming.</t>
    </section>

      <section anchor="cand-12" numbered="true" toc="default">
      <name>CAND-12: Ending Authority Bounds Future Effects and Does Not Undo Past Ones</name>
        <t>Ending or narrowing authority takes effect at the next authorization
        boundary the operation requires. Where an operation has a terminal boundary
        after which no further authorization decision occurs, a change arriving
        after that boundary does not reach the completed effect and is recorded as a
        later event rather than as a denial. Ending authority does not undo effects
        already completed, does not retract information already obtained, and does
        not by itself end sessions or derived credentials already issued. Where the
        model provides a compensating or reversing action, that action is separate
        authority with its own boundary and its own record.</t>
        <t>Strongest counterexample. Models that allow cancellation after acceptance
        in defined circumstances look like undoing a completed effect. They are a
        separately authorized action rather than an automatic consequence, which is
        what the last sentence of the statement says.</t>
        <t>What it does not establish. This is not an argument against terminating
        sessions on revocation. Session termination is a control a profile may and
        often should require, and the claim is only that it does not follow
        automatically, so a profile that wants it has to say so. It does not claim a
        post-boundary reversal is impossible. It does not claim exhaustion is always
        a separate step from use. It does not resolve work in flight.</t>
        <t>Related fixture families: no family in this suite.</t>
          <t>Changes Core behavior: no. No requirement of APS Core conformance depends on this statement, and an implementation that ignores it is not for that reason non-conforming.</t>
    </section>

      <section anchor="broad-l6" numbered="true" toc="default">
      <name>BROAD-L6: Every Authorization Boundary the Operation Requires</name>
        <t>An earlier approval or authorization decision does not establish current
        authority at any later authorization boundary the operation requires. Each
        boundary is evaluated against lifecycle state the verifier can establish as
        current and effective at that boundary, including boundaries added from
        outside the grant chain and boundaries inside a long-running or multi-step
        operation. Rechecking current lifecycle state is not re-evaluating the
        operation under a newer policy version, and which policy version governs is
        a separately declared rule.</t>
        <t>Strongest counterexample. Two cases where more rechecking is the wrong
        answer. An in-flight instance whose remaining steps have to resolve against
        a pinned policy version, where jumping to current rules mid-replay is not a
        safety improvement. And a declared graceful-shutdown window, where the final
        in-flight call should succeed. The statement survives by separating current
        lifecycle state from policy version and by leaving the boundary set to the
        operation.</t>
        <t>What it does not establish. It does not claim the operation must be
        re-evaluated against the current policy version. It does not claim a retry
        of an already decided effect is a new boundary. It does not claim the start
        of a shutdown is a boundary, nor that every technical step is one. It does
        not claim a recorded change is automatically effective at the next boundary.
        It does not own the terminal-boundary rule. It does not resolve work in
        flight.</t>
        <t>Related fixture families: no family in this suite. The cached-authorization-revocation
        family, 9 timeline cases, exercises the narrower published invariant about
        rechecking revocation state at execution time and is a related family rather
        than coverage of this broadening.</t>
          <t>Changes Core behavior: yes, if adopted. The recheck obligation at the moment an approval is consumed is a requirement of the closed core. This statement extends rechecking to every authorization boundary the operation requires, including boundaries the core does not name, so adopting it would widen a Core requirement rather than add a feature beside it.</t>
    </section>

    </section>
    </section>

    <section anchor="decision-to-effect" numbered="true" toc="default">
      <name>Decision to Effect</name>

      <t>A policy decision and an external effect are separate facts about
      separate moments. The records of <xref target="signed-receipts"/> carry the
      decision side and the boundary's own observation after dispatch. The effect
      side needs evidence a verifier resolves under
      <xref target="receipt-evidence"/>. This section states what a verifier may
      carry across that gap, what it may not, and what it reports when the
      evidence it holds does not settle the question.</t>

      <t>This section answers five questions, separately, and never lets an
      answer to one stand in for an answer to another. Was the action authorized.
      Was it still admissible at the moment of admission. Was it admitted. Was
      dispatch attempted. Was the external effect established. A deployment that
      can answer the first and reports it as an answer to the fifth has lost four
      findings.</t>

      <t>The stage vocabulary this section uses has seven positions: proposed,
      then authorized or denied, then admitted or refused, then dispatch
      attempted, then result observed, then external effect established or not
      established, then settled or compensated. The positions are findings and not
      record types. <xref target="d2e-execution-states"/> states which of them any
      record in this document carries.</t>

      <t>One of the five questions has no durable answer in this revision. The
      admission transition produces no record. Whether an approval was consumed is
      enforcement-boundary state keyed by the approval's identity, and it is not
      content of any record this document defines, so a verifier without access to
      that state reports the approval-state axis as not established and can reach
      no further. <xref target="oq-admission-record"/> carries what that leaves
      open and what this document requires until it is settled.</t>

      <t>Everything in this section is a Candidate feature except the Core
      restatements <xref target="d2e-relations"/> and
      <xref target="d2e-retry-contract"/> name. It is specified here and tested
      against this text. A Candidate part of it is normative for an implementation
      claiming the feature and is not a requirement of APS Core conformance. No
      part of it is a conformance claim.</t>

      <section anchor="d2e-relations" numbered="true" toc="default">
        <name>Relations Between a Decision and an Effect</name>

        <t>Four relations sit between a valid authority artifact and an effect in
        the world. None of them is transitive, and a finding about one is not a
        finding about the next.</t>

        <ol spacing="normal">
          <li>A valid authority chain does not establish that an enforcement
          boundary authorized an action.</li>
          <li>An authorization does not establish that the exact authorized call
          was the call dispatched.</li>
          <li>An exact dispatched call does not establish that the effect was
          reached only through the boundary that admitted it.</li>
          <li>Dispatch does not establish that the intended effect occurred.</li>
        </ol>

        <t>A verifier MUST report each of these as its own finding. It MUST NOT
        derive a later one from an earlier one, and MUST NOT report a finding it
        did not establish. A caller holding a report on one of them MUST NOT read
        it as a report on another. This is the axis discipline of
        <xref target="receipt-verification"/> applied across the decision and the
        effect rather than within one record.</t>

        <t>Where a verifier holds a receipt and a decision, the binding between
        them is a recomputation, not a presumption. The reference is rebuilt under
        <xref target="decision-ref"/> from the full decision evidence together
        with the action reference the receipt itself carries, and it MUST equal
        the receipt's decision_ref. A decision supplied alongside a receipt that
        does not bind to it is not evidence about that receipt, and a verifier
        MUST settle the binding before it reads any member of the decision,
        including its validity window. Reading a window off a decision that
        belongs to a different receipt reports a temporal relation the verifier
        never checked.</t>

        <t>The four relations were named on <xref target="COSAI-149"/>, where the
        last three are stated as "an authorized action does not imply the exact
        authorized call ran", "an exact authorized call does not imply execution
        was non-bypassable" and "execution does not imply the intended effect
        occurred". The candidate corpus this section is written against isolates
        those three.</t>

        <t>What this subsection does not establish. It does not establish that a
        verifier can reach any of the four findings from signed records alone.
        Three of the four need evidence from outside the record set. It does not
        establish an order in which a deployment must attempt them. It states only
        that a finding on one is not a finding on another.</t>

        <t>Requirements. APS-EVID-RELATIONS-NOT-TRANSITIVE, a verifier reports
        each of the four relations as its own finding, derives no later one from
        an earlier one, and reports no finding it did not establish. Specified, not
        exercised. APS-REC-DECISION-REF-RECOMPUTED, the decision reference is
        rebuilt from the full decision evidence and the receipt's own action
        reference and must equal the receipt's decision_ref. That is the
        requirement <xref target="action-result"/> states with a keyword and
        <xref target="receipt-verification"/> step 8 performs, restated here and
        not added here, and receipt-decision-relation exercises it by asserting
        DECISION_REF_MISMATCH over its seven vectors.
        APS-REC-DECISION-BINDING-BEFORE-READ, the binding is settled before any
        member of the decision is read, including its validity window, which the
        closed core does not state. Specified, not exercised: no vector asserts the
        ordering of the binding check against the temporal check.</t>

        <t>Status: Core for one proposition, carried by
        APS-REC-DECISION-REF-RECOMPUTED, which restates
        <xref target="action-result"/> and
        <xref target="receipt-verification"/> step 8. The rest of this subsection
        is a Candidate feature, normative for an implementation claiming it and not
        a requirement of APS Core conformance, and the additions are the four
        non-transitive relations and the ordering rule of
        APS-REC-DECISION-BINDING-BEFORE-READ. Related fixture families:
        receipt-decision-relation, 7 vectors. action-result-binding, 6 cases.
        approval-single-use, 9 presentations. The interop record
        cosai-ws4-149-decision-to-effect in the same suite, 11 cases, which is an
        interop record and not a fixture family. Exercised requirements: APS-REC-DECISION-REF-RECOMPUTED. Implemented requirements: APS-REC-DECISION-REF-RECOMPUTED, APS-REC-DECISION-BINDING-BEFORE-READ. Related implementation surfaces:
        agent-passport-system receipt-core 7.2.0 (TypeScript) and 4.2.0 (Python)
        for the receipt-to-decision binding and its temporal relation, no released
        package for the remaining three relations.</t>
      </section>

      <section anchor="d2e-exact-call" numbered="true" toc="default">
        <name>The Exact Call</name>

        <t>An approval admits one action. The permit or narrow record of
        <xref target="receipt-stages"/> is bound to the action reference it
        approves, and that reference commits to the call, not to a class of
        calls.</t>

        <t>At the next authorization boundary the boundary MUST compare the call
        it is about to admit against the action the approval names, and MUST NOT
        admit a call whose action reference differs from it. An argument changed
        after the decision produces a different action reference, so the
        comparison catches it without any separate argument-level rule.</t>

        <t>A refusal on that ground is a finding in its own right and the boundary
        SHOULD record the cause it attributes the refusal to. Where a refusal
        carries no attributed cause, a verifier MUST NOT read it as a finding
        about the exact call, because a refusal on its own does not say which
        boundary refused or why.</t>

        <t>What this subsection does not establish. It does not establish that
        admitting the call was the right decision under whatever policy governs
        the deployment. A call can match its approval exactly and still be a
        policy mistake. It does not establish that the arguments mean what the
        requesting agent intended them to mean. The comparison is between
        references over canonical bytes, not between intentions.</t>

        <t>Requirement. APS-ENF-EXACT-ACTION-MATCH, the boundary compares the
        call it is about to admit against the action the approval names and
        admits no call whose action reference differs. Specified, not
        exercised.</t>

        <t>Status: Candidate feature. Normative for an implementation claiming this feature, not a requirement of APS Core conformance. Related fixture families:
        approval-single-use, action-result-binding, actionref-canonical, and the
        interop record cosai-ws4-149-decision-to-effect in the same suite, which
        is an interop record and not a fixture family. Implemented requirements: none. Related implementation surfaces: no
        released package for the boundary-side comparison. agent-passport-system
        7.2.0 (TypeScript) and 4.2.0 (Python) recompute the action and decision
        references the comparison reads.</t>
      </section>

      <section anchor="d2e-bypass" numbered="true" toc="default">
        <name>Bypass and the Mediation Assumption</name>

        <t>This document establishes that a governed path was valid. It does not
        establish that no other path reached the same effect. That assumption is
        load bearing, and a deployment that does not hold it loses the third
        relation of <xref target="d2e-relations"/> and nothing else in this
        document replaces it.</t>

        <t>A verifier that cannot establish coverage over the paths to an effect
        MUST NOT report that the effect was reached only through the boundary that
        admitted it. One observed use of a path that did not pass the boundary
        settles that finding negatively on its own. The absence of an observed
        alternate path settles nothing about paths outside what was actually
        observed.</t>

        <t>A coverage premise is supplied to the verifier and is not established
        recursively by the same check. Where one is supplied, it MUST name the
        scope it covers and the claim instance it is bound to, and a premise whose
        scope or claim differs from the one being evaluated leaves the finding not
        established rather than settled either way. A premise that is asserted
        rather than established is not a premise for this purpose.</t>

        <t>A verifier that holds the boundary's admission state MUST resolve a
        claim that a credential use went through the boundary to the admission
        that covers it. Where that verifier holds the admission state and the
        claim resolves to no admission, the claim is malformed input, not a weaker
        finding, because accepting it would let a relabelling turn a negative
        finding into an unsettled one. Where the boundary's admission state is not
        available to the verifier, the coverage claim is not established, and the
        verifier reports neither a governed path nor a malformed claim.</t>

        <t>What this subsection does not establish. It does not establish that no
        alternate path exists anywhere. A coverage premise is scoped, and a path
        outside that scope is a path the verifier did not look at, in either
        direction. It does not establish that the boundary is the only way to
        reach the effect. It does not enumerate paths, and nothing here is a
        completeness claim.</t>

        <t>Requirements. APS-ENF-NO-COVERAGE-NO-BYPASS-CLAIM, a verifier that
        cannot establish coverage over the paths to an effect does not report that
        the effect was reached only through the boundary that admitted it.
        APS-ENF-COVERAGE-PREMISE-SCOPED, a coverage premise names the scope it
        covers and the claim instance it is bound to, and a premise whose scope or
        claim differs leaves the finding not established.
        APS-ENF-COVERAGE-RESOLVES-TO-ADMISSION, a verifier holding the boundary's
        admission state resolves a claim of a governed path to the admission that
        covers it and treats a claim resolving to no admission as malformed input,
        and where that state is not available to the verifier the coverage claim
        is not established. All three are specified, not exercised: the interop
        record settles the negative direction on an observed alternate path and no
        vector establishes coverage.</t>

        <t>Status: Candidate feature. Normative for an implementation claiming this feature, not a requirement of APS Core conformance. Related fixture families:
        cached-authorization-revocation, runtime-authority-denial-continuity,
        conflicting-status-sources, and the interop record
        cosai-ws4-149-decision-to-effect in the same suite, which is an interop
        record and not a fixture family. Implemented requirements: none. Related implementation surfaces: no released package.</t>
      </section>

      <section anchor="d2e-effect-verification" numbered="true" toc="default">
        <name>Effect Verification</name>

        <t>An action-result record attests what the enforcement boundary observed
        after dispatch, as <xref target="receipt-stages"/> states. A verifier MUST
        NOT report an effect as externally established from an action-result
        record alone, whatever its status member says and whatever effect_ref it
        carries.</t>

        <t>Where a deployment compares an executing tool's own report against a
        read-back obtained independently of that tool, three outcomes follow.
        Where the two agree, the verifier may report agreement between two
        records. Where they disagree, the verifier MUST NOT report the effect as
        established. Where the read-back cannot be obtained, the verifier MUST
        report the effect finding as not established and MUST name the source it
        could not obtain.</t>

        <t>A runtime status value that names its own indeterminacy is evidence
        about the run. A verifier MUST NOT read it as a report about the effect
        finding, in either direction. The two are different objects: one says what
        the executing system observed, the other says what the evidence
        establishes.</t>

        <t>What this subsection does not establish. Agreement between a
        self-report and a read-back does not establish that the action under test
        caused the state read back. Something else may have produced the same
        state, or the state may have held before the call ran. It does not
        establish that the read-back source is trustworthy. A verifier that treats
        the read-back as the arbiter is reporting agreement between two records
        and not ground truth. Establishing the standing of the read-back source is
        a separate question this document does not answer.</t>

        <t>Requirements. APS-EVID-EFFECT-NOT-FROM-RESULT, a verifier does not
        report an effect as externally established from an action-result record
        alone, whatever its status member says. APS-EVID-READBACK-OUTCOMES,
        disagreement between a self-report and an independent read-back does not
        establish the effect, and an unobtainable read-back gives not established
        with the unobtainable source named. Both are specified, not exercised.</t>

        <t>Status: Candidate feature. Normative for an implementation claiming this feature, not a requirement of APS Core conformance. Related fixture families:
        action-result-binding, lifecycle-evidence-and-record,
        accountability-record, and the interop record
        cosai-ws4-149-decision-to-effect in the same suite, which is an interop
        record and not a fixture family. Implemented requirements: none. Related implementation surfaces: no released package.</t>
      </section>

      <section anchor="d2e-not-established" numbered="true" toc="default">
        <name>When the Evidence Is Not Enough</name>

        <t>A finding about any of the relations of <xref target="d2e-relations"/>
        has three outcomes and not two. The property is established, the property
        is settled negatively, or the evidence does not settle it. The third is
        not a weak form of the second. It is a statement about the verifier's
        evidence, not a statement about the world.</t>

        <t>A verifier reporting that the evidence does not settle a property MUST
        name what is missing, and the name MUST identify a source, a freshness
        bound or a coverage claim rather than restating the property. A caller
        MUST NOT collapse that outcome into either of the other two. A deployment
        MAY deny an action on it, and the denial states the unsettled property as
        its reason.</t>

        <t>False and not established stay apart in the record. A verifier that
        establishes an alternate path was used reports a negative finding. A
        verifier that cannot establish coverage reports that it cannot. A record
        that writes the second as the first claims a finding nobody made, and a
        record that writes the first as the second loses one.</t>

        <t>What this subsection does not establish. It does not define a code
        vocabulary for what is missing. The names a verifier reports are its own
        and are not protocol constants. It does not say how a deployment should
        act on an unsettled finding beyond permitting denial. It does not make an
        unsettled finding a defect in the records that were presented.</t>

        <t>Requirement. APS-EVID-MISSING-NAMED, a verifier reporting that the
        evidence does not settle a property names what is missing, and the name
        identifies a source, a freshness bound or a coverage claim rather than
        restating the property. Specified, not exercised.</t>

        <t>Status: Candidate feature. Normative for an implementation claiming this feature, not a requirement of APS Core conformance. Related fixture families:
        activation-not-established, conflicting-status-sources,
        revocation-resolution-forward-compat, lifecycle-evidence-and-record, and
        the interop record cosai-ws4-149-decision-to-effect in the same suite,
        which is an interop record and not a fixture family. Implemented requirements: none. Related implementation surfaces:
        agent-passport-system lifecycle-state 7.2.0 (TypeScript) and 4.2.0
        (Python), both experimental, for the verdict and boundary-outcome
        vocabulary, no released package for the decision-to-effect properties.</t>
      </section>

      <section anchor="d2e-execution-states" numbered="true" toc="default">
        <name>Execution States That Are Not Synonyms</name>

        <t>Eight findings about one action are routinely written as if they were
        one. They are not, and a record that uses one name for another loses the
        distinction permanently.</t>

        <dl spacing="normal">
          <dt>authorized</dt>
          <dd>A boundary evaluated the policy chain and issued an approval bound
          to the action.</dd>
          <dt>admitted</dt>
          <dd>That approval was consumed at the next authorization boundary,
          after the rechecks <xref target="receipt-stages"/> requires.</dd>
          <dt>dispatch attempted</dt>
          <dd>The boundary handed the call onward. Nothing about the downstream
          system follows from this alone.</dd>
          <dt>downstream response observed</dt>
          <dd>The boundary observed a response. This is what an action-result
          record attests.</dd>
          <dt>effect externally established</dt>
          <dd>Evidence resolved outside the boundary establishes the effect. This
          needs <xref target="d2e-effect-verification"/> and is never carried by
          the record alone.</dd>
          <dt>settled</dt>
          <dd>A reservation the approval created against a bounded quantity was
          closed out at the amount actually used.</dd>
          <dt>compensated</dt>
          <dd>A later action reversed or offset the effect. This is its own
          action with its own authorization.</dd>
          <dt>unknown</dt>
          <dd>The boundary reached no observation. This is the status member value
          an action-result record carries for that case.</dd>
        </dl>

        <t>A verifier MUST NOT report one of these findings from evidence that
        establishes another. In particular, it MUST NOT report an effect
        externally established from an admitted approval, and MUST NOT report an
        action admitted from an approval that was issued.</t>

        <t>This document defines no member name, enumeration or wire encoding for
        the eight. The status member of an action-result record carries succeeded,
        failed and unknown, as <xref target="receipt-stages"/> defines, and those
        three do not partition the list above. Settled and compensated are stated
        here because the distinctions are real in the case corpus, and no fixture
        family in the conformance suite exercises either of them. They are
        informative in this document for that reason.</t>

        <t>What this subsection does not establish. It does not add a state
        machine. It does not require a deployment to record all eight, or to
        record any of them as a distinct artifact. It does not establish that the
        eight are exhaustive.</t>

        <t>Requirement. APS-EVID-STATES-NOT-SYNONYMS, a verifier does not report
        one of these findings from evidence that establishes another, and in
        particular reports neither an effect externally established from an
        admitted approval nor an action admitted from an approval that was issued.
        Specified, not exercised.</t>

        <t>Status: Candidate feature. Normative for an implementation claiming this feature, not a requirement of APS Core conformance. The feature covers
        authorized, admitted, dispatch attempted, downstream response observed,
        effect externally established and unknown. Settled and compensated are
        informative here, because no family exercises either. Related fixture families:
        approval-single-use, action-result-binding,
        cached-authorization-revocation, and the interop record
        cosai-ws4-149-decision-to-effect in the same suite, which is an interop
        record and not a fixture family. Implemented requirements: none. Related implementation surfaces: no released package.</t>
      </section>

      <section anchor="d2e-indeterminate" numbered="true" toc="default">
        <name>An Indeterminate Result After Dispatch</name>

        <t>An action-result record with status unknown says the boundary reached
        no observation. It does not say the effect failed to occur, and a verifier
        MUST NOT read it as either outcome.</t>

        <t>A consumed approval admits no further dispatch. A later attempt MUST
        obtain a fresh authorization decision and MUST NOT reuse the consumed
        approval, which <xref target="receipt-stages"/> already makes unusable a
        second time.</t>

        <t>The rest of this paragraph is informative. A deployment that reaches
        the same effect by a different call, a different tool or a different path
        has not continued the first attempt, and the rule above still applies to
        each attempt on its own, because it is stated on the approval a boundary
        consumed. This revision defines no identity for an effect, so a verifier
        cannot establish that two calls reach one effect, and the rule is not
        stated over an effect identity.</t>

        <t>Where the action carries a reversibility ceiling at which no
        compensating action exists, a deployment that retries on an unknown result
        risks a second effect it cannot undo, and the record of the first attempt
        does not say whether the first effect occurred. This document states no
        normative retry rule for that case. No fixture family exercises one, and
        the deduplication mechanisms deployments use for it, including
        idempotency keys and at-least-once delivery, resolve to execution
        behaviour rather than to an authority finding. The case corpus records them
        as boundary cases for that reason.</t>

        <t>Compensation is a new record. A compensating or reversing action is
        separate authority with its own authorization boundary and its own
        records, and its record refers to the prior action rather than amending
        it. A later finding about an earlier action, including a finding that the
        earlier effect did occur, is recorded the same way. A verifier MUST NOT
        treat a later record as having replaced an earlier one, and both MUST
        remain independently verifiable. Whether an operation interrupted at an
        authorization boundary resumes, restarts, compensates or stops is open and
        is not settled here.</t>

        <t>What this subsection does not establish. It does not establish that a
        compensating action exists for any effect, or that a party holds authority
        to take one. It does not define a record type for compensation. It does
        not establish what the first effect was. An unknown result stays unknown
        until evidence outside the record set settles it, and a compensation
        record does not retroactively settle it.</t>

        <t>Requirements. APS-ENF-RETRY-NEW-DECISION, a consumed approval admits
        no further dispatch, and a later attempt obtains a fresh authorization
        decision and does not reuse the consumed approval. APS-ENF-COMPENSATION-NEW-RECORD, a compensating
        action carries its own authorization boundary and its own records, a
        verifier does not treat a later record as having replaced an earlier one,
        and both remain independently verifiable. Both are specified, not
        exercised.</t>

        <t>Status: Candidate feature. Normative for an implementation claiming this feature, not a requirement of APS Core conformance. Related fixture families:
        authority-epoch-rollback, conflicting-status-sources,
        runtime-authority-denial-continuity, approval-single-use,
        action-result-binding, and the interop record
        cosai-ws4-149-decision-to-effect in the same suite, which is an interop
        record and not a fixture family. Implemented requirements: none. Related implementation surfaces: no released package.</t>
      </section>

      <section anchor="d2e-retry-contract" numbered="true" toc="default">
        <name>The Reservation and Retry Contract</name>

        <t>This subsection is informative. It adds no requirement. It reads four
        sections of the closed core together and states the single contract they
        hold between them, because those four sections are where an implementer
        most often assembles two contracts by mistake.</t>

        <t>The reservation contract is the core's, and it has four moments.
        Reserve at approval: <xref target="two-phase-execution"/> places the
        reservation against the boundary-held cumulative total at the moment the
        approval is issued, and <xref target="policy-chain"/> requires the
        reservation to succeed against every bounded ancestor in the selected
        chain before dispatch. Complete at admission:
        <xref target="policy-decision"/> requires the boundary to verify the
        approval has not expired, atomically consume its receipt_id, recheck time
        and revocation state, and complete any spend reservation, all at the
        moment the approval is consumed to admit dispatch. Settle after the
        result: <xref target="cumulative-spend"/> moves every ancestor counter
        from reserved to committed on successful settlement. Release only before
        dispatch or on trusted evidence that dispatch did not occur, which is the
        only release <xref target="cumulative-spend"/> permits.</t>

        <t>The reservation is keyed by action_ref and its footprint is the
        action_ref, the unit, the amount and the set of bounded ancestor
        delegation identifiers. A request presenting a footprint already reserved
        and not yet settled or cancelled is a retry of the same reservation and
        the boundary reserves no second amount for it. A request under the same
        action_ref whose unit, amount or bounded ancestor set differs is
        conflicting reuse and is rejected.</t>

        <t>An idempotent reservation lookup is not permission to dispatch again.
        That is entailed by <xref target="policy-decision"/>, under which only an
        approval that has neither expired nor been consumed admits dispatch.
        Recognising a footprint tells the boundary that it already holds a
        reservation. It does not tell the boundary that the approval is still
        unconsumed, and the approval is what admits dispatch. The three identities
        are separate and stay separate: the reservation footprint, keyed by
        action_ref, the consumable approval identity, keyed by the policy-decision
        record's receipt_id, and the agent nonce, which the intent record carries
        inside the action input object that action_ref commits to and which the
        boundary refuses when the same agent reuses it inside the deployment's
        replay window, as <xref target="action-reference"/> requires. A consumed
        approval does not become reusable because its reservation is still
        outstanding.</t>

        <t>What this leaves open is the recovery contract. Nothing in this
        revision says what a boundary does after a crash between consumption and
        dispatch, how two concurrent admissions on one approval resolve beyond the
        requirement that consumption be atomic, or how an operation resumes
        without repeating its effect.
        <xref target="oq-crash-recovery"/> carries that, and it is the one thing a
        durable admission record would have to define before it could enter.</t>

        <t>Requirement identifiers for the four core moments, so that a claim can
        cite them: APS-ENF-RESERVE-AT-APPROVAL, APS-ENF-COMPLETE-AT-ADMISSION,
        APS-ENF-SETTLE-AFTER-RESULT, APS-ENF-RELEASE-PRE-DISPATCH-ONLY, and
        APS-ENF-CONFLICTING-REUSE-REJECTED. All five are requirements of the
        closed core, restated here and not added here.
        <xref target="requirement-matrix"/> records their coverage.</t>

        <t>What this subsection does not establish. It does not establish that any
        released package holds a reservation ledger, and none does, because the
        enforcement boundary is not a published package. It does not establish
        that a deployment's ledger is linearizable, which
        <xref target="cumulative-spend"/> requires for live spend status to be
        determinate at all.</t>
      </section>

      <section anchor="d2e-chain-validity" numbered="true" toc="default">
        <name>Chain Validity Is Not Permission to Execute</name>

        <t>This subsection is informative and states no requirement. No fixture
        family in the conformance suite exercises it, which is a fact about the
        corpus and not the reason.</t>

        <t>Whether an authority chain is valid and whether the action it
        authorizes is permitted by rules outside that chain are separate findings.
        A restriction from outside the chain can block execution with no event
        anywhere in the chain, and removing the restriction restores execution on
        the unchanged chain without creating new authority. A verifier that
        returns one of those findings is not to be read as having answered the
        other. The reason-code rule of <xref target="core-invariants"/> is what
        keeps them apart in a record: a restriction from outside the chain does
        not make the chain invalid, it denies the action.</t>

        <t>Block and release are not always symmetric. Where what changed is which
        party holds the resource rather than a restriction on reaching it, no
        release restores anything, and the case corpus carries that counterexample
        against any symmetric reading. Where the represented principal itself
        changes rather than being restricted, this is not the finding that
        applies.</t>

        <t>What this subsection does not establish. It does not ask a verifier to
        decide whether an action is lawful. It does not claim a restriction pauses
        descendants. It says nothing about whether any legal doctrine applies to
        an AI agent, and no case behind it is a source of rules for one.</t>
      </section>

      <section anchor="d2e-unexecutable" numbered="true" toc="default">
        <name>A Valid Grant Can Be Unexecutable</name>

        <t>This subsection is informative and states no requirement. No fixture
        family in the conformance suite exercises it, which is a fact about the
        corpus and not the reason.</t>

        <t>An authority artifact can be valid, unexpired, unexhausted and under no
        live restriction while the target, the executor or the capability it names
        no longer exists. The artifact verdict is unchanged. The execution attempt
        fails, and the record carries the referent that could not be resolved. A
        verifier reporting such an artifact invalid, expired, revoked or suspended
        reports a lifecycle event that did not happen.</t>

        <t>Unexecutable is an execution outcome and not an artifact verdict. This
        document proposes no additional verdict for it.</t>

        <t>What this subsection does not establish. It does not prescribe which
        party re-points a grant whose referent is gone, or whether that party may.
        It does not claim the authority is unaffected in the world, since a grant
        naming a permanently absent executor may well be worth revoking. It claims
        only that nothing in the grant's own lifecycle has changed. It does not
        cover a referent that changed rather than vanished.</t>
      </section>

        <section anchor="worked-examples" numbered="true" toc="default">
        <name>Worked Examples</name>
        <t>The five examples below are informative. Each carries a state trace
        with six columns, and each walks one situation
        through the records this document defines, the lifecycle transition it
        turns on, the decision, the point at which an approval is consumed to
        admit dispatch, the result, and what an offline verifier holding only the
        records can and cannot conclude. Each names the case identifiers in
        <xref target="case-corpus"/> that the situation comes from and the fixture
        families that exercise the shapes involved. Naming a family records that
        vectors for that shape exist. It does not make any statement in an example
        a conformance result.</t>

        <t>The examples use no record shape this document has not already defined.
        Field names are those of the authority delegation record in
        <xref target="faceted-attenuation"/> and of the receipt envelope and
        stages in <xref target="receipt-envelope"/> and
        <xref target="receipt-stages"/>. Verdict and outcome names are those of
        <xref target="admissibility"/>, and the lifecycle states are those of
        <xref target="authority-lifecycle"/>. Reason codes are the module strings
        the reference implementations carry.</t>

        <section anchor="wex-subagent-narrowing" numbered="true" toc="default">
          <name>A Purchasing Grant Narrowed by a Subagent</name>
          <t>A principal issues a root authority delegation to a procurement
          agent. Its scope facet grants commerce:checkout, its spend facet bounds
          per_action and cumulative in minor units of one currency, its depth
          facet leaves two hops remaining, and its time facet closes at the end of
          the quarter. The procurement agent issues a child delegation to a
          subagent that handles one supplier. The child narrows scope to the one
          supplier's catalogue, lowers per_action, keeps cumulative at or below
          the parent, and sets depth remaining to one.</t>

          <t>The lifecycle transition is issuance, and nothing about the parent
          changes. The child is a new artifact whose issuance validity rests on
          the issuer's standing at the moment it was signed. Because the issuer
          checks the parent's signature and temporal validity before signing, per
          the issuance obligations in <xref target="core-invariants"/>, a child
          under an expired parent is refused at the issuer rather than left for a
          later verifier.</t>

          <t>The subagent then submits one purchase. It emits an action-intent
          record whose subject_agent is itself, whose delegation_ref is the child
          delegation, and whose action_ref commits the action input object. The
          enforcement boundary evaluates the single root-to-leaf chain the
          subagent presented, issues a policy-decision record with verdict permit,
          and reserves the amount against the boundary-held cumulative total. At
          the next authorization boundary, which is the moment that approval is
          consumed to admit dispatch, the boundary rechecks time and revocation
          state, atomically consumes the decision's receipt_id, and dispatches.
          The action-result record carries status succeeded and an effect_ref.</t>

          <t>Three narrowing failures are what this shape is worth walking. A
          child that widens scope is no wider than its parent only when every
          component comparison succeeds, so a widened child yields
          scope_not_covered and an invalid chain. A child issued past the parent's
          declared depth is a distinct failure from a scope failure, which is
          LC-H-008. A subagent that holds a
          scope and hands it to a process it spawned has not thereby acquired
          authority to confer it, which is
          LC-E-006. If the subagent also holds a
          second chain from an unrelated root, the two are never combined: each
          action selects one chain, and an amount above the presented chain's own
          ceiling but below the two ceilings added together is denied, with
          chain_set_presented_as_one where a caller presents both as one.
          LC-C-012 is the case that forces this
          to be a refusal to union rather than a refusal to coordinate.</t>

          <t>The trace below has six columns, split into two tables keyed by step so that each half fits the page width. Columns one to three are the state before the step, the artifact or event, and the verifier rule that applies. Columns four to six are the new authority state, the next action the state permits, and the evidence available afterwards.</t>

          <table anchor="tbl-wex-subagent-narrowing-a" align="left">
            <name>Purchasing grant narrowed by a subagent: state before, event, and verifier rule</name>
            <thead><tr><th align="left">Step</th><th align="left">State before</th><th align="left">Artifact or event</th><th align="left">Verifier rule</th></tr></thead>
            <tbody>
              <tr><td>1</td><td>no authority for the subagent</td><td>root AuthorityDelegationV1 signed by the principal</td><td>issuer standing is fixed at issuance</td></tr>
              <tr><td>2</td><td>root valid, two hops remaining</td><td>child AuthorityDelegationV1 narrowing scope, per_action and depth</td><td>no facet wider than the parent under its component order</td></tr>
              <tr><td>3</td><td>chain valid to the leaf</td><td>action-intent receipt committing the action reference</td><td>intent is a declaration and not an admission</td></tr>
              <tr><td>4</td><td>chain valid, no approval</td><td>policy-decision receipt, verdict permit, amount reserved</td><td>one root-to-leaf chain, no union across chains</td></tr>
              <tr><td>5</td><td>approval unconsumed</td><td>consumption at the enforcement boundary</td><td>recheck time and revocation, consume atomically, complete the reservation</td></tr>
              <tr><td>6</td><td>dispatched</td><td>action-result receipt, status succeeded, effect reference present</td><td>an observed outcome is not an external effect</td></tr>
            </tbody>
          </table>

          <table anchor="tbl-wex-subagent-narrowing-b" align="left">
            <name>Purchasing grant narrowed by a subagent: new state, permitted next action, and evidence afterwards</name>
            <thead><tr><th align="left">Step</th><th align="left">New authority state</th><th align="left">Permitted next action</th><th align="left">Evidence afterwards</th></tr></thead>
            <tbody>
              <tr><td>1</td><td>root valid</td><td>issue a child inside the root facets</td><td>the signed root</td></tr>
              <tr><td>2</td><td>chain valid to the leaf</td><td>declare an intent</td><td>two signed delegations</td></tr>
              <tr><td>3</td><td>unchanged</td><td>seek a decision</td><td>the intent receipt</td></tr>
              <tr><td>4</td><td>approval exists and is unconsumed</td><td>present the approval at the boundary</td><td>the decision receipt</td></tr>
              <tr><td>5</td><td>approval consumed</td><td>dispatch the exact bound call</td><td>none durable, the approval-state axis stays not established</td></tr>
              <tr><td>6</td><td>unchanged, the reservation settles</td><td>resolve the effect evidence</td><td>the three-record chain</td></tr>
            </tbody>
          </table>

          <t>An offline verifier holding the two delegations, the three receipts
          and the action input object can conclude that the chain narrows at each
          hop, that the receipt identifiers and signatures recompute, that the
          action binding holds because the supplied action input object's agent_id
          equals the record's subject_agent, and that the decision reference
          rebuilds from the decision evidence. It cannot conclude that the
          approval was consumed once, because whether a decision's receipt_id has
          been consumed is boundary state and not content of the record, so the
          approval-state axis is not established. It cannot conclude that the
          cumulative total across the subtree was correct, because the boundary
          holds that total. It cannot conclude that the purchase reached the
          supplier, because the action-result record attests to what the boundary
          observed.</t>

          <t>Families. lifecycle-subdelegation-edges, 13 cases.
          lifecycle-conferral-without-authority, 10 vectors. single-chain-selection,
          6 cases. chain-selection-no-union, 11 cases. lifecycle-purpose-exhaustion,
          21 events, on an unmerged candidate branch. issuance-refusal-expiry, two
          parts, issuance and verification.</t>

          <t>What this example does not establish. It does not establish that the
          subtree total was enforced, that the supplier received anything, or that
          the deployment's own facets are the seven this document defines. It does
          not establish that the child was the only child the parent issued.</t>
        </section>

        <section anchor="wex-departure-in-flight" numbered="true" toc="default">
          <name>An Employee Leaves with In-Flight Descendant Work</name>
          <t>A bookkeeping agent runs under a chain rooted in an organization and
          issued by an employee acting for an office. Descendants of that chain
          have work in progress. The employee resigns.</t>

          <t>The departure is not a revocation. It is an external event, and its
          effect depends on the authority relationship and the rules that govern
          it. Two findings stay separate. Whether the grant was validly issued
          turns on the issuer's standing at issuance and does not change with the
          departure. What the grant continues to depend on is a separate question
          about the present. Where the record cannot distinguish the principal,
          the issuer and the relevant dependency, continuation has not been
          established, and not established is ignorance rather than a finding that
          the chain is invalid.</t>

          <t>Suppose the organization revokes the employee's issuing authority. At
          the next authorization boundary, the old grant cannot authorize any new
          effect. Once a verifier establishes the revocation under the freshness
          rules this document states for chain verification, every chain
          containing the revoked delegation is invalid with reason revoked, which
          is <xref target="lifecycle-l1"/>,
          whether or not any record names the descendant and whether or not the
          descendant was ever enumerated. Replacement authority is a fresh grant
          from a principal who currently holds authority, and the successor's
          grant covers what the successor issues, not the departing principal's
          whole tree.</t>

          <t>What happens to the work already in flight is a different question,
          and this document does not answer it in general. It answers one part.
          Effects already completed stand. A decision already consumed to admit
          dispatch is not undone by a later revocation, and an action-result
          record issued after the consumed decision's valid_until has passed is
          not invalid on that ground alone, because execution and observation can
          complete after the approval is consumed. Whether the operation resumes,
          restarts, compensates or stops is open, and
          <xref target="oq-work-in-flight"/> states why.
          LC-B-029 supplies one instrument's
          concrete boundary, a receiving institution's acceptance, after which a
          mid-flight authority change no longer stops the order.
          LC-E-013 is the same interval from the
          agent's side, where invalidation arrives mid-run rather than at the next
          gateway check.</t>

          <t>A handover can be ordered differently from a compromise. A planned
          handover may require the incoming holder's acknowledgment, with
          authority staying with the outgoing holder until it arrives, which is
          LC-C-014. A compromised principal may
          call for revoking first and accepting a gap. In neither case does the
          old chain remain the basis for continuity.</t>

          <t>The trace below has six columns, split into two tables keyed by step so that each half fits the page width. Columns one to three are the state before the step, the artifact or event, and the verifier rule that applies. Columns four to six are the new authority state, the next action the state permits, and the evidence available afterwards.</t>

          <table anchor="tbl-wex-departure-in-flight-a" align="left">
            <name>Employee leaves with in-flight descendant work: state before, event, and verifier rule</name>
            <thead><tr><th align="left">Step</th><th align="left">State before</th><th align="left">Artifact or event</th><th align="left">Verifier rule</th></tr></thead>
            <tbody>
              <tr><td>1</td><td>chain valid, issued by the employee for an office</td><td>no event</td><td>issuance standing does not change with later events</td></tr>
              <tr><td>2</td><td>valid</td><td>the employee resigns, no APS record exists</td><td>a departure is not a revocation</td></tr>
              <tr><td>3</td><td>valid</td><td>the organization revokes the issuing authority</td><td>an established revocation invalidates every chain containing it</td></tr>
              <tr><td>4</td><td>invalid</td><td>action-result receipt for work admitted before the revocation</td><td>execution and observation complete after admission</td></tr>
              <tr><td>5</td><td>invalid</td><td>a new grant from a principal who currently holds the authority</td><td>a successor does not inherit the predecessor tree</td></tr>
            </tbody>
          </table>

          <table anchor="tbl-wex-departure-in-flight-b" align="left">
            <name>Employee leaves with in-flight descendant work: new state, permitted next action, and evidence afterwards</name>
            <thead><tr><th align="left">Step</th><th align="left">New authority state</th><th align="left">Permitted next action</th><th align="left">Evidence afterwards</th></tr></thead>
            <tbody>
              <tr><td>1</td><td>valid</td><td>act under the chain</td><td>the chain</td></tr>
              <tr><td>2</td><td>valid, continuation not established where the evidence cannot separate principal, issuer and dependency</td><td>act only where continuation is established</td><td>none inside APS</td></tr>
              <tr><td>3</td><td>invalid</td><td>none under this chain</td><td>the revocation record and a status observation</td></tr>
              <tr><td>4</td><td>invalid, the completed effect stands</td><td>none under the old chain</td><td>the receipt chain of the earlier action</td></tr>
              <tr><td>5</td><td>a separate chain is valid, the old chain stays invalid</td><td>act under the replacement chain</td><td>the new delegation records</td></tr>
            </tbody>
          </table>

          <t>An offline verifier holding the chain, a revocation record in a
          format its profile defines, and the receipts can conclude that the chain
          is invalid from the point it established the revocation, and can
          conclude from the receipts which actions the boundary recorded before
          that point. It cannot conclude that the set of descendants processed by
          a teardown was every descendant at the relevant moment, because that is
          a completeness claim with a basis this document does not define. It
          cannot conclude, from an audit window with no records in it, that
          nothing happened in that window, which is
          LC-F-027. It cannot conclude when any
          particular relying party learned of the revocation, because recording a
          transition and observing it are different events.</t>

          <t>Families. sponsor-handover, 6 cases. lifecycle-organization-events,
          35 cases. lifecycle-principal-events, 32 cases.
          ancestor-revocation-chain, 4 cases. cached-authorization-revocation,
          9 cases. lifecycle-evidence-and-record, 12 cases.</t>

          <t>What this example does not establish. It does not establish what the
          in-flight operation should do, it does not establish that the teardown
          was complete, and it does not establish that any relying party had
          notice. It states nothing about whether any legal rule about human
          agents applies here.</t>
        </section>

        <section anchor="wex-two-holds" numbered="true" toc="default">
          <name>Two Independent Holds and One Clears</name>
          <t>One grant acquires two causes at once, from two sources. A regulator
          imposes a suspension. The organization's own compliance function imposes
          a second, unrelated suspension. The chain itself is untouched and every
          signature still verifies.</t>

          <t>The lifecycle transition is suspension, not revocation, which is
          <xref target="lifecycle-l8"/> and <xref target="lifecycle-suspension"/>.
          Suspension pauses the use of authority and of what depends on it, and it
          is releasable. Revocation is terminal for the artifact it names. The
          verdict is suspended, and it names which causes remain rather than
          collapsing to one flag, because causes compose and each release has to
          come from a source with standing over that cause.</t>

          <t>The regulator's release arrives. It is genuine, its signature
          verifies, and the standing registry places its signer over the cause it
          releases. That cause clears. The verdict stays suspended, because the
          compliance suspension still stands, and a release from one source does
          not reach a cause imposed by another. Two further shapes matter. A
          release from a source the registry does not place over a cause does
          nothing to that cause even when the record is genuine. A release from a
          source that does hold standing over a cause it did not itself impose is
          effective, because standing is not authorship.
          LC-B-024 is the case that forces
          independent release, and LC-B-011 is
          the case where an externally imposed restriction needs an equally
          external release trigger.</t>

          <t>Where only a restriction is left, the verdict is restricted rather
          than suspended, because authority continues in reduced form under a live
          constraint that does not pause it. A composition rule that is not
          satisfied does not make any artifact invalid. It denies the action, with
          reason composition_not_satisfied, and
          LC-C-011 is why a concurrence
          requirement is a gate at the next authorization boundary rather than a
          second chain to combine with the first.</t>

          <t>Two timing shapes sit next to this one. A revocation recorded while
          the grant was suspended still makes the chain invalid after every cause
          has been released, and an unresolvable revocation answer leaves the
          chain not established rather than exercisable. A queued action that
          outlasts a suspension needs a live check when it fires rather than only
          at the moment it was queued, which is
          LC-E-034, a reviewed hypothetical
          whose point is that a scheduler with no view of suspension state can
          reach the right answer for the wrong reason.</t>

          <t>The trace below has six columns, split into two tables keyed by step so that each half fits the page width. Columns one to three are the state before the step, the artifact or event, and the verifier rule that applies. Columns four to six are the new authority state, the next action the state permits, and the evidence available afterwards.</t>

          <table anchor="tbl-wex-two-holds-a" align="left">
            <name>Two independent holds and one clears: state before, event, and verifier rule</name>
            <thead><tr><th align="left">Step</th><th align="left">State before</th><th align="left">Artifact or event</th><th align="left">Verifier rule</th></tr></thead>
            <tbody>
              <tr><td>1</td><td>chain valid, no causes</td><td>no event</td><td>chain verification</td></tr>
              <tr><td>2</td><td>valid</td><td>a suspension cause record from the regulator</td><td>causes standing against one artifact are a set</td></tr>
              <tr><td>3</td><td>suspended, one cause</td><td>a second suspension cause from the compliance function</td><td>causes compose and a count does not satisfy the reporting rule</td></tr>
              <tr><td>4</td><td>suspended, two causes</td><td>a release record from a signer the standing registry places over the first cause</td><td>each named cause is decided independently, standing is resolved outside the record</td></tr>
              <tr><td>5</td><td>suspended, one cause</td><td>the remaining cause is of kind restriction only</td><td>a restriction leaves the artifact in force</td></tr>
              <tr><td>6</td><td>restricted</td><td>a revocation record dated inside the suspension</td><td>illustrative deployment outcome, the chain result reported ahead of the pause state</td></tr>
            </tbody>
          </table>

          <table anchor="tbl-wex-two-holds-b" align="left">
            <name>Two independent holds and one clears: new state, permitted next action, and evidence afterwards</name>
            <thead><tr><th align="left">Step</th><th align="left">New authority state</th><th align="left">Permitted next action</th><th align="left">Evidence afterwards</th></tr></thead>
            <tbody>
              <tr><td>1</td><td>valid</td><td>act under the chain</td><td>the chain</td></tr>
              <tr><td>2</td><td>suspended, one cause named</td><td>none</td><td>one cause record</td></tr>
              <tr><td>3</td><td>suspended, two causes named</td><td>none</td><td>two cause records</td></tr>
              <tr><td>4</td><td>suspended, one cause remaining</td><td>none</td><td>two causes and one release</td></tr>
              <tr><td>5</td><td>restricted</td><td>act within the live constraint</td><td>the cause set as it stands</td></tr>
              <tr><td>6</td><td>invalid</td><td>none</td><td>the revocation record</td></tr>
            </tbody>
          </table>

          <t>The cell marked illustrative deployment outcome is one deployment's
          outcome and not a rule of this document.
          <xref target="lifecycle-suspension"/> requires a verifier not to report
          the pause state as if it answered the chain question, and states no order
          in which the two findings are reported.</t>

          <t>An offline verifier holding the chain, the two cause records and the
          one release can conclude that the chain's signatures verify, that two
          causes attached, and that one release came from a signer the supplied
          standing registry places over the cause it names. It cannot conclude
          that no further cause exists, because it can only report on the causes
          it holds. It cannot conclude a precedence order among causes, because
          none is defined. It cannot conclude that the grant is exercisable now,
          because that is a boundary outcome against live state.</t>

          <t>Families. suspension-cause-composition, 16 cases and 5 gates.
          lifecycle-legal-regulatory-events, 44 vectors.
          lifecycle-time-and-scheduling, 61 vectors.
          lifecycle-multiple-principals-and-conflict, 92 vectors.
          lifecycle-outside-the-chain-standing, 22 vectors.</t>

          <t>What this example does not establish. It does not establish a
          precedence order among causes, it does not establish that the cause set
          it holds is complete, and it does not establish that any release
          restored an exercisable state.</t>
        </section>

        <section anchor="wex-cross-org-approval" numbered="true" toc="default">
          <name>A Cross-Org Action Needing Separate Human Approval and One-Time Admission</name>
          <t>A settlement adds a requirement that a named official personally
          certify a defined category of transactions, for the life of the
          settlement. It touches no existing delegation.
          LC-B-026 is that shape: a party
          outside the principal-agent relationship injects a new approval gate
          into an otherwise unmodified, valid chain.</t>

          <t>The chain stays valid. A transaction inside the settlement's scope is
          no longer sufficient on the chain alone. The lifecycle state is
          restricted rather than suspended, because the added gate does not pause
          the grant. A gateway that rechecks only the chain keeps authorizing
          exactly the transactions the settlement was meant to catch, because
          nothing in the delegation changed.</t>

          <t>An agent in one organization then submits an action against a target
          in another. It emits an action-intent record. The enforcement boundary
          evaluates the chain, the applicable policy version, and the additional
          evidence its profile requires for that category, and issues a
          policy-decision record with verdict permit or narrow. That record is the
          consumable approval. Its receipt_id is the consumable identity, its
          action_ref is the binding to the exact action, and its valid_until is
          the bounded lifetime.</t>

          <t>At the next authorization boundary, the boundary verifies the
          approval has not expired, atomically consumes its receipt_id, rechecks
          time and revocation state, and completes the spend reservation. An
          approval already consumed, expired, or failing that recheck does not
          admit execution. A deny record is terminal and is never consumed as an
          approval. Consumption is what makes the admission one-time, and an
          approval that is still cryptographically valid after consumption does
          not admit the action a second time.</t>

          <t>This document specifies the single-use approval bound to an
          action_ref and the rules under which it is consumed. It does not specify
          that the approver be a human distinct from the executing agent, it does
          not specify a designation of such a requirement carried inside delegated
          authority, and it does not specify preservation of such a designation
          across narrowing. A deployment that needs those states them in its
          profile. <xref target="WIMSE-XORG"/> states them as requirements on some
          mechanism and selects no mechanism.</t>

          <t>The trace below has six columns, split into two tables keyed by step so that each half fits the page width. Columns one to three are the state before the step, the artifact or event, and the verifier rule that applies. Columns four to six are the new authority state, the next action the state permits, and the evidence available afterwards.</t>

          <table anchor="tbl-wex-cross-org-approval-a" align="left">
            <name>Cross-org action with separate approval and one-time admission: state before, event, and verifier rule</name>
            <thead><tr><th align="left">Step</th><th align="left">State before</th><th align="left">Artifact or event</th><th align="left">Verifier rule</th></tr></thead>
            <tbody>
              <tr><td>1</td><td>chain valid</td><td>an externally imposed certification requirement, touching no delegation</td><td>illustrative deployment outcome, a restriction from outside the chain denying the action while the chain stays valid</td></tr>
              <tr><td>2</td><td>restricted</td><td>action-intent receipt</td><td>intent is not admission</td></tr>
              <tr><td>3</td><td>restricted</td><td>policy-decision receipt, verdict permit, issued after the required evidence resolved</td><td>the decision commits to the evaluated authority state, the policy input and the decision context</td></tr>
              <tr><td>4</td><td>approval unconsumed</td><td>consumption at the enforcement boundary</td><td>single use, recheck, complete the reservation</td></tr>
              <tr><td>5</td><td>approval consumed</td><td>the same approval presented a second time</td><td>an already consumed approval admits nothing</td></tr>
            </tbody>
          </table>

          <table anchor="tbl-wex-cross-org-approval-b" align="left">
            <name>Cross-org action with separate approval and one-time admission: new state, permitted next action, and evidence afterwards</name>
            <thead><tr><th align="left">Step</th><th align="left">New authority state</th><th align="left">Permitted next action</th><th align="left">Evidence afterwards</th></tr></thead>
            <tbody>
              <tr><td>1</td><td>restricted</td><td>obtain the certification</td><td>none inside APS</td></tr>
              <tr><td>2</td><td>restricted</td><td>seek a decision</td><td>the intent receipt</td></tr>
              <tr><td>3</td><td>approval exists and is unconsumed</td><td>present the approval at the boundary</td><td>the decision receipt and the resolved evidence reference</td></tr>
              <tr><td>4</td><td>approval consumed</td><td>dispatch the exact bound call</td><td>none durable</td></tr>
              <tr><td>5</td><td>unchanged</td><td>obtain a fresh decision</td><td>none</td></tr>
            </tbody>
          </table>

          <t>The cell marked illustrative deployment outcome is one deployment's
          outcome and not a rule of this document.
          <xref target="d2e-chain-validity"/> is informative and states no
          requirement.</t>

          <t>An offline verifier holding the intent, decision and result records,
          the chain and the decision evidence can conclude that the decision
          commits to the action, the evaluated authority state, the policy input,
          the decision context and the decision output, because the decision
          reference rebuilds from those and the record's own action reference. It
          can conclude that the decision's validity window closed strictly after
          the receipt was issued. It cannot conclude that the approval was
          consumed once, or consumed at all, because consumption is boundary state
          keyed by the approval's receipt_id and the approval-state axis is not
          established without access to it. It cannot conclude that the named
          official's certification was genuine unless the evidence reference for
          it resolves under the rules its artifact_type names, and a verifier that
          does not resolve evidence reports that axis as not attempted, which is
          indeterminate.</t>

          <t>Families. approval-single-use, 9 presentations and a declared
          defective fail set of 3. arap-binding, 12 denial-binding cases, 10
          approval cases and 5 enforcement-point fallback cases, candidates
          against an unmerged profile. receipt-decision-relation, 7 vectors.
          lifecycle-policy-change, 13 presentations.
          lifecycle-legal-regulatory-events, 44 vectors.</t>

          <t>What this example does not establish. It does not establish that the
          approval was consumed once, that the approver was a human, that the
          approver was distinct from the executing agent, or that the two
          organizations share a trust anchor. It states nothing about whether any
          legal rule about human agents applies here.</t>
        </section>

        <section anchor="wex-post-dispatch-unknown" numbered="true" toc="default">
          <name>A Post-Dispatch Unknown That Cannot Be Retried</name>
          <t>An approval is consumed, the boundary dispatches, and the target
          system returns nothing the boundary can classify. The connection drops
          after the request was accepted for processing. The boundary observed a
          dispatch and did not observe an outcome.</t>

          <t>The action-result record carries status unknown. For unknown, both
          effect_ref and error_code are null, because the boundary has no effect
          to digest and no stable failure identifier to name. That is the honest
          record. Writing status failed would assert a finding the boundary does
          not hold, and writing succeeded with an invented effect_ref would assert
          one it cannot ground.</t>

          <t>The approval is gone. Its receipt_id was atomically consumed at the
          admission point, so it cannot admit a second dispatch, and no rule in
          this document restores a consumed approval. A retry is a new action,
          needing a new intent, a new decision and a new admission, evaluated
          against current authority and current policy. Whether the operation
          should be retried at all is not an authority question. It depends on
          whether the effect is idempotent at the target, and two boundary cases
          record why that belongs to the target rather than to the delegation
          layer. LC-E-010 is an idempotency-key
          retry that returns the original result instead of re-executing.
          LC-E-011 is a reused key with changed
          parameters that errors outright rather than silently doing either
          thing.</t>

          <t>A valid grant can be unexecutable, which is
          <xref target="d2e-unexecutable"/>. Its verdict does not change when
          its target, its named executor or its named capability no longer
          resolves, and the unresolvable referent belongs in the record.
          LC-E-002 is that shape. Unexecutable is
          an execution outcome and not a verdict on the artifact.</t>

          <t>The trace below has six columns, split into two tables keyed by step so that each half fits the page width. Columns one to three are the state before the step, the artifact or event, and the verifier rule that applies. Columns four to six are the new authority state, the next action the state permits, and the evidence available afterwards.</t>

          <table anchor="tbl-wex-post-dispatch-unknown-a" align="left">
            <name>Post-dispatch unknown that cannot be retried: state before, event, and verifier rule</name>
            <thead><tr><th align="left">Step</th><th align="left">State before</th><th align="left">Artifact or event</th><th align="left">Verifier rule</th></tr></thead>
            <tbody>
              <tr><td>1</td><td>approval unconsumed</td><td>consumption at the enforcement boundary</td><td>single use, recheck, complete the reservation</td></tr>
              <tr><td>2</td><td>approval consumed</td><td>the call is handed to the effect adapter</td><td>holding the input does not establish that dispatch was attempted</td></tr>
              <tr><td>3</td><td>dispatched</td><td>action-result receipt, status unknown, effect reference and error code null</td><td>unknown is an outcome and not the absence of one</td></tr>
              <tr><td>4</td><td>unknown result held</td><td>no event</td><td>a reservation is released only before dispatch or on trusted evidence that dispatch did not occur</td></tr>
              <tr><td>5</td><td>unknown result held</td><td>a new action-intent receipt for the same effect</td><td>a further attempt is a new action needing a fresh authorization decision</td></tr>
              <tr><td>6</td><td>unknown result held</td><td>separately resolved evidence about the target system</td><td>an external effect is never inferred from the result record</td></tr>
            </tbody>
          </table>

          <table anchor="tbl-wex-post-dispatch-unknown-b" align="left">
            <name>Post-dispatch unknown that cannot be retried: new state, permitted next action, and evidence afterwards</name>
            <thead><tr><th align="left">Step</th><th align="left">New authority state</th><th align="left">Permitted next action</th><th align="left">Evidence afterwards</th></tr></thead>
            <tbody>
              <tr><td>1</td><td>approval consumed</td><td>dispatch the exact bound call</td><td>none durable</td></tr>
              <tr><td>2</td><td>unchanged</td><td>wait for a result</td><td>none until a result</td></tr>
              <tr><td>3</td><td>unchanged</td><td>none follows automatically</td><td>the three records</td></tr>
              <tr><td>4</td><td>the reservation stays outstanding</td><td>obtain settlement evidence</td><td>boundary ledger state only</td></tr>
              <tr><td>5</td><td>unchanged</td><td>a fresh decision if policy admits one</td><td>the new intent receipt</td></tr>
              <tr><td>6</td><td>unchanged, the external-effect axis moves for the claim the evidence supports</td><td>settle or compensate</td><td>the resolved evidence</td></tr>
            </tbody>
          </table>

          <t>An offline verifier holding the three receipts can conclude that the
          result commits to the decision the boundary consumed, because the
          result's decision reference equals that decision's and
          <xref target="receipt-verification"/> step 8 recomputes it. Predecessor
          continuity is not established. Each record's prev names its predecessor,
          and neither <xref target="action-result"/> nor
          <xref target="receipt-verification"/> step 9 requires a verifier to
          resolve prev or to report a failure where it does not match, which
          <xref target="oq-held"/> records as held. It can conclude that the
          boundary recorded an unknown outcome at a stated time. It cannot
          conclude whether the external effect occurred, because status unknown
          records the absence of an observation rather than the absence of an
          effect, and these are not the same. It cannot conclude that the effect
          did not occur. It cannot conclude what the grant was used for over its
          whole valid window from the fact that the grant is valid, which is
          LC-D-025. It cannot read an empty
          window in an evidence store as proof that nothing happened in it, which
          is LC-F-027. Resolving the outcome
          needs separately resolved evidence about the external system, and until
          that resolves the outcome stays not established with the missing source
          named, as <xref target="d2e-not-established"/> states.</t>

          <t>Families. action-result-binding, 6 cases.
          receipt-decision-relation, 7 vectors.
          runtime-authority-denial-continuity, 9 cases.
          lifecycle-evidence-and-record, 12 cases.
          lifecycle-infrastructure-failure, 30 cases.</t>

          <t>What this example does not establish. It does not establish whether
          the effect occurred, it does not establish that a retry is safe, and it
          does not establish that the boundary's own observation was complete.</t>
        </section>
        </section>
    </section>

    <section anchor="institutional-governance-v2" numbered="true" toc="default">
      <name>Institutional Governance as an Authority-Source Model</name>
      <t>This section is informative. Where a rule it describes is normative, the
      rule is stated in the section this text cites, and naming a fixture family
      sets the normative status of nothing. It describes how an organization's own
      authority structures reach the delegation layer this document specifies. It
      does not specify wire formats, lifecycle or semantics for those structures. A
      profile has to define each projection and each containment check before
      monotonic narrowing can be checked across an institutional structure.</t>

      <section anchor="ig-v2-objects" numbered="true" toc="default">
      <name>Charter, Office, Holder, Root Authority Basis, Delegation, Action</name>
        <t>Six objects, each constraining the next.</t>
        <t>A charter is the instrument that bounds what an organization may
        authorize. An office is a named position that carries standing authority
        under a charter. A holder is the party occupying an office over a stated
        window. A root authority basis is what a verifier accepts as the head of a
        chain for one action. It takes one of three forms: an APS root delegation
        whose parent identifier is null, authority imported from outside APS under
        an importing profile, or a trust anchor the verifier's own policy accepts.
        Under an institutional model the first form is the ordinary one, issued
        under an office's authority, and it is where the delegation layer begins.
        Accepting a basis does not establish which principal the authority
        represents, which is a separate and currently unanswered question at
        <xref target="oq-principal-authority"/>. This document defines no object
        for the step from a principal to a first authority, and nothing in this
        section depends on one. A delegation is one narrowing hop. An action is
        what an enforcement boundary decides.</t>
        <t>The holder is not the office and the office is not the charter. Three
        findings that an implementation will be tempted to merge stay apart. Whether
        a party currently holds an office. Whether the office carries the authority
        the grant claims. Whether the charter permits the office to carry it.</t>
      </section>

      <section anchor="ig-v2-projection" numbered="true" toc="default">
      <name>Monotonic Projection</name>
        <t>An institutional layer reaches the delegation layer by projecting its
        authority into the faceted authority vector of
        <xref target="faceted-attenuation"/> and applying the component orders at
        each layer. A charter constrains offices, an office constrains delegations,
        and a delegation constrains actions. Authority decreases at each transfer
        point and never increases.</t>
        <t>A projection is lossy where the institutional layer carries a dimension
        the vector has no facet for. A profile states what it dropped rather than
        widening a facet to absorb it, and an unprojectable dimension makes the
        projection unsupported rather than silently absent. A profile that invents a
        facet value the institutional instrument does not supply has widened
        authority at the projection, which is the failure this subsection names.</t>
        <t>This subsection is informative and states no requirement. No family in
        this suite exercises the projection itself, which is a fact about the
        corpus and not the reason. The component
        orders and the containment check a projection would have to satisfy are
        already specified in <xref target="core-invariants"/>, and no released
        package projects an institutional instrument into the authority vector.</t>
      </section>

      <section anchor="ig-v2-departure" numbered="true" toc="default">
      <name>Departure and Succession</name>
        <t>A holder leaving an office is an external event. It is not a revocation,
        and it does not by itself remove a dependency, re-parent authority or create
        replacement authority. Whether a grant issued under an office survives the
        departure of the individual who signed it is a question the governing
        authority model answers. Models differ, and this document does not choose
        between them.</t>
        <t>Where the delegation is bound to an office, turnover moves it and the new
        occupant exercises it with nothing reissued. Where it is bound to an
        identity, turnover does not move it and the new occupant needs a fresh
        chain. Where the terms declare neither and the actor is not the named
        subject, the binding mode is not established and a verifier does not supply
        a default in either direction.</t>
        <t>A successor does not inherit the predecessor's delegation tree. The
        successor's grant covers what the successor issues, and a descendant whose
        ancestor artifact was revoked stays invalid until a party with current
        authority reissues it. A departure is not a revocation, and where the
        delegation is bound to the office the turnover moves it with nothing
        reissued. This is the rule an implementation gets wrong most often,
        because inheriting the tree is the behaviour that keeps an organization
        running and it is the behaviour that silently restores revoked authority.</t>
        <t>Informative. This subsection states no requirement, so it carries no
        status block and no requirement identifier. Related families:
        lifecycle-root-authority-succession, lifecycle-principal-events,
        lifecycle-organization-events, lifecycle-fiduciary-succession. Related
        implementation: chain verification in
        agent-passport-system 7.2.0 (TypeScript) and agent-passport-system 4.2.0
        (Python). Office-holder records, vacancy records and binding mode are no
        released package.</t>
      </section>

      <section anchor="ig-v2-handover" numbered="true" toc="default">
      <name>Handover</name>
        <t>A handover replaces the party responsible for an agent while the agent
        keeps its identity. The agent continues. Its old authority does not survive
        revocation of the ancestor it depended on, and the replacement chain stands
        on its own because it was independently issued. A handover may require the
        incoming holder's acknowledgment, with authority staying with the outgoing
        holder until that acknowledgment arrives, rather than an instant at which
        one party's authority ends and another's begins.</t>
        <t>Ordering is a deployment choice. A planned handover may accept a short
        overlap. A compromised holder may call for revoking first and accepting a
        gap. In both cases the old chain must not remain the basis for continuity,
        and at the next authorization boundary after revocation the old grant
        authorizes no new effect.</t>
        <t>Informative. This subsection states no requirement, so it carries no
        status block and no requirement identifier. Related families:
        sponsor-handover, lifecycle-organization-events. Related implementation:
        chain verification in
        agent-passport-system 7.2.0 (TypeScript) and agent-passport-system 4.2.0
        (Python). Acknowledgment-gated handover is no released package.</t>
      </section>

      <section anchor="ig-v2-break-glass" numbered="true" toc="default">
      <name>Break-Glass</name>
        <t>A party outside the principal-agent relationship can hold standing to
        replace authority it never issued. A body appointed over the principal, a
        neutral forum holding a disputed root, or a collective body acting under its
        own composition rule are three shapes of this. Such a party issues a
        replacement grant on terms it supplies. It does not revive the terminated
        grant and it does not re-parent the old chain, so the replacement is new
        authority with its own scope and its own record. In this revision such a
        party ends the dependent authority by revoking its own ancestor grant where
        it holds one, or through a suspension cause under
        <xref target="lifecycle-suspension"/>.
        <xref target="revocation-cascade"/> names only the issuer for a direct
        revocation, and direct revocation by a party other than the issuer is open
        at <xref target="oq-non-issuer-revocation"/>.</t>
        <t>A collective body's own composition is a precondition for the validity of
        what it issued. Without the declared composition there is no body action to
        evaluate, which is a different finding from a defective but real action.</t>
        <t>Where a root is disputed and held by a neutral forum, its state is
        neither valid nor invalid. A verifier reports not established and does not
        pick a claimant.</t>
        <t>Informative. This subsection states no requirement, so it carries no
        status block and no requirement identifier. Related families:
        lifecycle-outside-the-chain-standing, lifecycle-fiduciary-succession. No
        released package resolves standing held from outside the chain.</t>
      </section>

      <section anchor="ig-v2-re-root" numbered="true" toc="default">
      <name>Re-Rooting</name>
        <t>Informative. Replacing the trust root an organization's chains descend
        from changes which issuers a verifier accepts, which is a change to verifier
        trust policy rather than a lifecycle event on any artifact. A verifier can
        stop trusting an issuer with nothing revoked anywhere. No artifact changes
        and no revocation occurs. A verifier that no longer accepts the old root
        returns the result <xref target="chain-verification"/> gives for a root a
        trust policy does not accept, which is invalid with a root-trust reason at
        the root's index. That is one verifier's finding under its own policy at
        one moment, and a verifier that still accepts the root returns valid on the
        same bytes. Those are two different statements and a record must not merge
        them.</t>
        <t>No family in this suite exercises re-rooting, and no released package
        implements it, so this document states no rule for it. A deployment that
        re-roots has to decide, and record, whether artifacts under the old root are
        reissued, carried by a cross-signature, or left to expire.</t>
      </section>

      <section anchor="ig-v2-limits" numbered="true" toc="default">
      <name>What This Section Does Not Establish</name>
        <t>It specifies no institutional wire format, no charter record, no office
        record and no holder registry. It does not say who publishes an
        office-holder registry or how a verifier comes to accept one. It does not
        resolve office vacancy, and it does not bound what an outgoing holder may
        sign before leaving. It makes no claim that a doctrine of human agency law,
        corporate law or fiduciary law applies to an AI agent. Those bodies of
        material are a source of case shapes for the questions above and nothing
        more. Where a case in this document derives from such material, it is a
        source of the question, never a source of the rule.</t>
      </section>
    </section>

    <section anchor="protocol-bindings" numbered="true" toc="default">
      <name>Protocol Bindings</name>
      <section anchor="mcp-binding" numbered="true" toc="default">
        <name>MCP Binding</name>
        <t>APS specifies a binding to MCP <xref target="MCP" format="default"/>.  For this binding, an
enforcement gateway mediates the privileged actions selected by
deployment policy.  A privileged action is any action the policy
chain (<xref target="policy-chain"/>) is configured to evaluate, including any action
whose required scope is non-empty under the Scope rules of
<xref target="component-orders"/>.  In an APS-mediated MCP deployment, privileged actions
covered by APS policy MUST pass through the gateway, which validates
the delegation chain, evaluates the policy chain, and generates
signed receipts.  In deployments where the gateway is the exclusive
holder of the target API credentials, the agent cannot bypass the
gateway for those privileged actions; this exclusivity is a
deployment precondition of the kind <xref target="security-considerations"/> describes, not an
unconditional property of the binding.</t>
      </section>
      <section anchor="other-bindings" numbered="true" toc="default">
        <name>Other Bindings</name>
                <t>This document does not specify an A2A binding.  <xref target="oauth-jag-binding"/>
specifies a binding for OAuth identity-assertion authorization
grants.  Other protocol bindings are not specified here.</t>
      </section>

      <section anchor="oauth-jag-binding" numbered="true" toc="default">
        <name>OAuth Identity-Assertion Grant Binding</name>
        <t>Deployments in which an agent's authority originates from an
        enterprise authorization system need the delegation chain to
        begin from that system's grant rather than from an APS-native
        passport. This section specifies the binding for an OAuth
        identity-assertion authorization grant <xref
        target="OAUTH-ID-JAG"/>, pinned to an identified draft version
        of that specification.</t>
        <t>The binding is verifier-first: the importing party verifies the
        external grant by that specification's own rules before any APS
        structure is built, and APS records the verification rather than
        performing it. The record of verification is a caller-signed
        attestation, an accountability artifact naming the grant
        reference and the verification time under the importing party's
        own key, so that the party on the hook for the verification is
        identifiable. The binding does not re-verify the grant, and a
        binding result is never collapsed to a single safe-for-execution
        boolean; it reports what was projected and under what basis.</t>
        <t>Two anchors are kept separate and MUST NOT be merged. The source
        grant reference is a digest over a committed preimage of the
        grant's provenance fields, its issuer, subject, grant identity,
        client, and audience, and never covers scope, spend, chain
        content, or receipt content. The delegation chain root is the
        canonical content digest over the APS-signed hops built under
        the imported grant. The first identifies where authority came
        from; the second identifies what was built under it; conflating
        them makes chain content unrecomputable from the records.</t>
        <t>Scope projection from the external grant into the APS Scope
        dimension is lossy, and the binding preserves the grant's
        authorization details verbatim alongside the projection rather
        than pretending the projection is complete. A spend dimension MUST NOT be invented at
import: because AuthorityDelegationV1 requires all seven facets, an
external grant that carries no spend semantics cannot be projected
into a conforming chain root unless an importing profile supplies an
explicit spend basis accepted by verifier policy; otherwise the
projection is unsupported. The grant's audience is carried in the binding but not
        enforced by it; the relying party at the point of use MUST
        reject an audience mismatch.</t>
      </section>

      <section anchor="adapter-contracts" numbered="true" toc="default">
        <name>Adapter Contracts</name>

        <t>An adapter carries APS authority into another protocol's request, or
        carries another protocol's authority into an APS chain. Five things can
        fail to survive that trip: the principal on whose behalf the action is
        taken, the exact action, the authority epoch the decision was made in, the
        purpose bound the grant carries, and the evidence the grant requires before
        the action is admitted. This section states what an adapter must do about a
        dimension that has no carrier on the far side, and then records, per target
        protocol, which dimensions survive and which do not.</t>

        <t>The general shape of the failure is silent widening. An adapter that
        drops a dimension and emits a request the far side reads as unconstrained
        has produced authority the APS side never granted. Recording the loss is
        what keeps it visible.</t>

        <t>Every binding below fills one loss model, and the model has six values.
        <strong>Preserved exactly</strong>, the target representation carries the
        semantic with no change. <strong>Transformed with equivalent
        semantics</strong>, the representation differs and the set of actions
        admitted does not. <strong>Narrowed</strong>, the target representation
        admits a strict subset of what the APS side admits.
        <strong>Omitted and irrelevant to the operation</strong>, the semantic has
        no carrier and the adapter has established that the operation does not
        depend on it. <strong>Not representable</strong>, the semantic has no
        carrier and the operation does depend on it.
        <strong>Externally resolved</strong>, the semantic crosses as a reference
        and the far side resolves it under rules this document does not state.</t>

        <t>Loss of a semantic required by the target operation or by the applicable
        profile prevents a valid result. Explicit narrowing may remain valid where
        the target representation preserves the narrowed semantics. Omission of a
        semantic established as irrelevant to the operation does not by itself
        prevent validity. A profile states, for each APS semantic, which of the six
        values applies to it, as <xref target="profile-required-content"/>
        requires.</t>

        <section anchor="adapter-general-rules" numbered="true" toc="default">
          <name>What an Adapter Must Do With a Dimension It Cannot Carry</name>

          <t>An adapter MUST NOT produce a target-side authority that admits an
          action the APS authority it was built from does not admit.</t>

          <t>Where an APS dimension has no carrier in the target representation,
          the adapter MUST record that dimension as unsupported, and MUST NOT emit
          a value that a target-side evaluator reads as the dimension being
          satisfied. An unsupported dimension and a satisfied dimension are
          different findings and a verifier reports them differently.</t>

          <t>An attribute carried across by any transcription scheme satisfies a
          target-side predicate only when the target-side authority independently
          permits the action. Transcribing an attribute never supplies a scope, an
          audience or an actor the target-side authority does not have.</t>

          <t>Where the adapter re-expresses the action in the target's own terms,
          the action reference MUST be recomputed from the adapter's own payload
          rather than copied from the source record, and a mismatch MUST fail
          closed.</t>

          <t>Where an adapter carries a commitment that names a stage of a
          pipeline, a commitment made at one stage MUST NOT satisfy a check at
          another stage, and a stage name outside the closed set MUST fail rather
          than default to any member of the set.</t>

          <t>An adapter that maps an APS record into another stack's signed
          envelope MUST state the canonicalization it applies, and MUST NOT assume
          byte agreement with another implementation of the same canonicalization
          rule. Agreement on the rule and agreement on the bytes are separate
          facts.</t>

          <t>This subsection does not establish that any released adapter satisfies
          these rules across its whole surface, and it does not establish a complete
          list of dimensions. It names five dimensions that the corpus behind this
          document repeatedly showed being lost.</t>

          <t>Requirements. APS-ADAPT-NO-WIDENING, an adapter produces no
          target-side authority that admits an action the APS authority it was built
          from does not admit. APS-ADAPT-NO-SILENT-SEMANTIC-LOSS, a dimension with
          no carrier in the target representation is recorded as unsupported and no
          value is emitted that a target-side evaluator reads as the dimension being
          satisfied. APS-ADAPT-RECOMPUTE-ACTION-REF, where the adapter re-expresses
          the action, the action reference is recomputed from the adapter's own
          payload rather than copied, and a mismatch fails closed.
          APS-ADAPT-STAGE-COMMITMENT, a commitment made at one stage does not
          satisfy a check at another, and a stage name outside the closed set fails
          rather than defaulting. APS-ADAPT-CANONICALIZATION-STATED, an adapter
          states the canonicalization it applies and does not assume byte agreement
          with another implementation of the same rule.
          APS-ADAPT-STAGE-COMMITMENT is exercised by
          k8s-receipt-admission-stage-negatives, whose five candidate vectors reject
          a cross-stage digest, a mismatched stage kind and an unknown stage name.
          The other four are specified, not exercised.</t>

          <t>Status: Candidate feature. Normative for an implementation claiming this feature, not a requirement of APS Core conformance. Related fixture families:
          cross-stack, 11 sub-families at the pinned commit. actionref-canonical, 6
          vectors. k8s-receipt-admission-stage-negatives, 5 vectors.
          canonical-bytes, 10 vectors. Exercised requirements: APS-ADAPT-STAGE-COMMITMENT. Implemented requirements: APS-ADAPT-RECOMPUTE-ACTION-REF. Related implementation surfaces: agent-passport-system 7.2.0
          (npm) for the adapter surfaces, and agent-passport-system 4.2.0 (PyPI) for
          the action reference forms only.</t>
        </section>

        <section anchor="adapter-mcp" numbered="true" toc="default">
          <name>Model Context Protocol</name>

          <t>MCP <xref target="MCP"/> carries a tool name and an arguments object.
          The exact action survives, because a name and an arguments object are
          enough to recompute an action reference over the adapter's own payload.
          Nothing else on this list has a carrier defined by the base protocol. The
          principal, the authority epoch, the purpose bound and the required
          evidence are unsupported unless a profile assigns them keys in the
          <tt>_meta</tt> object, which the specification describes as the general
          extension point: "The <tt>_meta</tt> property/parameter is used by MCP to
          allow clients and servers to attach additional metadata to their
          interactions."</t>

          <t>An adapter that assigns <tt>_meta</tt> keys carries a further
          obligation that is described in <xref
          target="gateway-extension-processors"/>: the component that checks the
          request and the component that runs it may not receive the same bytes.</t>

          <t>The requirement that privileged actions pass through the boundary,
          stated in <xref target="mcp-binding"/>, has no fixture in the
          conformance suite. The suite's coverage inventory records it as not
          exercised, since no vector asserts which actions were routed through a
          boundary. It is
          restated here as a deployment precondition and not as an exercised
          requirement.</t>

          <t>Loss model. Exact action: preserved exactly, because the tool name and
          the arguments object are enough to recompute an action reference over the
          adapter's own payload. Principal, authority epoch, purpose bound and
          required evidence: not representable in the base protocol, and preserved
          only where a profile assigns them keys in the extension object, in which
          case they are externally resolved by whatever holds that profile.</t>

          <t>This subsection does not establish that a profile assigning
          <tt>_meta</tt> keys is interoperable with any other profile doing the
          same, and it does not establish that an MCP server honours a governance
          key it does not recognise.</t>

          <t>Requirement. APS-ADAPT-MCP-EXTENSION-DECLARED, an adapter that
          assigns extension-object keys for APS material states which keys it uses
          and does not rely on a server honouring a key it does not recognise.
          Specified, not exercised.</t>

          <t>Status: Candidate feature. Normative for an implementation claiming this feature, not a requirement of APS Core conformance. Related fixture families:
          cross-stack (mcp-audit-gateway-v0.6). actionref-canonical, 6 vectors.
          Implemented requirements: none. Related implementation surfaces: agent-passport-system 7.2.0 (npm).</t>
        </section>

        <section anchor="adapter-a2a" numbered="true" toc="default">
          <name>Agent2Agent</name>

          <t>This document specifies no A2A <xref target="A2A"/> binding. An Agent
          Card describes an agent and its skills. It is not an authority record and
          it names no action, so none of the five dimensions crosses at the card
          layer. An adapter that derives APS scope strings from card skills is
          deriving a vocabulary and not importing authority. Signing a card
          establishes who published the description, which is a narrower fact than
          it looks. <xref target="a2a-card-signing"/> records what reproducing that
          signature across two implementations showed.</t>

          <t>Loss model. Not applicable. An Agent Card is not an authority record
          and names no action, so none of the five dimensions has a source value to
          carry and no cell of the model can be filled.</t>

          <t>This subsection is informative. It does not establish that a signed
          Agent Card conveys any authority, and it does not establish that skills
          declared on a card correspond to actions the agent is authorized to
          take.</t>
        </section>

        <section anchor="adapter-oauth-idjag" numbered="true" toc="default">
          <name>OAuth Identity-Assertion Authorization Grant</name>

          <t>The OAuth identity-assertion grant binding of this document imports a
          caller-verified grant. Of the five dimensions, the principal survives
          as the grant's subject. The exact action does not cross: the grant is
          about access to an audience and a set of scopes, not about one call with
          its arguments, so the exact action is constructed on the APS side after
          import and is never imported.</t>

          <t>The acting party is indeterminate rather than unsupported, which is a
          distinction worth keeping. <xref target="OAUTH-ID-JAG"/> carries an actor
          token parameter and then declines to say what it means: "This
          specification does not define normative processing requirements for
          actor_token or whether an act claim is included in the issued ID-JAG."
          An importer therefore cannot read an actor claim as establishing who
          acted. The reference implementation reconciles the claim against the
          chain leaf literally and marks the result advisory rather than
          authoritative, which is the correct handling of a field whose processing
          the source specification leaves open.</t>

          <t>The authority epoch, the purpose bound and any required-evidence
          condition have no carrier in the grant and are unsupported on import. The
          spend dimension is the case where the rule is already stated normatively
          elsewhere in this document: a spend basis MUST NOT be invented at import,
          and an external grant carrying no spend semantics yields an unsupported
          projection unless an importing profile supplies an explicit basis that
          verifier policy accepts. Scope projection is lossy, so the binding keeps
          the grant's authorization details verbatim beside the projection.</t>

          <t>The audience is the one dimension that crosses and then has to be
          enforced somewhere else. It is carried in the binding and not enforced by
          it, and the relying party at the point of use rejects a mismatch. The
          conformance corpus exercises that rule, and it exercises it on a
          different object: the vectors are an RFC 8693 <xref target="RFC8693"/>
          token exchange, where an evaluation of the exchanged token denies with
          the family's <tt>audience_mismatch</tt> reason at the point of use. No
          fixture in the corpus carries an identity-assertion grant. The rule is
          exercised, the object is not, and the status block below says so.</t>

          <t>The same family pins the attenuation property that the general rules
          above state abstractly. A widening exchange is an invalid vector that a
          runner must refuse to evaluate rather than a case with a deny answer, an
          evaluation of the exchanged token reads only claims present on it, and an
          attribute transcribed from the subject token satisfies a predicate only
          where the exchanged token's own scope, audience and actor conditions
          independently permit the action.</t>

          <t>Loss model. Principal: preserved exactly, as the grant's subject.
          Audience: preserved exactly in the binding and enforced externally at the
          point of use. Exact action: not representable, and constructed on the APS
          side after import rather than imported. Acting party: externally resolved,
          and the source specification declines to say what its actor token means,
          so an importer reads no actor claim as establishing who acted. Authority
          epoch, purpose bound and required evidence: not representable. Spend: not
          representable, and a spend basis is never invented at import, so the
          projection is unsupported unless an importing profile supplies an explicit
          basis that verifier policy accepts.</t>

          <t>This subsection does not establish that an identity-assertion grant
          has been imported by any tested implementation, and it does not establish
          that the separation of the source grant reference from the delegation
          chain root has a fixture. The suite's coverage inventory records that
          separation as not exercised.</t>

          <t>Requirement. APS-ADAPT-NO-INVENTED-SPEND-BASIS, a spend basis is not
          invented at import, and an external grant carrying no spend semantics
          yields an unsupported projection unless an importing profile supplies an
          explicit basis that verifier policy accepts. This restates a requirement
          of <xref target="oauth-jag-binding"/> and adds nothing to it. Specified,
          not exercised: the suite's coverage inventory records the corresponding
          requirement as partial and its vectors are an RFC 8693 token exchange
          rather than an identity-assertion grant.</t>

          <t>Status: Candidate feature. Normative for an implementation claiming
          this feature, not a requirement of APS Core conformance. Its one
          requirement identifier is an exception:
          APS-ADAPT-NO-INVENTED-SPEND-BASIS restates a requirement of
          <xref target="oauth-jag-binding"/> in the closed core, and
          <xref target="requirement-matrix"/> carries it as a Core restatement
          rather than as part of this feature. Related fixture families:
          cross-stack (token-exchange-attenuation-v0), 12 cases, on an RFC 8693
          token exchange rather than on an identity-assertion grant. Implemented requirements: APS-ADAPT-NO-INVENTED-SPEND-BASIS. Related implementation surfaces:
          agent-passport-system 7.2.0 (npm).</t>
        </section>

        <section anchor="adapter-authzen" numbered="true" toc="default">
          <name>Authorization API</name>

          <t>Loss model. Verdict: narrowed to the point of loss in the outward
          direction, because a three-valued verdict collapses onto a boolean and
          collapsing narrow to true widens the decision. Constraints, effective
          authority reference, expiry and single-use semantics: not representable in
          the decision object. Inward, a decision obtained through that API is an
          input to admission and not an APS policy-decision record.</t>

          <t>This subsection is informative. No fixture family in the conformance
          corpus exercises a mapping to or from the Authorization API, so nothing
          here is stated as a requirement.</t>

          <t>The direction that matters is inward, and it is narrow. An Authorization
          API decision <xref target="AUTHZEN"/> is a boolean with optional context:
          "Decision is an object that contains a REQUIRED <tt>decision</tt> key with
          a <tt>boolean</tt> value, and an OPTIONAL <tt>context</tt> key with an
          object value." An APS policy-decision record is not that shape. It carries
          a three-valued verdict, the constraints a narrow verdict imposes, a
          reference to the exact effective authority admitted, an expiry, and
          single-use semantics at the next authorization boundary. None of those
          four has a defined carrier in the decision object, so a decision obtained
          through that API is an input to admission and not an APS
          policy-decision record. Treating it as one would supply an approval with
          no expiry, no binding to an exact action, and no consumption point.</t>

          <t>Outward, an APS verdict maps onto the boolean with loss. A narrow
          verdict and its constraints have nowhere to go, and collapsing narrow to
          true widens the decision.</t>

          <t>This subsection does not establish that any implementation performs
          this mapping, and it does not establish what a profile that assigned the
          missing fields to the optional context object would have to specify.</t>
        </section>

        <section anchor="adapter-wimse" numbered="true" toc="default">
          <name>Workload and Agent Identity Credentials</name>

          <t>Loss model. Not applicable in either direction. There is no credential
          format on the far side of this adapter, so no APS semantic has a carrier
          to be measured against and no cell of the model can be filled.</t>

          <t>This subsection is informative. No fixture family exercises a mapping
          to a WIMSE credential format, and there is a plain reason for that: <xref
          target="WIMSE-XORG"/> is a problem statement, and it says so in its own
          abstract, "It does not specify a solution." There is no credential format
          on the far side of this adapter yet, so there is nothing to map into and
          no requirement to state.</t>

          <t>What that document does carry is a requirement list, and one of its
          requirements is the admission rule this document arrives at from the
          evidence side. It requires evidence "bound to the specific action,
          including its arguments, its target resource, and the on-behalf-of
          principal", relied on at most once, and it requires that an unrecognized
          designation be treated as unauthorized: "A relying party that does not
          recognize a designation MUST treat the designated action as
          unauthorized." The convergence is worth recording. It is not adoption and
          it is not a claim that either document influenced the other.</t>

          <t>This subsection does not establish that APS satisfies any requirement
          in that list, and it does not establish that a future credential format in
          that space will carry any of the five dimensions.</t>
        </section>

        <section anchor="adapter-scitt" numbered="true" toc="default">
          <name>Transparency Service Carriage</name>

          <t>Loss model. All five dimensions: preserved exactly, because the record
          travels whole rather than being re-expressed. Signer authority: externally
          resolved, and registration establishes nothing about it.</t>

          <t>This subsection is informative. No fixture family exercises carriage of
          an APS record as a signed statement to a transparency service, so nothing
          here is stated as a requirement.</t>

          <t>Carriage preserves all five dimensions, because the record travels
          whole rather than being re-expressed. What carriage adds is inclusion
          evidence, and what it does not add is anything about the signer's
          authority to make the statement. <xref target="RFC9943"/> states the limit
          directly: "Issuers can make false Statements either intentionally or
          unintentionally; registering a Statement only proves it was produced by an
          Issuer."</t>

          <t>That maps exactly onto the separation this document already keeps
          between cryptographic integrity, signer authority and external truth. A
          receipt from a transparency service raises confidence that a record was
          registered and has not been altered since. It moves nothing on the
          authority question. An adapter that presents a transparency receipt as
          evidence of authority has crossed the two axes.</t>

          <t>This subsection does not establish that any APS record has been
          registered with a transparency service, and it does not establish a
          mapping from the APS receipt envelope described in <xref
          target="receipt-envelope"/> into a COSE signed statement.</t>
        </section>
      </section>

      <!-- ==================== FRAGMENT (c), part 1 ==================== -->

      <section anchor="a2a-card-signing" numbered="true" toc="default">
        <name>A2A Agent Card Signing</name>

        <t>This section is informative. It records a cross-implementation failure
        class that two independent signing implementations of the same specification
        reached, and what the canonicalization vectors in the conformance corpus do
        and do not cover against it.</t>

        <t>The failure class sits above the canonicalization algorithm. Two
        implementations can both apply <xref target="RFC8785"/> correctly, byte for
        byte, and still fail to check each other's signatures, because one of them
        removed a field the other signed. Canonicalization pins the bytes for a
        given document. It says nothing about which document you had.</t>

        <section anchor="a2a-card-observed" numbered="true" toc="default">
          <name>What Was Observed</name>

          <t>The A2A specification requires a card to be canonicalized under <xref
          target="RFC8785"/> before signing, and it states a field-presence rule that
          runs first. Fetched from the specification repository on 2026-09-24 at
          commit <tt>43e0c874d3baba68ed84b98678d7f2268438e69f</tt>, section 8.4.1:
          "Fields marked with <tt>REQUIRED</tt> MUST always be present, even if the
          field value matches the default."</t>

          <t>Two implementations of that rule diverge in opposite directions, and
          each divergence originates in its own language's object-to-JSON mapping
          rather than in its canonicalizer. Reproduced locally on 2026-09-23 against
          a2a-go pull request 441 at commit
          <tt>bb750f5c7913b967d8dcbe3d24537a8a84dd1a61</tt> and a2a-python at commit
          <tt>f3ac82489dd84ce9dcd3802357cb4e987ffdbb74</tt>, using only each
          implementation's own public construction, serialization and signing
          interfaces and one shared Ed25519 key. Six single-field cases were built
          on an otherwise identical card. Of the six, three failed one direction:
          an explicitly empty description, an explicitly empty skills list, and an
          explicitly empty tags list on the first skill. In each of the three the Go
          side kept the field in the bytes it signed and the Python side rebuilt the
          card from those bytes for verification, dropping the field again, and
          verified a different payload than the one that was signed. The card was
          never altered in transit. The reverse direction passed on all six, and the
          control case with no empty or default values produced byte-identical
          canonical payloads on both sides.</t>

          <t>The pull request was open at the time of that run. Fetched on
          2026-09-24, it is merged, and the maintainer's response to the report
          reads the same way this document does about where the divergence sits:
          "This is unfortunate, but python behaviour is not spec-compliant
          here."</t>

          <t>A report of the Python side of the divergence was filed by this
          document's author as issue 1278 on the a2a-python repository. Fetched on
          2026-09-24, it is open, and its title names the class: "Signing/verification
          canonicalization drops REQUIRED fields at their default value, breaks
          cross-SDK Agent Card signature verification." The later merge and the
          earlier reproduction are separate records. The merge does not rewrite what
          was observed at the earlier commits.</t>

          <t>This subsection does not establish that either implementation is
          defective in general, that the divergence affects deployments in practice,
          or that the merged state of the Go pull request changes the Python side.
          It records six cases at three named commits.</t>
        </section>

        <section anchor="a2a-card-coverage" numbered="true" toc="default">
          <name>What the APS Canonical-Bytes Vectors Cover</name>

          <t>The canonical-bytes family pins the byte contract of <xref
          target="RFC8785"/> across implementations. Ten vectors, each naming the
          rule it exercises, cover the places a canonicalizer diverges without
          meaning to: the decimal-to-exponential threshold and how the exponent is
          spelled, negative zero, integers above the exactly-representable range and
          above signed 64-bit range, key ordering by UTF-16 code unit rather than
          code point, keys used exactly as given without Unicode normalization, and
          recursive sorting with array order preserved. The family runs the same ten
          vectors through four canonicalizers in four languages and publishes where
          the bytes and the digests agree or differ. A result there is a byte diff
          on ten cases and not a verdict on any implementation.</t>

          <t>Running those ten vectors through the Go implementation's
          canonicalization entry points on 2026-09-23 produced ten matches under
          both decode paths, twenty comparisons in total. The same run against the
          A2A project's own canonicalization corpus separated two further findings
          that are worth keeping apart from the field-presence class: three of the
          eight scorable must-reject vectors were rejected, and five unpaired
          surrogate vectors were not, because the decoder substitutes the
          replacement character rather than refusing. That is a decode-layer
          finding, upstream of canonicalization.</t>

          <t>The actionref-canonical family covers the adjacent APS-native property,
          where the action reference is a digest over the canonicalization of a
          fixed four-field tuple with each scope normalized to NFC and the scope
          array sorted by code point. Its vectors include the case where code-point
          order and code-unit order disagree, and two negatives on duplicate scopes,
          one raw and one that collides only after normalization.</t>

          <t>Neither family covers the failure class above. Both take a document and
          pin its bytes. Whether a field was in the document is decided before
          either family's first vector runs, and no vector in either family asserts
          field presence against a schema's required-field rule. Stating that gap is
          the point of this subsection.</t>

          <t>This subsection does not establish that a passing canonical-bytes run
          means two implementations will verify each other's signatures.</t>
        </section>
      </section>

      <!-- ==================== FRAGMENT (c), part 2 ==================== -->
      <section anchor="gateway-extension-processors" numbered="true" toc="default">
        <name>Gateway Extension Processors</name>

        <t>This section is informative. It records one seam that an adapter carrying
        APS material through a third-party MCP gateway has to account for, and it is
        the concrete case behind the obligation named in <xref
        target="adapter-mcp"/>.</t>

        <t>An MCP-aware gateway can call out to an external processor before
        forwarding a call, so that the processor can allow, deny or rewrite it. In
        one such interface, fetched on 2026-09-24 at commit
        <tt>25702c3b561a0bc2130da75427e3debbd5b13918</tt>, the field carrying the
        call to the processor is described as "JSON-RPC <tt>params</tt> as raw JSON
        bytes; absent when the method has none", and the rewrite result is described
        as replacing those same params, with the note that "The gateway does not
        re-run other RBAC on the mutated request."</t>

        <t>The seam is that the bytes the processor sees and the bytes the tool sees
        are not the same bytes. A local reproduction on 2026-09-23, against that
        same commit with a stub processor and a hand-written upstream server that
        logs its raw input, sent one tool call whose params carried a
        <tt>_meta</tt> member. The three captured surfaces are below, verbatim from
        that run. A backslash at the end of a line is a continuation inserted here
        to fit the page width and is not part of the captured bytes. First, the
        client's exact request body:</t>

        <artwork type="application/json"><![CDATA[
      {"jsonrpc":"2.0","id":2,"method":"tools/call","params":\
      {"name":"echo","arguments":{"x":1},"_meta":{"probe":1}}}
      ]]></artwork>

        <t>what the external processor received as the call under check:</t>

        <artwork type="application/json"><![CDATA[
      {"name":"echo","arguments":{"x":1}}
      ]]></artwork>

        <t>and what the upstream server received on its own input:</t>

        <artwork type="application/json"><![CDATA[
      {"jsonrpc":"2.0","id":2,"method":"tools/call","params":\
      {"_meta":{"probe":1},"name":"echo","arguments":{"x":1}}}
      ]]></artwork>

        <t>The <tt>_meta</tt> member reached the tool and did not reach the check.
        For an adapter that carries a passport reference, a delegation reference or
        an approval reference in <tt>_meta</tt>, that is the whole problem: the
        component asked to decide cannot see the material the decision depends on,
        and the component that runs the call can. An adapter in this position
        either carries its material where the processor can see it, or treats the
        processor as unable to decide and denies rather than defaulting.</t>

        <t>The interface also rewrites. A processor that replaces the params has
        changed the exact action, and the gateway does not re-run its other access
        checks on the replacement. An adapter that recomputes the action reference
        after a rewrite gets a different value than one computed before it, which is
        the general recomputation rule in <xref target="adapter-general-rules"/>
        applied to a specific seam.</t>

        <t>This section does not establish that this behaviour holds at any other
        commit of that gateway, that other MCP gateways behave the same way, or that
        the behaviour is a defect. It records what one pinned build did with one
        call on one date. It also does not establish what a profile assigning
        <tt>_meta</tt> keys for APS material should do about it, which stays open.</t>
      </section>
    </section>

    <section anchor="gateway-reference-architecture" numbered="true" toc="default">
      <name>Enforcement Gateway Reference Architecture</name>

      <t>This section is informative. It describes one arrangement of an
      enforcement boundary that runs the checks this document specifies, taken
      from the open-source Agent Passport Gateway. It is a description, not a
      conformance target. An implementation that arranges these functions
      differently is not for that reason non-conforming, and nothing in this
      section adds a requirement to the ones stated elsewhere in this document.
      Deployment topology, network interfaces and operator configuration are out
      of scope here.</t>

      <t>This section does not establish that any deployment is arranged this
      way, that the described arrangement is safe, or that the reference
      implementation is free of defects.</t>

      <section anchor="gw-judge-and-executor" numbered="true" toc="default">
        <name>Judge and Executor</name>

        <t>In this arrangement the boundary both decides and performs. The acting
        agent sends a signed request naming a tool and its arguments. The boundary
        evaluates the request, calls the target itself, and writes the record of
        what happened. The agent never constructs that record. The reference
        implementation states the reason in its own source: without the boundary
        holding execution, the library is optional and the agent can route around
        it.</t>

        <t>A policy decision point may be a separate service. Only the
        enforcement boundary admits an action to dispatch. Where a decision point
        is separate, it computes the decision and the boundary is the issuer of
        the aps:policy-decision:v1 record that carries it, as
        <xref target="policy-decision"/> requires. Approval consumption, the
        reservation, dispatch and the external effect are four steps and are not
        one atomic transaction in this revision. A verdict arriving from a separate decision point is an input to
        admission, in the same class as a revocation answer or a freshness answer,
        and it is not itself admission. The Authorization API <xref
        target="AUTHZEN"/> draws the same line from the other side, placing the
        decision point's internals outside its own scope: "The policy language,
        architecture, and state management aspects of a PDP are beyond the scope
        of this specification." Its response object is correspondingly thin: "Decision
        is an object that contains a REQUIRED <tt>decision</tt> key with a
        <tt>boolean</tt> value, and an OPTIONAL <tt>context</tt> key with an object
        value."</t>

        <t>The arrangement assumes there is no alternate privileged credential
        path to the same target. If the target accepts a credential the agent holds
        directly, the boundary governs one path and the other path is ungoverned.
        The MCP binding in this document already states that exclusivity as a
        deployment precondition rather than a property of the binding. The
        assumption is load bearing and it is worth naming plainly: an APS record
        establishes that a governed path was valid, and it does not establish that
        no ungoverned path existed. A verifier that cannot establish that the
        boundary implements the grant's declared scope reports the wider reachable
        scope or reports that the narrower scope is not established.</t>

        <t>This subsection does not establish that the boundary is the only path
        to the target, and it does not establish that a separate decision point
        and the boundary evaluated the same inputs.</t>
      </section>

      <section anchor="gw-admission" numbered="true" toc="default">
        <name>Admission, Consumption, Reservation and Settlement</name>

        <t>The boundary checks before the effect, not only before the approval.
        In the reference implementation the order at the next authorization
        boundary after an approval is: confirm the approval is unconsumed and
        unexpired, confirm the agent and the delegation still exist, recheck
        revocation and status against current state rather than the state read at
        approval time, recheck the governance version the approval was granted
        under, recheck any cross-context permit that the approval relied on,
        recheck the authority tier against the current reputation state, mark the
        approval consumed, and only then call the target.</t>

        <t>Consumption is atomic against concurrency and not only against
        sequence. The reference implementation serialises execution per agent and
        re-tests the consumed flag inside the serialised section, because the test
        that runs before the lock lets two concurrent calls on the same approval
        both pass it and both reach the tool.</t>

        <t>Where a budget must be held rather than spent, the boundary reserves.
        A hold is checked against the delegation's limit less the sum of live
        holds before it is granted, and it is released on fulfilment or on
        expiry. Where the budget is spent at admission instead, the reference
        implementation increments the used amount inside the same transaction
        that records the permit, so a permit and its charge cannot come apart.</t>

        <t>Settlement comes after the result. Settlement records are assembled
        from recorded contributions over a closed period. They are not produced at
        admission and they are not an input to it.</t>

        <t>The cross-organizational delegation requirements in <xref
        target="WIMSE-XORG"/> state the same ordering as a requirement on any
        solution in that space: "Consumption of the reliance unit occurs only upon
        admission: evaluation, exact-action matching, and refusal at any stage
        MUST NOT consume it".</t>

        <t>Two things are worth separating here, because the ordering above is
        one implementation's and the obligation is this document's. The protocol
        requirement is the one stated at <xref target="policy-decision"/> and
        <xref target="two-phase-execution"/>: at the moment the approval is
        consumed to admit dispatch, the boundary verifies the approval has not
        expired, atomically consumes its identity, rechecks time and revocation
        state, and completes any spend reservation. This document requires no
        particular order among the other checks the reference implementation runs,
        and it requires none of them. It also does not make consumption,
        reservation, dispatch and the external effect one atomic transaction, and
        <xref target="d2e-retry-contract"/> states what that leaves to a
        deployment.</t>

        <t>This subsection does not establish that a reservation released on
        failure was released before any external effect, and it does not establish
        what happens to work already in flight when authority changes during
        execution.</t>
      </section>

      <section anchor="gw-evidence" numbered="true" toc="default">
        <name>Evidence the Boundary Produces</name>

        <t>What the reference implementation does. A denial and a permit both
        produce a record, so a refusal is evidence rather than an absence of it.
        The implementation signs the denial record under the boundary's own key.
        For a permit it stores what its own source calls a permit record, with a
        content hash and no signature. That object is not a receipt in the sense
        of <xref target="receipt-envelope"/>, it is not an
        aps:policy-decision:v1 record, and this document names no such object.
        The implementation's source gives its reason directly: a denial is signed
        as proof of restraint, a permit is treated as routine. The structural
        reading is that a refusal leaves no other artifact anywhere, so a record
        nobody signed is the only trace it has, while a permitted action goes on
        to produce a separately signed result record at the next stage.</t>

        <t>What this document requires, separately. The boundary records the
        policy decision, permit, narrow or deny. That record is not evidence of
        admission (<xref target="distinctions"/>,
        <xref target="oq-admission-record"/>).
        <xref target="policy-decision"/> defines the signed
        policy-decision record and makes the boundary its issuer, for permit,
        narrow and deny alike. This document states no requirement about an
        additional internal permit object, defines no wire shape for one, and
        places no signing obligation on one, because it defines no such object at
        all. An implementation that keeps one is keeping deployment state, not
        producing an APS record.</t>

        <t>The cost of that choice belongs beside the choice. An unsigned permit
        record is not attributable to the boundary by a third party. It can be checked for integrity against its own hash by a party who
        already trusts the store that holds it, and that is a different and weaker
        property. A deployment that needs a permit to be presentable as
        boundary-attributable evidence has to sign permits too.</t>

        <t>This subsection does not establish that the store holding an unsigned
        permit record is honest, and it does not establish that a signed denial
        record was the only decision reached for that action. It does not
        establish that the reference implementation's permit record and the
        policy-decision record of this document are the same object, and they are
        not.</t>
      </section>

      <section anchor="gw-ancestor-revocation" numbered="true" toc="default">
        <name>Ancestor Revocation at the Boundary</name>

        <t>At each authorization boundary the reference implementation walks the
        bound chain of the delegation it selected, following each record's stored
        parent link rather than re-resolving whatever parent is current. A revoked
        or suspended member anywhere on that walk ends the leaf's authority, up to
        and including the terminal grantor, even when the leaf's own record still
        reads as active. The walk fails closed, so a leaf whose bound chain is
        dead is denied even where some other chain the same agent holds would
        still be live. This is the boundary-side form of the core invariant that
        a chain is rejected when any member is revoked, stated in <xref
        target="core-invariants"/>.</t>

        <t>The same walk runs a second time inside the write transaction when a
        new delegation is granted under an existing one, because the first read
        happens outside the lock and a revocation can commit between the two.</t>

        <t>Enumerating descendants is a reporting and cleanup tool in this
        arrangement. It is not what makes a chain-verifiable descendant invalid.
        Where a credential carries no chain a verifier can walk, such as an opaque
        bearer token, an issuer-side revocation mechanism is still needed.</t>

        <t>This subsection does not establish that revocation state was fresh at
        the moment of the walk, and it does not establish that a credential issued
        outside the chain was reached at all.</t>
      </section>

      <section anchor="gw-not-done" numbered="true" toc="default">
        <name>What the Gateway Does Not Do</name>

        <t>It does not decide truth about the world outside it. It records what it
        evaluated and what the target returned. Whether the external effect
        matched the returned result is a separate finding with separate
        evidence.</t>

        <t>It does not classify content and it does not judge whether an action
        was a good idea. A permitted action is an action the presented authority
        and the configured policy admitted.</t>

        <t>Settings that identify an operator are reconciliation and not a
        revocation mechanism. Removing such a setting later does not remove a role
        already held.</t>

        <t>Blast-radius preview before a revocation is read-only. It changes
        nothing and it is not a revocation.</t>

        <t>It is not a transparency service. On its own it gives no third party
        the ability to detect that it presented different histories to different
        parties. The reference implementation's own research notes list an
        append-only log with consistency proofs, and separating the receipt signer
        from the executor, as directions rather than as present behaviour.</t>

        <t>This subsection does not establish a complete list. It names the limits
        that the corpus behind this document repeatedly turned up.</t>
      </section>
    </section>

    <!-- ==================== FRAGMENT (b) ==================== -->

    <section anchor="conformance" numbered="true" toc="default">
      <name>Conformance</name>

      <t>An implementation of this document is not one thing. A party that issues
      delegations, a party that verifies them, a party that admits actions at the
      boundary and a party that reads receipts have different obligations, and an
      implementation that does all four is rare. This section defines the classes a
      claim is made in, the identifiers a claim cites, the form of the claim, and
      the three results an implementation reports per vector.</t>

      <t>The executable corpus this section refers to is the APS conformance suite
      <xref target="APS-CONFORMANCE"/>, which is work by this document's author.
      Nothing in this section is a statement that any implementation has passed
      anything, and the corpus issues no verdicts.</t>

      <section anchor="conformance-classes" numbered="true" toc="default">
        <name>Conformance Classes</name>

        <t>An implementation claims conformance in one or more of the following
        classes. A claim MUST name its classes. An implementation MUST NOT claim a
        class whose obligations it does not implement, and MUST NOT present a claim
        in one class as covering another.</t>

        <dl newline="false" spacing="normal">
          <dt>Authority issuer.</dt>
          <dd>Mints delegation records. Verifies the parent signature and temporal
          validity before signing a child, refuses to issue under an expired,
          not-yet-valid or revoked parent, and never issues a record whose
          invalidity is left for a later verifier to find. Related fixture families:
          issuance-refusal-expiry, lifecycle-conferral-without-authority.</dd>

          <dt>Delegation verifier.</dt>
          <dd>Reads a root-to-leaf chain and returns valid, invalid, indeterminate
          or unsupported. Applies the component orders, selects one chain per
          action, takes no union across chains, resolves keys at the artifact's own
          issuance time, and never collapses indeterminate or unsupported into
          valid. Related fixture families: chain-selection-no-union, single-chain-selection,
          key-rotation-historical, ancestor-revocation-chain and
          revocation-resolution-forward-compat.</dd>

          <dt>Lifecycle and status verifier.</dt>
          <dd>Answers what is currently established about an authority whose
          records are unchanged but whose surroundings have moved. Reads status
          sources with a stated freshness, reports a conflict between sources
          rather than picking one silently, and distinguishes an answer that is
          false from one that is not established. Related fixture families:
          conflicting-status-sources, authority-epoch-rollback,
          activation-not-established, suspension-cause-composition,
          cached-authorization-revocation and the lifecycle families named in
          <xref target="requirement-matrix"/>.</dd>

          <dt>Receipt verifier.</dt>
          <dd>Recomputes a receipt identifier before verifying any signature,
          checks the stage and its closed result object, resolves referenced
          evidence or reports it unresolved, and reports cryptographic integrity,
          signer authority, referenced-artifact resolution and policy semantics on
          separate axes. Related fixture families: accountability-record,
          receipt-decision-relation, action-result-binding, read-fidelity-receipt,
          merkle-root-parity and instruction-provenance.</dd>

          <dt>Enforcement boundary.</dt>
          <dd>The next authorization boundary an action reaches after a decision.
          Re-validates what can have changed since the decision was issued,
          consumes a single-use approval atomically, reserves spend against every
          bounded ancestor, and refuses an approval that is expired, already
          consumed, or terminal. Related fixture families: approval-single-use,
          runtime-authority-denial-continuity. The corpus records the remaining
          boundary obligations as untested in receipt-decision-relation's own
          verifier header.</dd>

          <dt>Profile implementation.</dt>
          <dd>Holds a profile as defined in <xref target="profile-required-content"/>
          and supplies its constructions to the classes above. Reports a record
          naming a profile it does not hold as unsupported. Related fixture families:
          key-rotation-historical, capability-binding-drift, each of which
          defines its own test profile and says so.</dd>

          <dt>Protocol adapter.</dt>
          <dd>Carries APS records or concepts over another protocol. Records, for
          every concept, whether it survives the mapping, becomes unsupported, or
          becomes not established, and never widens a concept silently to fit the
          external construct. Related fixture families: arap-binding and the cross-stack
          families.</dd>
        </dl>

        <t>A requirement identifier applies to one or more of these classes,
        through its area. The table below maps each area of
        <xref target="conformance-identifiers"/> to the classes in which a
        requirement carrying that area is mandatory for a Core requirement and
        claimable for a Candidate one. Three areas carry no identifier in this
        revision and are listed for completeness of the taxonomy.</t>

        <table anchor="tbl-area-class" align="left">
          <name>Identifier area to conformance class</name>
          <thead>
            <tr><th align="left">Area</th><th align="left">Classes</th></tr>
          </thead>
          <tbody>
            <tr><td>ID</td><td>delegation verifier, receipt verifier. No identifier in this revision</td></tr>
            <tr><td>PRIN</td><td>lifecycle and status verifier</td></tr>
            <tr><td>AUTH</td><td>delegation verifier</td></tr>
            <tr><td>LC</td><td>lifecycle and status verifier</td></tr>
            <tr><td>POL</td><td>enforcement boundary. No identifier in this revision</td></tr>
            <tr><td>ENF</td><td>enforcement boundary</td></tr>
            <tr><td>REC</td><td>authority issuer, receipt verifier</td></tr>
            <tr><td>EVID</td><td>receipt verifier, lifecycle and status verifier</td></tr>
            <tr><td>PROF</td><td>profile implementation</td></tr>
            <tr><td>ADAPT</td><td>protocol adapter</td></tr>
            <tr><td>GOV</td><td>no class in this revision, and no identifier</td></tr>
            <tr><td>CONF</td><td>every class, in whichever classes the claim names</td></tr>
          </tbody>
        </table>

        <t>The classes are not a maturity ladder and are not ordered. An
        implementation in one class is not a partial implementation of another. A
        Core requirement outside every class an implementation claims is not an
        obligation on that implementation, and a claim that omits a class is not a
        claim that the class was met.</t>

        <t>What this subsection does not establish. It does not establish that the
        seven classes partition the obligations of this document without gap or
        overlap, that a family named against a class covers that class, or that
        passing every family named against a class makes an implementation
        conforming in it. The families named are the ones that reach some
        obligation of the class, and the coverage each reaches is recorded in
        <xref target="requirement-matrix"/>.</t>

        <t>Requirement. APS-CONF-CLASS-NAMED, a claim names its classes, an
        implementation does not claim a class whose obligations it does not
        implement, and a claim in one class is not presented as covering another.
        Specified, not exercised.</t>

        <t>Status: Core, document requirement, specified, not exercised.
        APS-CONF-CLASS-NAMED binds every conformance claim made under this
        document, in every class, and is not gated by a feature a claimant can
        decline. It is a requirement on a claim document rather than a runtime
        check a verifier performs, of the same kind as the profile requirements of
        <xref target="profile-required-content"/>, so no runtime vector reaches it
        and a static claim fixture is needed before it is recorded as exercised.
        A claim is the one artifact whose form this document fixes for every
        claimant, because a claim that need not name its classes cannot be read at
        all. Related fixture families: issuance-refusal-expiry,
        lifecycle-conferral-without-authority, chain-selection-no-union,
        single-chain-selection, key-rotation-historical,
        ancestor-revocation-chain, revocation-resolution-forward-compat,
        conflicting-status-sources, authority-epoch-rollback,
        activation-not-established, suspension-cause-composition,
        cached-authorization-revocation, accountability-record,
        receipt-decision-relation, action-result-binding, read-fidelity-receipt,
        merkle-root-parity, instruction-provenance, approval-single-use,
        runtime-authority-denial-continuity, capability-binding-drift,
        arap-binding, cross-stack. Implemented requirements: none. Related implementation surfaces: agent-passport-system 7.2.0 (npm)
        and agent-passport-system 4.2.0 (PyPI) for the authority issuer,
        delegation verifier and receipt verifier classes. No released package for
        the enforcement boundary, the profile implementation or the protocol
        adapter classes.</t>
      </section>

      <section anchor="conformance-identifiers" numbered="true" toc="default">
        <name>Requirement Identifiers</name>

        <t>This subsection is informative. It describes the identifier scheme this
        document uses, so that a claim can cite a requirement without quoting
        it.</t>

        <t>A requirement identifier has the form APS-&lt;AREA&gt;-&lt;SEMANTIC-SLUG&gt;.
        The area is one of twelve fixed values: ID, PRIN, AUTH, LC, POL, ENF, REC,
        EVID, PROF, ADAPT, GOV and CONF. The slug names the proposition the
        requirement states, in uppercase words joined by hyphens. An identifier
        names what a requirement says rather than where it sits, so it never
        changes because a section moves, and it is never reused. Renumbering this
        document moves no identifier, and an identifier retired with its
        requirement stays retired.</t>

        <t>Five identifiers from <xref target="requirement-matrix"/> show the
        shape: APS-PRIN-SILENCE-NOT-CONSENT, APS-AUTH-CHAIN-NO-UNION,
        APS-LC-NO-RESURRECTION, APS-ENF-COMPLETE-AT-ADMISSION and
        APS-EVID-EFFECT-NOT-FROM-RESULT. Each reads as a proposition, which is
        what makes it citable without the surrounding text.</t>

        <t>Each identifier belongs to a conformance class through its area, under
        the map in <xref target="conformance-classes"/>, and a claim cites an
        identifier in the class it applies to.</t>

        <t><xref target="requirement-matrix"/> is the sole authority for which
        requirements an exact vector exercises. It records one of two coverage
        states per requirement. Exercised means a named vector plus a runner
        assertion that fails when the requirement is violated. Specified, not
        exercised means no such vector exists, whatever related fixture material
        does exist. A requirement whose violation no input produces is specified
        and not exercised even where a validator carries the check, because a check
        no input reaches is not coverage.</t>

        <t>The conformance suite's own inventory identifiers for
        draft-pidlisnyi-aps-03 appear in this document in
        <xref target="req-id-map"/> and nowhere else. They are section-derived and
        bound to that revision, and they are reproduced there as a legacy mapping
        rather than as a scheme a claim against this revision uses.</t>

        <t>What this subsection does not establish. It does not establish that the
        identifiers cover every obligation of this document, since an obligation
        stated across two sentences, or stated in the closed core with no
        restating subsection, carries no identifier. It does not establish that a
        fully exercised matrix would mean an implementation is correct.</t>

        <t>This subsection is informative and carries no requirement
        identifier.</t>
      </section>

      <section anchor="conformance-labels" numbered="true" toc="default">
        <name>Core and Candidate</name>

        <t>Every normative subsection of this document outside the closed core
        carries a status of Core or Candidate.</t>

        <t>Two places are outside that scheme. The BCP 14 sentences carried from
        -03 in <xref target="security-considerations"/> and
        <xref target="privacy"/> are closed-core carryover. They
        keep the force they had in -03, they carry no status block and no
        requirement identifier, and <xref target="requirement-matrix"/> does not
        list them, because that appendix records what this revision states
        outside the closed core.</t>

        <t>Core means the requirement is mandatory for an implementation claiming
        the conformance class to which the requirement applies, under the
        area-to-class map in <xref target="conformance-classes"/>. Candidate means
        the requirement belongs to an opt-in feature. A Candidate requirement is
        normative for an implementation that claims that feature and is not a
        requirement of APS Core conformance. Candidate is not weaker normative
        language and not a lower grade of Core, and it is not a promise that the
        requirement will become Core.</t>

        <t>A claim therefore names the classes it claims and the Candidate
        features it claims, in the form "APS Core in the named classes, plus named
        features", and <xref target="conformance-claim"/> states what else a claim
        carries. Lifecycle Core is an informative grouping name and not a
        claimable base. It names the propositions in
        <xref target="authority-lifecycle"/> that restate a requirement of the
        closed core, carried by six requirement identifiers drawn from six of the
        twelve continuity rules. L1 is in it whole. One identifier each comes from
        L3, for irreversibility, from L5, for one chain per action with no union,
        from L6, for the recheck at the moment of consumption, from L7, for an
        unknown revocation state not being active, and from L9, for historical key
        selection with its issuer-claim timestamp and indeterminate signing
        instant. <xref target="authority-lifecycle"/> lists the six with the core
        sections they restate. Everything else in that section, including the rest
        of L3, L5, L6, L7 and L9, is one or more Candidate features.</t>

        <t>The Candidate features an implementation can claim in this revision
        are: the revocation record format of
        <xref target="revocation-record-format"/>, the evidence model of
        <xref target="admissibility"/> and <xref target="evidence-model"/>, the
        profile model of <xref target="profile-model"/>, the lifecycle continuity
        rules outside Lifecycle Core together with the material in L3, L5, L6, L7
        and L9 outside their Core propositions, each lifecycle mechanism of
        <xref target="lifecycle-mechanisms"/> named as its own feature, the
        decision-to-effect model of <xref target="decision-to-effect"/>, the
        adapter contracts of <xref target="adapter-contracts"/>, and the
        per-vector result vocabulary of <xref target="conformance-results"/>. A
        claim that names no feature is a claim of APS Core alone.</t>

        <t>The claim rules of <xref target="conformance-classes"/> and
        <xref target="conformance-claim"/> are not a Candidate feature. They bind
        every claim made under this document, whatever classes and features the
        claim names, because they are the form in which a claim is legible rather
        than a behavior an implementation opts into. They are document
        requirements of the same kind as
        <xref target="profile-required-content"/> states for a profile, so no
        runtime vector reaches them and
        <xref target="requirement-matrix"/> marks all three specified and not
        exercised.</t>

        <t>The corpus carries its own label with a similar name and a narrower
        meaning. A family labelled candidate_against_proposed states that a
        runnable case exists against proposed text at one commit of one repository.
        That label is a statement about the family, and this document's Candidate
        is a statement about a requirement. The two are recorded separately and
        neither implies the other. The corpus itself records that the label
        spelling is not yet uniform across families and that two families carry the
        shorter spelling on their per-vector records while stating the longer one
        at the family level.</t>

        <t>What this subsection does not establish. It does not establish that a
        Candidate requirement is correct, that the boundary between Core and
        Candidate is drawn the same way by any other document, or that a family
        passing means the rule it tests is the right rule. A pass establishes that a
        boundary implementing the stated reading reaches a stated verdict on stated
        bytes.</t>

        <t>This subsection is informative and carries no requirement
        identifier.</t>
      </section>

      <section anchor="conformance-claim" numbered="true" toc="default">
        <name>Conformance Claims</name>

        <t>A claim is APS Core in the classes it names, plus the Candidate
        features it names. It carries no other base.</t>

        <t>The requirements in this subsection bind a claim document. Like the
        profile requirements of <xref target="profile-required-content"/>, they are
        not runtime checks and no vector exercises them.</t>

        <t>A conformance claim MUST state all of the following.</t>

        <dl newline="false" spacing="normal">
          <dt>Implementation.</dt>
          <dd>The name of what was tested and enough of a reference to fetch
          exactly that, which means a repository and commit, or a package and
          version.</dd>

          <dt>Classes.</dt>
          <dd>The classes of <xref target="conformance-classes"/> claimed, and no
          others.</dd>

          <dt>Requirements.</dt>
          <dd>The requirement identifiers claimed, each under the semantic scheme
          of <xref target="conformance-identifiers"/>. An identifier does not move
          between revisions, so a claim names the revision it was tested against
          for the text of each requirement rather than to resolve the
          identifier.</dd>

          <dt>Corpus.</dt>
          <dd>The tag or commit of the corpus run against.</dd>

          <dt>Per-vector results.</dt>
          <dd>One result per vector under <xref target="conformance-results"/>, not
          a summary and not a percentage.</dd>

          <dt>Commands and output.</dt>
          <dd>The commands run and their output, uncut.</dd>

          <dt>Environment.</dt>
          <dd>Language, runtime version and operating system.</dd>

          <dt>Who ran it.</dt>
          <dd>The party that ran it, and whether that party authored the vectors,
          the claim inputs, or the implementation whose output supplies the
          recomputation. A claim MUST NOT be presented as independent where any of
          those three is the claiming party's own work.</dd>

          <dt>Profiles.</dt>
          <dd>Every profile the implementation holds, by identifier and version.</dd>
        </dl>

        <t>A claim MUST NOT be stated as a verdict issued by this document, by the
        corpus, or by any party other than the claimant. A claim is a record of what
        one party observed on stated inputs. A later claim by another party is
        appended as a new record and does not alter or replace an earlier one, and
        a later finding does not rewrite what an earlier record states.</t>

        <t>What this subsection does not establish. It does not establish that a
        complete claim is correct, that a claim covering every requirement means the
        implementation is safe, or that any registry of claims exists. It does not
        define a machine-readable claim format.</t>

        <t>Requirements. APS-CONF-CLAIM-CONTENT, a claim states every item in
        the list above. APS-CONF-CLAIM-NOT-VERDICT, a claim is not stated as a
        verdict issued by this document, by the corpus, or by any party other than
        the claimant, and a later claim is appended as a new record rather than
        replacing an earlier one. Both are specified, not exercised, and no fixture
        exists for a requirement on a claim document.</t>

        <t>Status: Core, document requirement, specified, not exercised.
        APS-CONF-CLAIM-CONTENT and APS-CONF-CLAIM-NOT-VERDICT bind a claim
        document and not a runtime verifier, so no runtime vector reaches them. A
        static claim fixture is required before either is recorded as exercised,
        and none exists. Related fixture families: none. Implemented requirements:
        none. Related implementation surfaces: no released package.</t>
      </section>

      <section anchor="conformance-results" numbered="true" toc="default">
        <name>Per-Vector Results</name>

        <t>An implementation reports one of exactly three results per vector.</t>

        <dl newline="false" spacing="normal">
          <dt>pass</dt>
          <dd>The implementation reached the vector's declared outcome. For a
          negative vector this means the implementation rejected the input for the
          reason the vector declares, not merely that it rejected the input.</dd>

          <dt>fail</dt>
          <dd>The implementation reached a different outcome, or reached the
          declared outcome for a different reason.</dd>

          <dt>not_supported</dt>
          <dd>The implementation has no surface on which the vector's question can
          be asked. The concept the vector exercises is absent from the
          implementation, so there is nothing to run and nothing to reject.</dd>
        </dl>

        <t>An implementation MUST NOT report not_supported as pass, and MUST NOT
        report a vector it did not run at all. not_supported and fail are different
        findings. A fail says the implementation answered and was wrong. A
        not_supported says it could not be asked.</t>

        <t>A count of not_supported results MUST NOT be presented as a coverage
        score, a completeness percentage, or a comparison between implementations.
        The reason is arithmetic rather than editorial. The unit a family records
        differs by family, because the question differs. Some families record one
        row per named claim, some one row per verification layer, some a count of
        reachable exports, and some commit no per-vector record at all and print it
        on demand. Rows from different units do not add, and a total over them is an
        artifact of how each family chose to write its record. A family's own record
        is authoritative for that family and for nothing else.</t>

        <t>A not_supported result is also not a defect report about the package it
        names. It states what a fixture could and could not get from a published
        package at a pinned version, which is a statement about that package's
        surface at that version.</t>

        <t>What this subsection does not establish. It does not establish that the
        three results are exhaustive for every verification model, that the
        boundary between fail and not_supported is unambiguous in every case, or
        that two implementations reporting the same tallies are equally correct. It
        does not establish any suite-wide number.</t>

        <t>Requirements. APS-CONF-THREE-RESULTS, an implementation reports one
        of exactly three results per vector, reports no not_supported as pass, and
        reports no vector it did not run. APS-CONF-NOT-SUPPORTED-NOT-SCORE, a
        count of not_supported results is not presented as a coverage score, a
        completeness percentage, or a comparison between implementations. Both are
        specified, not exercised.</t>

        <t>Status: Candidate feature. Normative for an implementation claiming this feature, not a requirement of APS Core conformance. Related fixture families:
        activation-not-established, lifecycle-credential-events, lifecycle-multiple-principals-and-conflict,
        lifecycle-outside-the-chain-standing, lifecycle-legal-regulatory-events,
        lifecycle-identifier-reuse-and-rename, lifecycle-principal-events.
        Implemented requirements: none. Related implementation surfaces: agent-passport-system 7.2.0 (npm) and agent-passport-system
        4.2.0 (PyPI) are the packages whose surface those families probe. No
        released package emits a per-vector result record.</t>
      </section>

      <section anchor="conformance-limits" numbered="true" toc="default">
        <name>What a Passing Run Does Not Establish</name>

        <t>This subsection is informative.</t>

        <t>A passing run does not establish a rule. It establishes that a boundary
        implementing the reading under test reaches a stated verdict on stated
        bytes, and that the named defective boundaries diverge on exactly their
        declared sets.</t>

        <t>It does not establish that the reading under test is the correct one. For
        a Candidate requirement the reading is this document's, and a family that
        runs it does not confirm it.</t>

        <t>It does not establish that the reference runners are independent
        implementations. Both were written for the corpus by this document's
        author.</t>

        <t>It does not establish liability or any accountability outcome. Where a
        family touches an accountability record, that family states its own limit.</t>

        <t>It does not establish that any legal doctrine applies to AI agents. The
        corpus uses scenarios drawn from how institutions handle authority as a
        source of cases, and each family that does so says so. A case is a source of
        a test, never a source of a rule.</t>

        <t>It does not establish adoption, endorsement or production use by any
        party whose artifacts the corpus carries. Admission of an external family
        means the vectors were deterministic, in scope and correctly labelled.</t>

        <t>This subsection is informative and carries no requirement
        identifier.</t>
      </section>
    </section>

    <section anchor="related-work" numbered="true" toc="default">
      <name>Related Work</name>
      <t>Several independent efforts, contemporaneous with this document's revisions,
      have specified adjacent primitives. This section situates them. None is
      normative here, and the mappings below are informative. Documents are
      cited by their series name and revision, which is how documents sharing
      a title are distinguished. A document that had expired at the time of
      writing is marked as expired where it is cited, and is retained as prior
      art rather than dropped.</t>
      <t>PEDIGREE <xref target="PEDIGREE"/> specifies signed JWT delegation chains for
      workload and agentic identity, with per-parent mandate narrowing: it requires each
      hop's scopes to be a subset of the immediate parent's, limits token lifetime to the
      parent's remaining lifetime, and checks chain depth against the parent chain.
      This is the same narrowing-only rule as the Core Invariants of
      <xref target="core-invariants"/>; PEDIGREE applies it to scope, lifetime, and depth,
      while APS applies it across the seven constraint dimensions of <xref target="faceted-attenuation"/>. APS also
      differs in binding the narrowing evidence into signed
      receipts at each transfer point and in the gateway two-phase execution model, where
      admissibility is evaluated and evidenced before dispatch.</t>

      <t>A family of OAuth drafts specifies multi-hop agent delegation natively in
      that ecosystem. <xref target="OAUTH-CHAIN-DEL"/> defines the delegation_chain
      JWT claim as a companion to the act claim of RFC 8693, on the stated grounds
      that act carries actor identity but not the authorization constraints applied
      at each hop and is constructed by the Authorization Server without
      confirmation from the delegating party. The claim is an ordered array of
      delegation records, each carrying the Authorization Server's attestation and,
      where present, delegated policy constraints and the delegator's cryptographic
      confirmation; the attestation and confirmation signatures are computed over an
      RFC 8785 canonicalization of a named field set. Delegated scope is required to
      be a subset of the delegator's, and scope expansion across a domain boundary is
      not permitted. A companion draft <xref target="OAUTH-AUTHZ-EV"/> defines an
      authorization details type under Rich Authorization Requests carrying signed evidence of user confirmation and an audit trail: the evidence object is embedded in JWT access tokens and retrieved by reference when opaque tokens are used, and the draft recommends that Resource Servers log evidence information for audit purposes. These specify delegation lineage and consent evidence as OAuth token content, evaluated by Authorization Servers and Resource Servers; APS specifies standalone signed records evaluated at an enforcement point at the time of the action, and separately signs the pre-dispatch admission decision and the post-dispatch outcome as artifacts distinct from the authorization event. The revocation models differ in mechanism: <xref target="OAUTH-CHAIN-DEL" format="default"/> makes
descendants of a revoked root invalid by rule, with Resource Servers
required to confirm the root authorization remains valid at the time
of use, while APS keeps the authority result for a chain separate from
the state of the evidence recording a revocation's processing, so that
cascade evidence, where produced, records processing without being
what makes a descendant chain invalid (<xref target="revocation-evidence"/>).</t>

      <t>The same author set frames these as parts of one flow. An integration
      framework <xref target="OAUTH-INTEGRATION"/> combines cross-domain
      identity, policy-based authorization, user-consent evidence, and
      multi-hop delegation into one authorization framework for agents acting
      on behalf of users, and <xref target="OAUTH-REGO"/> supplies its policy
      layer in Rego. The Rego draft draws the audit boundary in its own terms,
      distinguishing the behaviors a policy permits from evidence of the
      behaviors actually performed; it recommends that Resource Servers record
      the policy identifier, a hash or summary of the evaluated input, the
      result, and the timestamp. The signed admission and outcome records of
      this document specify one form of such a record.</t>

      <t>A further cluster of individual proposals works the same problem from
      the actor claim of <xref target="RFC8693"/>, which expresses that
      delegation has occurred and identifies the acting party to whom
      authority has been delegated. <xref target="OAUTH-ACTOR-CHAIN"/>
      defines six actor-chain profiles for Token Exchange on the stated
      ground that the claim permits nested prior actors but defines no
      interoperable rules for preserving, extending, disclosing and
      validating a delegation path across successive exchanges, and its
      verified profiles add actor-signed step proofs with cumulative
      commitment state. <xref target="OAUTH-ACTOR-PROFILE"/> profiles the
      same claim differently, extending it with a sub_profile member for
      entity-type classification across JWT assertion grants, JWT access
      tokens and transaction tokens, and states that the policies deciding
      whether a given actor may act for a subject stay deployment-specific.
      <xref target="OAUTH-REQ-DEL-CHAIN"/> moves the question earlier,
      carrying a signed authorization request delegation chain as an
      authorization_details object under Rich Authorization Requests
      <xref target="RFC9396"/> so that an upstream Authorization Server can
      apply policy to the visible delegation path before it issues a token.
      None of the three is a working group document, and they have not
      converged on one representation. APS is not a token profile: it
      specifies standalone signed records evaluated at an enforcement point,
      and <xref target="oauth-jag-binding"/> defines the single OAuth grant binding this document
      carries.</t>

      <t>Closest of that cluster to <xref target="revocation-evidence"/> is
      <xref target="OAUTH-REVOC-CLOSURE"/>, which starts from the
      observation that invalidating a credential does not establish that
      every path from the revoked authority to a consequential effect has
      been closed. It models authority as a directed graph and holds a
      revocation cut set valid only if every declared path from the revoked
      root to a consequential sink intersects it, and it requires that where
      an implementation cannot establish that the revoked authority can no
      longer create authority-bearing edges bypassing that cut set, closure
      is reported as unknown, partial or failed rather than closed. It
      defines no encoding for the resulting closure receipt. This document
      approaches the same question from the record side. Both bound what a
      record may assert by the coverage its emitter declares. That draft
      requires a closure claim to identify the enforcement scope it applies
      to and not to imply closure of unknown or out-of-scope systems, and
      <xref target="revocation-evidence"/> requires a party emitting a cascade-completion record to
      be able to state the basis on which the processed set was
      complete.</t>

      <t>A best-practices framework <xref target="AIMS"/> maps deployed
      standards onto agent interactions: it applies the OAuth 2.0 family and the
      WIMSE workload identity architecture to agent authentication and
      authorization, states that rather than defining new protocols it
      describes how existing and widely deployed standards can be applied or
      extended, and identifies gaps to guide future standardization. Its
      policy model and document format are declared out of scope and are not
      recommended there as a target for standardization. The framework was
      adopted by the WIMSE working group after this document's previous
      revision, where it is titled AI Identity Management System and defines
      the term Agent Identity Management System (AIMS) as a conceptual model
      describing the set of functions required to establish, maintain and
      evaluate the identity and permissions of an agent workload. That
      document states that AIMS does not refer to a single product, protocol
      or deployment architecture. It is the one
      agent-specific document in that working group at the time of writing.
      APS specifies mechanisms in part of the
      space that framework surveys: the transfer-time narrowing rule across the
      seven constraint dimensions of <xref target="faceted-attenuation"/>, and the
      signed admission and outcome records evaluated at an enforcement
      point.</t>

      <t>Two transparency specifications were published in June 2026 and
      were not cited in the previous revision. <xref target="RFC9943"/> defines an
      architecture for single-issuer signed statement transparency, in which
      registration is the process of submitting a signed statement to a
      Transparency Service, applying that service's registration policy,
      adding it to a verifiable data structure and producing a receipt, and a
      Transparency Service is the entity that maintains and extends that
      structure and endorses its state. <xref target="RFC9942"/> defines the
      receipt encoding, where a receipt proves properties of a verifiable
      data structure to a verifier. Three individual drafts profile that
      architecture for agent actions <xref target="SCITT-CAPSULE"/>
      <xref target="SCITT-AGENT-RECEIPT"/>
      <xref target="SCITT-ACTION-CAPSULE"/>. One of them,
      <xref target="SCITT-AGENT-RECEIPT"/>, states the property at
      stake. Registration obtains a Transparency Service's signed proof
      that the statement was registered in its log, which that draft calls a
      property a self-signed chain cannot provide alone.</t>

      <t>The ReceiptV1 envelope of <xref target="receipt-envelope"/> stays a standalone signed
      record and is not a profile of that architecture in this revision. The
      reason is the dependency rather than the encoding. A registration
      receipt is a statement about a log that a Transparency Service
      maintains, so what a relying party gets from it is bounded by that
      service and by the monitoring the relying party performs. The records
      of <xref target="signed-receipts"/> are evaluated at an enforcement point at the time of the
      action, and this document states, per record class, what each record
      proves and what it does not, without requiring a Transparency Service
      to be reachable at that moment. The two are composable rather than
      alternative. A ReceiptV1 record is a candidate payload for a signed
      statement, and registering one would add transparency properties that
      <xref target="signed-receipts"/> does not claim. Specifying that carriage is future work
      (<xref target="future-work"/>).</t>
      <t>The Delegation Receipt Protocol <xref target="DRP"/> specifies a user-signed
      delegation receipt carrying scope, a validity window, a hash of the operator
      instruction, and a model-state commitment, anchored to an append-only log before the
      agent acts. For multi-agent delegation chains, DRP enforces a narrowing-only rule
      under which a sub-agent receipt's scope is a strict subset of its parent's, specifies
      cascade revocation with signed revocation records anchored to the same log, and
      includes an instruction provenance check against the operator-instruction hash.
      The designs differ in anchoring: DRP anchors receipts to an external log before
      execution, while APS evidences the admission decision and the outcome as separate
      signed records at the gateway. DRP additionally specifies model-state attestation,
      which this document does not.</t>
      <t>An identity and delegation framework <xref target="AGENT-ID-FW"/> specifies
      self-certifying agent identifiers derived from public keys, discovery through
      indexed metadata, and jointly signed authorization capabilities: a capability is
      co-signed by the client-side and service-side providers, carries the permitted
      actions and operational limits (roles, quotas, budgets, time window, audit
      requirements), and is recommended to be holder-bound with proof-of-possession
      and expiry. The framework and APS address adjacent layers: it specifies identity
      bootstrap and per-mission capability establishment between providers, while APS
      specifies narrowing-only transfer of authority across the seven constraint
      dimensions of <xref target="faceted-attenuation"/> and signs the admission decision
      and the outcome as separate records at each action.</t>
      <t><xref target="ACTION-REF"/> specifies a deterministic, content-addressed action
      identifier computed over an agent identifier, action type, scope, and timestamp under
      RFC 8785 canonicalization, such that any party holding the preimage fields can
      independently recompute the identifier. This matches the External Correlation Form
      of <xref target="external-correlation"/> in preimage fields, canonicalization, hash,
      timestamp discipline, and lowercase hexadecimal encoding, so the two computations
      yield equal values for identical field inputs. Both preimages are limited to
      action-identifying fields. In APS, decision attributes such as policy identity are
      bound in the signed record (<xref target="signed-receipts"/>) rather than folded into the correlation
      preimage, which keeps the key recomputable by a party that does not hold
      decision-time state.</t>

      <t>An architecture document <xref target="AGENT-ID-ARCH"/> specifies a human
      identity root, delegation semantics in which nested delegation may pass only a
      subset of granted authority, and a provenance structure tracing agent actions to
      the authorizing human; it states that it defines no protocol, wire format, or
      credential format. That document also specifies narrowing-only
      delegation, stated at the architecture level rather than as a
      token or record format, and its human identity root corresponds to the
      principal that APS keeps visible through the principal binding of
      <xref target="principal-binding"/>. The record
      formats, signature scheme, and enforcement-point evaluation that the
      architecture leaves open are what this document specifies.</t>

      <t>Three independent drafts each titled Agent Identity Protocol specify
      different layers under the same name, and are distinguished here by
      series name. <xref target="AIP-DELEGATION"/>
      defines a decentralized identity, delegation, and authorization framework
      on W3C Decentralized Identifiers, with capability manifests and
      constraint overlays validated attenuation-only: an overlay may not expand
      any constraint, and chain validation applies recursive attenuation
      semantics so each child manifest is a valid attenuation of its parent;
      prompt injection prevention is stated out of scope. The attenuation-only
      rule is narrowing-only delegation applied to capability constraints; APS
      additionally binds the narrowing
      evidence into signed receipts at each transfer point and separates
      current-state validity from revocation evidence.
      <xref target="AIP-ENFORCEMENT"/>, which had expired at the time of
      writing and is retained here as prior art, specifies registry-anchored
      agent
      identifiers with per-action signing and an enforcement proxy interposed
      between the client and each tool server, evaluating declarative policy to
      an allow, deny, or hold decision before the tool is reached. The
      interposition parallels the APS gateway's position in the action path;
      the models differ in that APS evaluates admissibility against the
      delegation chain's narrowed constraints and signs the pre-dispatch
      admission decision and the post-dispatch outcome as distinct
      records. The third <xref target="AIP-IBCT"/> binds identity,
      authorization, scope constraints and provenance into invocation-bound
      capability tokens, in a compact JWT mode and a chained mode with
      append-only blocks and Datalog policy evaluation, under a rule that at
      each delegation step scope can only narrow or stay equal and never
      widen. That rule also specifies narrowing-only delegation, reached over
      a token format rather than over standalone records.</t>

      <t>A parallel set of individual Internet-Drafts develops the surrounding problem space as requirements and evidence-layer documents. A problem statement <xref target="WIMSE-XORG"/> enumerates
      ten requirements for cross-organizational agent delegation, among them
      recursive attenuation, bounded-staleness revocation, and tamper-evident
      composable audit, and it specifies no solution. Its tenth requirement,
      added after this document's previous revision, is that classes of
      actions be designatable as requiring, at execution time, evidence of an
      authorization decision made by an accountable human approver distinct
      from the executing agent, bound to the specific action and relied upon
      at most once. The overlap is partial. <xref target="two-phase-execution"/> and <xref target="receipt-verification"/> of this
      document specify a single-use approval bound to an action_ref and the
      rules under which it is consumed. This document specifies no
      requirement that the approver be a human distinct from the executing
      agent, no designation of such a requirement carried in delegated
      authority, and no preservation of such a designation across
      narrowing.
      A companion set specifies
      pieces of an evidence layer above individual record formats. One
      defines a transport-agnostic composition object and a fail-closed
      evaluation algorithm that returns satisfied or unsatisfied together
      with a replayable evaluation record <xref target="EP-AEC"/>. A second
      introduces and rotates an organization's evidence-issuing keys through
      a signed, hash-chained sequence, and records the authority a subject
      held at a registry snapshot, including role, action scope, material
      limits, policy binding, validity and revocation status
      <xref target="EP-AUTHINTRO"/>. A third binds named-human authorization
      evidence into an action record in a host-agnostic way
      <xref target="EP-HUMANAUTH"/>. A fourth binds per-action
      authorization and memory provenance into an action capsule
      <xref target="SCITT-CAPSULE"/>. These efforts specify requirements
      and evidence-composition mechanisms, several with their own
      implementations. APS records are candidate member artifacts for such
      composition, and each mechanism retains its own verification,
      acceptance, and sufficiency rules. The requirements overlap with APS mechanisms in part: recursive
attenuation with the narrowing rule of <xref target="faceted-attenuation"/> and <xref target="component-orders"/>,
revocation evidence with <xref target="revocation-evidence"/>, and
tamper-evident audit with the signed records of <xref target="signed-receipts"/>.  Where
these efforts define what a cross-organizational solution must
satisfy, this document states, per record class, what each record
proves and what it does not.</t>

      <t>Two lines of work outside the IETF bear on the boundary the MCP
      binding of <xref target="mcp-binding"/> sits on. Inside MCP's specification-enhancement
      process, one proposal defines a signed tool-call attestation envelope,
      on the stated ground that MCP has no standard mechanism to prove
      cryptographically which agent called which tool, with what arguments
      and for what purpose <xref target="MCP-SEP-2787"/>. A second carries
      client-asserted invocation audit context and states that its fields are
      explicitly not authorization evidence <xref target="MCP-SEP-2817"/>. A
      third defines a canonical byte form and an append-only hash chain for
      audit records, with admission, runtime-security and caller-governance
      context attached under one digest <xref target="MCP-SEP-3004"/>. A
      fourth, a server-side signed execution record, was withdrawn by its
      author, who continued the work as an Internet-Draft
      <xref target="MCP-SEP-2828"/> <xref target="VAARA-RECEIPT"/>. The first
      and third were closed in September 2026 under a maintainer decision
      that new proposals be developed with a working group, which is a
      disposition of process and not of content. The resulting split between
      an attestation of the request, an audit context, and a separately
      chained record tracks the three-record policy chain of <xref target="policy-chain"/> and <xref target="signed-receipts"/>, and the server-authoritative record of a decision and its outcome,
      which left that process when the fourth proposal was withdrawn, is what
      <xref target="policy-decision"/> and <xref target="action-result"/> specify.</t>

      <t>The Authorization API <xref target="AUTHZEN"/>, final in January
      2026, standardizes the exchange by which Policy Decision Points and
      Policy Enforcement Points communicate authorization requests and
      decisions without requiring knowledge of each other's inner workings.
      That API and this document address different halves of one boundary.
      The API specifies how a decision is asked for and returned at the time
      of the request, while <xref target="policy-decision"/> specifies a signed record of the
      decision that a party other than the two endpoints can evaluate
      afterwards, and <xref target="decision-ref"/> binds the inputs the decision was made
      against into that record.</t>

      <t>In the Coalition for Secure AI's agentic-systems workstream, three
      open proposals touch this document. One specifies a signed,
      pre-execution declaration layer for agentic systems
      <xref target="COSAI-149"/>. A second asks what a verifier may conclude
      when evidence is absent, stating that a verifier finding no evidence
      for a property has three possible answers while most systems implement
      only two <xref target="COSAI-189"/>. A third defines decommissioning as
      a lifecycle phase that ends an agent's authority to act, under which
      the same agent identity cannot resume once the phase is complete
      <xref target="COSAI-205"/>. The second restates, for a general evidence
      layer, the distinction <xref target="chain-verification"/>, <xref target="receipt-evidence"/> and <xref target="receipt-verification"/> already draw between a
      negative result and a result that could not be established, and this
      document keeps its own outcome vocabulary rather than renaming it
      against an unadopted proposal. The third is adjacent to the
      irreversibility of revocation in <xref target="revocation-cascade"/> and covers a broader
      lifecycle event than this document specifies. All three were open and
      unadopted at the time of writing.</t>

      <t>Two artifacts maintained by this document's author are named here as
      follow-on work rather than as independent corroboration. An authority
      lifecycle document <xref target="APS-LIFECYCLE"/> records invariants
      about what happens to an agent's authority when the people, keys,
      approvals and roles around it change, each carrying a status label that
      separates what this document specifies, what a runnable case exercises,
      what an implementation ships, and what is only proposed. A public
      conformance suite <xref target="APS-CONFORMANCE"/> holds the vectors
      those labels point at. Neither is normative here. The questions that
      document lists as open, among them completeness of a teardown, release
      from multiple concurrent suspensions, and authority state restored from
      a backup, are outside the scope of this revision.</t>

    <section anchor="related-work-matrix" numbered="true" toc="default">
      <name>Capability Map</name>
      <t>The two tables below set every document cited above against
      fourteen dimensions. They are one table, split at dimension h so that
      each half fits the page width, and every row appears in both. A cell records what the cited document states about that
      dimension. It does not record agreement with this document, and it does
      not rank the documents.</t>

      <t>Cell values. S, specifies, means the document states a rule for that
      dimension in its own normative text. D, describes, means the document
      states a model or a survey finding for that dimension without stating a
      rule. R, requires, means the document states the dimension as a
      requirement on some other mechanism. O, out of scope, means the document
      states that the dimension is outside what it defines. A blank cell means
      this document records no finding for that dimension from the cited text.
      A blank is not a finding that the dimension is absent from that
      document.</t>

      <t>Column keys.</t>
      <dl spacing="compact" newline="false">
        <dt>a:</dt><dd>identity</dd>
        <dt>b:</dt><dd>represented principal</dd>
        <dt>c:</dt><dd>initial grant</dd>
        <dt>d:</dt><dd>recursive attenuation</dd>
        <dt>e:</dt><dd>resource and purpose bounds</dd>
        <dt>f:</dt><dd>lifecycle and status</dd>
        <dt>g:</dt><dd>revocation freshness</dd>
        <dt>h:</dt><dd>exact-action binding</dd>
        <dt>i:</dt><dd>decision record</dd>
        <dt>j:</dt><dd>atomic admission</dd>
        <dt>k:</dt><dd>effect evidence</dd>
        <dt>l:</dt><dd>transparency</dd>
        <dt>m:</dt><dd>adapters</dd>
        <dt>n:</dt><dd>executable conformance</dd>
      </dl>

      <table anchor="tbl-related-map-a" align="left">
        <name>Documents cited above against dimensions a to g</name>
        <thead>
          <tr>
            <th align="left">document</th>
            <th align="center">a</th>
            <th align="center">b</th>
            <th align="center">c</th>
            <th align="center">d</th>
            <th align="center">e</th>
            <th align="center">f</th>
            <th align="center">g</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left"><xref target="PEDIGREE" format="default"/></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center">S</td>
          </tr>
          <tr>
            <td align="left"><xref target="OAUTH-CHAIN-DEL" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center">S</td>
          </tr>
          <tr>
            <td align="left"><xref target="RFC8693" format="default"/></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="RFC9396" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="OAUTH-AUTHZ-EV" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="OAUTH-INTEGRATION" format="default"/></td>
            <td align="center">D</td>
            <td align="center">D</td>
            <td align="center"></td>
            <td align="center">D</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="OAUTH-REGO" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="OAUTH-ACTOR-CHAIN" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="OAUTH-ACTOR-PROFILE" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="OAUTH-REQ-DEL-CHAIN" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="OAUTH-REVOC-CLOSURE" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center">S</td>
          </tr>
          <tr>
            <td align="left"><xref target="AIMS" format="default"/></td>
            <td align="center">D</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="RFC9943" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="RFC9942" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="SCITT-CAPSULE" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="SCITT-AGENT-RECEIPT" format="default"/></td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="SCITT-ACTION-CAPSULE" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="DRP" format="default"/></td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center">S</td>
            <td align="center">S</td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center">S</td>
          </tr>
          <tr>
            <td align="left"><xref target="AGENT-ID-FW" format="default"/></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="ACTION-REF" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="AGENT-ID-ARCH" format="default"/></td>
            <td align="center"></td>
            <td align="center">D</td>
            <td align="center"></td>
            <td align="center">D</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center">D</td>
          </tr>
          <tr>
            <td align="left"><xref target="AIP-DELEGATION" format="default"/></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="AIP-ENFORCEMENT" format="default"/></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="AIP-IBCT" format="default"/></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center">S</td>
          </tr>
          <tr>
            <td align="left"><xref target="WIMSE-XORG" format="default"/></td>
            <td align="center">R</td>
            <td align="center">R</td>
            <td align="center"></td>
            <td align="center">R</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center">R</td>
          </tr>
          <tr>
            <td align="left"><xref target="EP-AEC" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center">O</td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="EP-AUTHINTRO" format="default"/></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center">S</td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="EP-HUMANAUTH" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="MCP-SEP-2787" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="MCP-SEP-2817" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="MCP-SEP-2828" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="MCP-SEP-3004" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="VAARA-RECEIPT" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="AUTHZEN" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="COSAI-149" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="COSAI-189" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="COSAI-205" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center">D</td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="APS-LIFECYCLE" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="APS-CONFORMANCE" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
        </tbody>
      </table>

      <table anchor="tbl-related-map-b" align="left">
        <name>Documents cited above against dimensions h to n</name>
        <thead>
          <tr>
            <th align="left">document</th>
            <th align="center">h</th>
            <th align="center">i</th>
            <th align="center">j</th>
            <th align="center">k</th>
            <th align="center">l</th>
            <th align="center">m</th>
            <th align="center">n</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left"><xref target="PEDIGREE" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="OAUTH-CHAIN-DEL" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="RFC8693" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="RFC9396" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="OAUTH-AUTHZ-EV" format="default"/></td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="OAUTH-INTEGRATION" format="default"/></td>
            <td align="center"></td>
            <td align="center">D</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="OAUTH-REGO" format="default"/></td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="OAUTH-ACTOR-CHAIN" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="OAUTH-ACTOR-PROFILE" format="default"/></td>
            <td align="center"></td>
            <td align="center">O</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="OAUTH-REQ-DEL-CHAIN" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="OAUTH-REVOC-CLOSURE" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="AIMS" format="default"/></td>
            <td align="center"></td>
            <td align="center">O</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="RFC9943" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="RFC9942" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="SCITT-CAPSULE" format="default"/></td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="SCITT-AGENT-RECEIPT" format="default"/></td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center">O</td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="SCITT-ACTION-CAPSULE" format="default"/></td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center">S</td>
          </tr>
          <tr>
            <td align="left"><xref target="DRP" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="AGENT-ID-FW" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="ACTION-REF" format="default"/></td>
            <td align="center">S</td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center">S</td>
          </tr>
          <tr>
            <td align="left"><xref target="AGENT-ID-ARCH" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="AIP-DELEGATION" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center">S</td>
          </tr>
          <tr>
            <td align="left"><xref target="AIP-ENFORCEMENT" format="default"/></td>
            <td align="center">S</td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="AIP-IBCT" format="default"/></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="WIMSE-XORG" format="default"/></td>
            <td align="center">R</td>
            <td align="center">R</td>
            <td align="center">R</td>
            <td align="center"></td>
            <td align="center">R</td>
            <td align="center">R</td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="EP-AEC" format="default"/></td>
            <td align="center">S</td>
            <td align="center">S</td>
            <td align="center">O</td>
            <td align="center">O</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="EP-AUTHINTRO" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="EP-HUMANAUTH" format="default"/></td>
            <td align="center">S</td>
            <td align="center">S</td>
            <td align="center">O</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="MCP-SEP-2787" format="default"/></td>
            <td align="center">S</td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="MCP-SEP-2817" format="default"/></td>
            <td align="center"></td>
            <td align="center">O</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="MCP-SEP-2828" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="MCP-SEP-3004" format="default"/></td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="VAARA-RECEIPT" format="default"/></td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center">S</td>
          </tr>
          <tr>
            <td align="left"><xref target="AUTHZEN" format="default"/></td>
            <td align="center"></td>
            <td align="center">S</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="COSAI-149" format="default"/></td>
            <td align="center"></td>
            <td align="center">D</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="COSAI-189" format="default"/></td>
            <td align="center"></td>
            <td align="center">D</td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="COSAI-205" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="APS-LIFECYCLE" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
          <tr>
            <td align="left"><xref target="APS-CONFORMANCE" format="default"/></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
            <td align="center"></td>
          </tr>
        </tbody>
      </table>

      <t>Two rows carry no cells. <xref target="APS-LIFECYCLE"/> and <xref
      target="APS-CONFORMANCE"/> are maintained by this document's author, the
      prose above states what they are, and this table records external
      documents.</t>

      <t><xref target="MCP-SEP-2828"/> carries no cells. Its author withdrew it
      and continued the work as <xref target="VAARA-RECEIPT"/>, which has its
      own row.</t>

      <t>What this table does not establish. It does not establish that a
      document without a cell in a dimension states no rule for it, because the
      reading behind each row was bounded to the text that row cites. It does
      not establish that two documents marked S in one column state the same
      rule, and the prose above is where the differences are stated. It does not
      establish that any document in it has been implemented, has been adopted,
      or has run a vector from any suite. It is not evidence about which
      document stated a dimension earlier.</t>
    </section>
    </section>

    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>Protocol properties that depend on mediation hold only when all
privileged effects pass through the enforcement gateway described in
<xref target="gateway-reference-architecture"/>.  When agents use an SDK without an external enforcement
boundary, those properties depend on agent cooperation.  This
section considers four attacker classes: adversarial agent,
messaging attacker, runtime attacker, and compromised-but-signing
agent.  Runtime compromise is outside what this document specifies.</t>
      <t>A compromised-but-signing agent is a hijacked agent that produces
cryptographically valid signatures over false claims about its own
state.  Signature verification can succeed because the signing key
remains available to the attacker.  Addressing this class requires
evidence issued outside the compromised agent's trust domain.  This
document separates proof of possession from key authority
(<xref target="agent-passport"/>), defines historical and external signer resolution
(<xref target="key-rotation"/> and <xref target="external-signer-keys"/>), defines separately signed principal bindings
and claim levels (<xref target="principal-binding"/>), and keeps attestation provenance
separate from verification status (<xref target="attestation-provenance"/>).  These distinctions
constrain what a verifier may conclude from a signed claim.  They do
not close the attack class.  A single-domain deployment remains
exposed, and general operationally independent witnessing of agent
state remains future work (<xref target="future-work"/>).</t>
      <t>This epistemic boundary extends to signed receipts. The gap between
      what a cryptographic governance protocol can prove and what it cannot is
      analyzed in <xref target="APS-EVIDENCE-GAP"/>. A signed receipt attests
      what the policy chain observed and decided. It does not attest ground
      truth about the external world. A valid receipt signature proves
      that the issuer attests the receipt's payload; it does not prove the
      payload corresponds to external fact. Verifiers MUST treat receipts as
      evidence of what was attested, not as proof of what is true.</t>

      <t>Signed governance mutations are exposed to a substitution class
      when an approval signature binds an identifier and a description
      rather than the mutated content itself. An approver who signs a
      proposal identifier can have a different proposal body substituted
      under the same identifier between approval and application.
      Approval signatures over any governance mutation SHOULD bind the
      full proposed content and the version transition it applies to,
      not a reference to them. The normative preimage for specific
      governance structures is companion work (<xref target="institutional-governance-v2"/>); the
      consideration applies to any signed mutation of standing
      authority.</t>

      <t>Where a deployment issues consumable challenge, token, or approval
      artifacts carrying an expiry (for example, the approval artifact
      of <xref target="two-phase-execution"/>, or challenge artifacts in a protocol binding),
      verifiers MUST enforce the expiry, and issuance against an expired
      or unparseable challenge MUST fail closed. An expiry that is carried but not enforced is equivalent to no expiry.</t>

      <t>The external correlation form (<xref target="external-correlation"/>) hashes fields as supplied by the correlating ecosystem. A matching external action reference is evidence of correlation between records, not of the authenticity, authority, or integrity of either record, and it MUST NOT be treated as an authority claim; correlation strength is bounded by the external ecosystem's own field discipline.</t>

      <t>The action references of <xref target="action-reference"/> and <xref target="external-correlation"/> are correlation keys, not integrity seals. A reference stored in the same record as its own preimage fields binds nothing against that record's writer: a party able to edit the fields can recompute the reference in the same act. Recomputation detects accidental corruption, and detects alteration only relative to an independently held copy of the reference or of the record. Tamper evidence against a record's writer comes from a signature over the record (<xref target="signed-receipts"/>) or from an independently held copy, not from the reference itself.</t>

      <t>An imported external chain root (<xref target="oauth-jag-binding"/>) relocates the root
      of trust for the chain built under it: APS signature verification
      begins at the first APS-signed hop, and the standing of everything
      above that hop rests on the importing party's verification of the
      external grant. The caller-signed verification attestation exists
      to make that party identifiable; a verifier that accepts imported
      roots accepts the importing party as a trust anchor for those
      chains, and SHOULD treat the attestation as the auditable record of that acceptance. A verifier that has not itself verified the external grant under its native rules holds the imported root at the strength of the importer's claim, and an audience check omitted at the point of use can admit a grant outside its intended audience.</t>

      <t>An activation condition of <xref target="lifecycle-activation"/> is
      enforced only at a boundary that claims that feature. A delegation gated by
      a recorded_event condition verifies as valid at a boundary that does not
      claim it, because the condition is a separate record the chain does not carry
      and chain verification never reads. An issuer that needs a gate applied by
      every verifier has only the time facet of
      <xref target="faceted-attenuation"/>, whose not_before every chain verifier
      applies.</t>

      <t>Every protocol artifact a decoder or verifier receives is untrusted input. Length, count, or size fields carried inside an artifact MUST NOT drive reads or allocation beyond the input actually received: a declared element count that exceeds the remaining input is a decoding error, and a read past the end of the input MUST fail rather than yield default values. Verification interfaces SHOULD handle a structurally malformed artifact through a defined result, whether a return value or a typed error, rather than an unhandled failure, so that malformed input cannot crash a verifier.</t>

      <section anchor="security-v2" numbered="true" toc="default">
        <name>Corpus Failure Classes and the Assumptions They Defeat</name>

        <t>The considerations above are attacker classes. The classes below are
        failure shapes drawn from the case corpus this document is written against.
        Each one is stated with the deployment assumption it defeats and with what
        in the conformance suite exhibits it. Naming a fixture family means the suite
        carries executable cases of that shape. It does not mean the class is closed,
        and several classes have no family at all, which is recorded where it is
        true.</t>

        <dl newline="true" spacing="normal">
          <dt>Principal substitution</dt>
          <dd>An authority path depends on an identifier no party in the delegation
          graph controls, such as a mail domain a recovery flow delivers to or a
          namespace a reference resolves. The string is unchanged and the party
          behind it is not. Assumption defeated: the identifier an authority path
          depends on is still held by the party it was issued to. Exhibited by:
          lifecycle-identifier-reuse-and-rename, and by the case in
          action-result-binding where one record names two different acting agents.</dd>

          <dt>Ambient bypass</dt>
          <dd>A credential reaches the target by a path that never passes the
          enforcement boundary. Every record the boundary holds is valid and none of
          them is about the effect that occurred. Assumption defeated: all privileged
          effects pass the boundary. This is the mediation assumption of
          <xref target="d2e-bypass"/> and it is load bearing. Exhibited by: the
          interop record cosai-ws4-149-decision-to-effect, whose bypass cases settle
          negatively on an observed alternate path and stay unsettled without a
          coverage premise. No fixture family establishes coverage over the paths to
          an effect, and the boundary-case corpus keeps the incident shapes for this
          class outside the lifecycle model as security-control cases.</dd>

          <dt>Stale approval after an epoch change</dt>
          <dd>A restored snapshot or a lagging replica presents authority state from
          before a reauthorization, succession or re-root, and an approval evaluated
          under the earlier state is admitted under the later one. Assumption
          defeated: no party can present pre-change state as current, and a
          write-fencing holder from the earlier epoch cannot publish. Exhibited by:
          authority-epoch-rollback.</dd>

          <dt>Approval burned before admission</dt>
          <dd>An approval is consumed once and then presented again, or presented
          after its window closed. Assumption defeated: consumption is atomic at the
          boundary and the expiry is enforced at consumption rather than only at
          issuance. An expiry that is carried and not enforced is equivalent to no
          expiry. Exhibited by: approval-single-use, including the already-consumed,
          expired and deny-not-consumable cases.</dd>

          <dt>Replay after admission</dt>
          <dd>Two presentations of one approval race at the boundary and both are
          admitted, or one approval admits a second call whose action reference
          differs from the one it approved. Assumption defeated: the boundary
          serializes consumption and compares the action reference at the moment of
          consumption. Exhibited by: approval-single-use, whose race pair admits the
          first presentation and refuses the second, and whose action-binding case
          refuses a call the approval does not name.</dd>

          <dt>Stale revocation</dt>
          <dd>A revoked grant continues to admit calls because a session, a warmed
          cache or a second worker never re-resolved status, or because a resolver
          answer the implementation did not recognise was read as active. Assumption
          defeated: a revocation answer reaches the boundary before the next
          authorization boundary, and a cache does not outlive its declared freshness
          bound. Exhibited by: cached-authorization-revocation,
          revocation-resolution-forward-compat, ancestor-revocation-chain. The
          corpus also records a cache whose configured lifetime drifts past its
          declared freshness policy as a configuration defect rather than an
          authority finding.</dd>

          <dt>Partial teardown</dt>
          <dd>A revocation cascade processes the descendants it knew about. A
          descendant issued locally, or signed after the revocation under a chain
          that still verifies, was never in that set. Assumption defeated: the set a
          teardown processed was every authority descendant at the relevant boundary.
          Signed lineage establishes structure and does not establish that a
          descendant was accepted authority when the revocation took effect.
          Exhibited by: ancestor-revocation-chain and the history-reconciliation
          cases of lifecycle-infrastructure-failure. No family establishes
          completeness, and completeness is an open question, not a settled
          rule.</dd>

          <dt>Successor and rollback resurrection</dt>
          <dd>A successor to an office or a sponsor is treated as holding the
          predecessor's whole delegation tree, or a restore brings back authority
          that had ended. Assumption defeated: a successor does not inherit the
          tree, and continued operation after a handover runs on the replacement
          chain rather than on the old one. Exhibited by: sponsor-handover,
          lifecycle-root-authority-succession, authority-epoch-rollback.</dd>

          <dt>Concurrent suspension release</dt>
          <dd>Three causes from three sources pause one grant. One is released and
          the grant is treated as usable. Assumption defeated: release is per cause,
          and a grant stays paused while any cause is live. Exhibited by:
          suspension-cause-composition.</dd>

          <dt>Adapter semantic loss</dt>
          <dd>An adapter carries an authority artifact into another stack and the
          dimensions that stack has no member for are dropped rather than reported
          as unsupported. The result is silently wider than what was granted.
          Assumption defeated: an adapter that cannot carry a dimension says so.
          Exhibited by: the cross-stack families, which record what each external
          format carries and what it does not.</dd>

          <dt>Trust-root substitution</dt>
          <dd>The root a verifier begins at is not the one the deployment intended.
          The imported-root case is covered above: APS signature verification begins
          at the first APS-signed hop and the standing of everything above it rests
          on the importing party. Assumption defeated: the verifier and the
          deployment agree on where verification begins. The corpus also carries a
          shape that sits upstream of any chain check, where the constants the
          verification arithmetic itself relies on were substituted in a build. No
          fixture family exercises that shape, and the corpus records it as a
          build-integrity case outside the authority model.</dd>

          <dt>Accidental chain union</dt>
          <dd>One agent holds more than one independently rooted chain and a
          verifier reads the union of their scopes or budgets. Neither chain granted
          what the union grants. Assumption defeated: each action is decided against
          one root-to-leaf chain. Exhibited by: chain-selection-no-union,
          single-chain-selection.</dd>

          <dt>Indeterminate post-dispatch retry</dt>
          <dd>An action-result record carries status unknown and the deployment
          retries. Where the effect cannot be undone, the retry risks a second
          effect while the record of the first says nothing about whether it
          occurred. Assumption defeated: a retry after an unknown result cannot
          produce a second effect that no compensating action reaches. Exhibited by:
          the unknown-status surface of action-result-binding, the no-retry cases of
          runtime-authority-denial-continuity, and the effect cases of the interop
          record cosai-ws4-149-decision-to-effect. This document states no normative
          retry rule for the irreversible case, as
          <xref target="d2e-indeterminate"/> records, and the corpus keeps
          deduplication mechanisms such as idempotency keys and at-least-once
          delivery as execution behaviour rather than as authority findings.</dd>
        </dl>

        <t>Two of these classes have no fixture family at all, ambient bypass on the
        coverage side and the build-integrity half of trust-root substitution. None
        of the thirteen is closed. A family exhibits a shape and closes nothing, so
        a reader treating the list as a checklist a deployment works through is
        reading it as something it is not. None of the cases behind any class is a
        source of rules for AI agents, and nothing here states that a legal
        doctrine applies to one.</t>
      </section>
    </section>

    <section anchor="privacy" numbered="true" toc="default">
      <name>Privacy Considerations</name>
      <t>APS uses persistent identifiers and signed records to support attribution and audit. These records can expose or correlate an agent's principal, authority path, counterparties, action timing, target systems, and referenced evidence across administrative domains, in the sense described by RFC 6973 <xref target="RFC6973" format="default"/>. Hashing a value does not make it anonymous when the input space is small or available to the observer. Deployments SHOULD disclose only the fields and evidence references needed for the verifier's decision, SHOULD avoid personal data in identifiers and free-text fields, and SHOULD define access and retention policies for passports, delegations, receipts, and evidence records. A receipt signature protects integrity; it does not authorize secondary use or onward disclosure. Where global correlation is unnecessary, profiles SHOULD use context-specific agent and principal identifiers. Key rotation does not prevent correlation when a stable agent identifier, action reference, or delegation lineage remains visible.</t>
    </section>

    <section anchor="iana" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.  DID methods are recorded in the
W3C DID Specification Registries rather than through IANA.  The
versioned strings defined or referenced here include provenance
tiers, resolution outcomes, principal claim levels, receipt_type
values, profile identifiers, and the external correlation label.
They are published with the reference implementation; establishing
registries for them is future work.</t>
    </section>

    <section anchor="attribution-axes" numbered="true" toc="default">
      <name>Attribution Axes and Scope</name>
      <t>APS distinguishes four attribution axes for agentic work. They are
      distinct because, in multi-party workflows, they may resolve to
      different entities.</t>
      <dl>
        <dt>Authority</dt>
        <dd>The delegation chain under which an action was permitted. This
        document specifies the authority axis in full (<xref target="delegation"/> and <xref target="policy-chain"/>).</dd>
        <dt>Contribution</dt>
        <dd>The sources, such as data, models, tools, or prior work product,
        that fed into a deliverable. This document does not specify a
        contribution-attribution model.</dd>
        <dt>Principal</dt>
        <dd>The entity on whose behalf, or under whose account, the agent acted. A verifier resolves the claim level of a principal binding and reports it as self_asserted, principal_attested, or externally_verified_principal under <xref target="principal-binding"/>. Whether the principal that binding names is the principal the accepted authority lineage represents is profile and trust-policy dependent and may remain not established, which is the open question at <xref target="oq-principal-authority"/>.</dd>
        <dt>Beneficiary</dt>
        <dd>The entity that receives the value, credit, or downstream benefit
        the work creates. This document does not specify a
        beneficiary-attribution model.</dd>
      </dl>
      <t>The protocol must preserve the distinction between principal and
beneficiary.  An agent may act on behalf of an authorizing
principal, such as a consulting firm, to produce a deliverable whose
beneficiary is a third party, such as that firm's client.  Collapsing
the two axes would make this ordinary case unrepresentable.</t>
      <t>The mechanisms in this document resolve the authority axis from the
selected chain, and resolve the claim level of the principal axis from the
binding material, where that material is available.  Associating that
principal with the accepted authority lineage is profile and trust-policy
dependent and may remain not established
(<xref target="oq-principal-authority"/>).  Contribution and beneficiary remain distinct
attribution axes, but their normative mechanics are left to
companion specifications.  The allocation of credit, benefit,
compensation, liability, or ownership across beneficiaries is out
of scope for this document and is not implied by the authority
chain.</t>
    </section>

    <section anchor="limits-and-open-questions" numbered="true" toc="default">
      <name>Limits and Open Questions</name>

      <t>This section is informative and has two parts. The first states five
      limits of what this document specifies. A limit is a property of the
      protocol and not a question waiting on an answer. The second states the
      open design questions, each with what is unresolved, why the current
      evidence does not settle it, what this document requires until it is
      settled, and whether it touches APS Core or a Candidate feature.</t>

      <t>Nothing in either part is a defect report about this revision. A
      limit is a boundary a later revision does not move by adding a record
      type. An open question is a place where this document states less than
      an implementation already does, or less than a deployment needs.</t>

    <section anchor="known-limits" numbered="true" toc="default">
      <name>Known Protocol Limits</name>

      <t>This subsection is informative. The five limits below are properties
      of what this document specifies. They are not questions awaiting an
      answer, and no later revision closes them by adding a record type.</t>

      <dl newline="true" spacing="normal">
        <dt>No external truth.</dt>
        <dd>A signature establishes that an authorized signing key attested to
        canonical bytes. It establishes nothing about the world the bytes
        describe. A valid chain, a valid receipt and a resolved evidence
        reference together establish what parties said and how their records
        relate, and never that an external event occurred. This is why
        <xref target="receipt-verification"/> keeps external truth on its own
        axis and why <xref target="d2e-effect-verification"/> refuses to
        report an effect from a result record.</dd>

        <dt>The mediation assumption.</dt>
        <dd>Everything here rests on the deployment routing privileged effects
        through the enforcement boundary. That assumption is load bearing and
        it is not self-checking. Where a target system accepts a credential
        that never passes the boundary, the records defined here describe the
        governed path and are silent about the rest.
        <xref target="mediation-assumption"/> states it and
        <xref target="d2e-bypass"/> states what a verifier may conclude
        without it.</dd>

        <dt>Live state is not in a signed record.</dt>
        <dd>A signature fixes static limits. Current revocation state, the
        current cumulative spend total and whether an approval has been
        consumed are enforcement-boundary state. A verifier without access to
        that state reports the corresponding axis as not established and can
        reach no further, however complete the records it holds.</dd>

        <dt>Unsupported profile semantics.</dt>
        <dd>This document leaves constructions to profiles, and an
        implementation that does not hold a profile a record names reports
        unsupported. Unsupported is not a narrower reading and it is not
        valid. Two implementations holding different profiles can both be
        conforming and reach different results on the same bytes.</dd>

        <dt>No proof of absence.</dt>
        <dd>Nothing here establishes that a record does not exist, that a path
        was not used, or that a set was complete. An empty result over an
        interval inside a declared delivery lag is delivery lag rather than
        absence. A verifier that reports absence from silence has reported a
        finding nobody made.</dd>
      </dl>

      <t>What this subsection does not establish. It does not establish that
      the five are the only limits of this document, and it does not establish
      that a deployment holding all five in mind is safe.</t>
    </section>

    <section anchor="open-questions" numbered="true" toc="default">
      <name>Open Design Questions</name>
      <t>This subsection is informative. It lists the questions this document
      does not answer, so that the rest of the document is not read as a claim
      about them. Each question states four things: what is unresolved, why
      the current evidence does not settle it, what this document requires
      until it is settled, and whether it touches APS Core or a Candidate
      feature. A question that touches Core is one an implementation cannot
      opt out of by declining a feature.</t>

      <t>Nine of these come from the authority lifecycle document
      <xref target="APS-LIFECYCLE"/>. Three are transitions in
      <xref target="transition-contract"/> that no section of this revision
      establishes. Two were drafted as candidate lifecycle extensions and are
      carried here instead, because the strongest counterexample against each
      is unresolved and a candidate with an unresolved counterexample is a
      question rather than an extension. One is the distance between the
      lifecycle standing of <xref target="lifecycle-concepts"/> and the
      issuer-only revocation of <xref target="revocation-cascade"/>.</t>

      <t>Each item names the cases in <xref target="case-corpus"/> that force
      it, where a case does, and the fixture families whose vectors touch it.
      None of those closes the question. A family's vectors are candidates
      against proposed text rather than conformance results, and naming one is
      not a conformance claim.</t>

      <section anchor="oq-teardown-completeness" numbered="true" toc="default">
        <name>Teardown Completeness</name>
        <t>A list of processed descendants does not establish that the list was
        every authority descendant at the relevant boundary. Delegation can be
        issued locally, so a descendant can exist that the teardown process
        never saw, and a descendant can be signed after the revocation with a
        valid parent chain. Signed lineage establishes structure. It does not
        establish that the descendant was accepted authority when the revocation
        took effect.</t>

        <t>Three things a completeness claim needs are unsettled. What set a
        boundary claims to have accepted at a given moment. What prevents
        something from entering that set afterwards while still counting as
        earlier authority. What public commitment can establish closure over that
        set without exposing private state. This is why the revocation evidence
        rules of this document require a party emitting a cascade-completion
        record to be able to state the basis on which its set was complete, and
        define no such basis. See also <xref target="lifecycle-l12"/> and
        <xref target="revocation-record-format"/>.</t>

        <t><strong>What is unresolved.</strong> What basis makes a completeness claim over a set of descendants checkable, and what prevents an addition to that set afterwards that still counts as earlier authority.</t>

        <t><strong>Why the current evidence does not settle it.</strong> Every family named above exercises what happens to one artifact or one chain. None of them presents a boundary asserting a set and a second party checking that assertion, because no record shape carries the basis on which the set was closed.</t>

        <t><strong>What this document requires until it is settled.</strong> A claim that a set is complete states the basis on which it is complete, under APS-LC-COMPLETENESS-BASIS. A verifier that cannot establish that basis reports not established with the coverage limb named, and does not read an incomplete teardown as a finding that the descendants the record does not name are valid.</t>

        <t><strong>Scope.</strong> Candidate. It touches the lifecycle continuity rules and no requirement of APS Core conformance.</t>

        <t>Cases. LC-B-022, a legal-claims exception as an actual basis for
        retention. LC-B-023, preservation triggered by anticipated litigation,
        earlier than formal process. LC-D-003, a believed inventory standing in
        for a verified one. LC-D-025, what a grant was used for as a different
        completeness claim from whether it is valid. LC-F-027, an empty audit
        window as delivery lag rather than absence.</t>

        <t>Candidates. BROAD-L7, whose coverage limb is a rule for reading a
        state claim rather than a duty to establish coverage. CAND-02, which
        keeps a later completeness finding as a new record rather than a rewrite.
        Neither closes it.</t>

        <t>Families. lifecycle-legal-regulatory-events, 44 vectors.
        lifecycle-credential-events, 42 cases.
        lifecycle-infrastructure-failure, 30 cases. LC-B-023 has no family,
        because no record set decides it.</t>

        <t>This does not establish that a complete teardown is unachievable. It
        establishes that this document states no basis on which a party could
        assert one.</t>
      </section>

      <section anchor="oq-work-in-flight" numbered="true" toc="default">
        <name>Work in Flight</name>
        <t>When authority is revoked while a workflow is running, the old grant
        cannot authorize a new effect at the next authorization boundary. What
        happens to the operation itself, whether it resumes under new authority,
        restarts, compensates or stops, depends on the kind of effect. There is
        no general model for it here.</t>

        <t><strong>What is unresolved.</strong> Whether an operation already running resumes, restarts, compensates or stops after the authority it ran under changes.</t>

        <t><strong>Why the current evidence does not settle it.</strong> The families carry timelines in which authority changes mid-operation and record the authority result at each boundary. None of them decides what the operation does next, because that decision belongs to the effect and not to the authority record.</t>

        <t><strong>What this document requires until it is settled.</strong> The old grant authorizes no new effect at the next authorization boundary, under APS-LC-RECHECK-AT-ADMISSION. Effects already completed stand. A consumed approval admits no further dispatch, and a later attempt needs a fresh authorization decision, under APS-ENF-RETRY-NEW-DECISION.</t>

        <t><strong>Scope.</strong> Candidate. It touches the lifecycle continuity rules and the decision-to-effect feature.</t>

        <t>Cases. LC-B-029, a receiving institution's acceptance as a terminal
        boundary a later change does not reach. LC-C-006, an ancestor found
        invalid long after the fact. LC-E-008, which policy version a
        long-running instance resolves its remaining steps against. LC-E-013,
        invalidation arriving mid-run rather than at the next gateway check.
        LC-E-020, dormant scheduled authority whose creator is gone.</t>

        <t>Candidates. BROAD-L6, the decision at each boundary is fresh. CAND-12,
        completed effects stand. CAND-16, when a recorded change becomes
        effective. None of them says whether the operation resumes, restarts,
        compensates or stops.</t>

        <t>Families. lifecycle-organization-events, 35 cases.
        lifecycle-multiple-principals-and-conflict, 92 vectors.
        lifecycle-time-and-scheduling, 61 vectors.
        cached-authorization-revocation, 9 cases.</t>

        <t>This does not establish that completed effects are unaffected by every
        kind of later finding. It states that this document bounds future effects
        and says nothing about the in-flight operation.</t>
      </section>

      <section anchor="oq-release-from-suspension" numbered="true" toc="default">
        <name>Release from Suspension</name>
        <t>Lifting one suspension should not clear another, bypass a revocation
        recorded while the agent was suspended, or recreate rights that changed
        in the meantime. Multiple suspension causes need to compose, with each
        one released separately. That composition is stated as a candidate and no
        precedence order among causes is defined.</t>

        <t><strong>What is unresolved.</strong> Which cause is read first where two releases point in opposite directions, and whether releasing a cause can restore the shape authority had before the cause was imposed.</t>

        <t><strong>Why the current evidence does not settle it.</strong> The composition family exercises independent release per cause. It carries no case in which two releases conflict, because the rule it tests defines no precedence and a fixture cannot test an order that does not exist.</t>

        <t><strong>What this document requires until it is settled.</strong> Causes are a set, each release is decided independently under APS-LC-RELEASE-PER-CAUSE, and authority stays inactive while any suspension cause remains. Where a standing resolver cannot say, the state is not established rather than released.</t>

        <t><strong>Scope.</strong> Candidate. It touches the suspension mechanism and no requirement of APS Core conformance.</t>

        <t>Cases. LC-B-011, an externally imposed restriction needing an equally
        external release trigger. LC-B-024, independent suspensions released
        independently. LC-C-022, a pending-ratification state that is neither
        revoked nor not revoked. LC-E-034, a queued action that outlasts a
        suspension.</t>

        <t>Candidates. CAND-05, which makes causes a set and requires standing
        for each release. CAND-09, which separates chain validity from an
        external block and its removal. CAND-05 defines no precedence order.</t>

        <t>Families. suspension-cause-composition, 16 cases and 5 gates.
        lifecycle-legal-regulatory-events, 44 vectors.
        lifecycle-multiple-principals-and-conflict, 92 vectors.
        lifecycle-time-and-scheduling, 61 vectors.</t>

        <t>This does not establish that causes never interact. It states that no
        rule here decides which cause is read first when two releases conflict.</t>
      </section>

      <section anchor="oq-critical-revocation" numbered="true" toc="default">
        <name>Critical Revocation</name>
        <t>Revoking a high-level authority can end the authority of a large set
        of agents at once. One design binds an approval for such a revocation to
        a snapshot of its impact and checks it again immediately before the
        revocation takes effect, treating uncertain impact as large rather than
        small. That design is written down and is neither built nor tested.</t>

        <t><strong>What is unresolved.</strong> Whether revoking an authority whose dependents are numerous needs an approval path different from any other revocation, for example one bound to a snapshot of its impact and rechecked immediately before it takes effect.</t>

        <t><strong>Why the current evidence does not settle it.</strong> No family in the suite exercises an impact snapshot, an approval bound to one, or a recheck against one. The design is written down and has never been run.</t>

        <t><strong>What this document requires until it is settled.</strong> Nothing. A revocation of any size is the ordinary revocation of APS-LC-ANCESTOR-REVOCATION-REACHES-DEPENDENTS, and this document places no additional condition on a revocation because of how many dependents it reaches.</t>

        <t><strong>Scope.</strong> Candidate. Adopting an additional condition would change a Core behavior, which is why it is not proposed here.</t>

        <t>Cases. LC-B-025, one revoked licence invalidating every chain that
        depends on it at once. LC-D-004, a compromised operator identity as an
        implicit ancestor over many independent trees. LC-D-014, an issuer whose
        own issuance log cannot be relied on. LC-F-033, systemic issuer
        misbehaviour escalating to distrust of the whole issuer.</t>

        <t>Candidates. CAND-01, an external event is authority-changing only when
        established. ANX-01, a verdict records its event-class coverage. Neither
        proposes binding an approval to an impact snapshot.</t>

        <t>Families. lifecycle-legal-regulatory-events, 44 vectors.
        lifecycle-credential-events, 42 cases.</t>

        <t>This does not establish that a large revocation needs a different
        approval path. It records that no vector here exercises one.</t>
      </section>

      <section anchor="oq-office-vacancy" numbered="true" toc="default">
        <name>Office Vacancy and Succession</name>
        <t>Where authority was exercised for an office and nobody currently holds
        it, nobody may be empowered to exercise, reaffirm or revoke what the
        previous holder issued. Whether office-based grants continue, suspend or
        need reaffirmation during a vacancy, and who may act for the office until
        it is filled, is not defined.</t>

        <t><strong>What is unresolved.</strong> Whether office-based grants continue, suspend or need reaffirmation while nobody holds the office, and who may act for the office until it is filled.</t>

        <t><strong>Why the current evidence does not settle it.</strong> The succession families exercise a covering holder record, a covering vacancy record and a conflicting pair. None of them exercises a vacancy in which no party holds standing to exercise, reaffirm or revoke what the previous holder issued, because a fixture with no standing source has nothing to assert against.</t>

        <t><strong>What this document requires until it is settled.</strong> A vacancy record covering the action instant leaves the question not established under APS-LC-VACANCY-NOT-ESTABLISHED, and a verifier does not carry the last known holder through a vacancy. Not established here is not a finding that the authority ended.</t>

        <t><strong>Scope.</strong> Candidate. It touches the succession mechanism and no requirement of APS Core conformance.</t>

        <t>Cases. LC-A-019, a vacancy that does not have to be filled before the
        remaining holders can act. LC-C-007, office binding against identity
        binding as an explicit design choice. LC-C-008, a missing successor
        designation resolving to a named default rather than failing closed.
        LC-C-009, a succession order that is deliberately not public. LC-I-009,
        an interim holder's caretaking scope, including extending its own
        mandate.</t>

        <t>Candidates. CAND-13, replacement authority may be pre-committed.
        CAND-04, activation is established, not yet effective, or not
        established. CAND-03, which separates issuance validity from current
        validity. None says what happens when nobody holds the office and nobody
        is empowered to act for it.</t>

        <t>Families. lifecycle-root-authority-succession, 13 cases.
        lifecycle-fiduciary-succession, 25 cases. activation-not-established, 19
        cases and 5 gates. lifecycle-expiry-and-renewal, 15 vectors.</t>

        <t>This does not establish that a vacancy ends office-based authority. It
        states that this document selects none of the three outcomes.</t>
      </section>

      <section anchor="oq-grants-before-departure" numbered="true" toc="default">
        <name>Grants Signed Just Before a Departure</name>
        <t>Where issuer standing is evaluated at issuance, an issuer who knows
        they are leaving can sign long-lived grants that stay valid after they
        are gone. A bounded lifetime for grants issued for an office, or a review
        when the office changes hands, are possible answers. Neither is
        specified.</t>

        <t><strong>What is unresolved.</strong> Whether anything bounds what an issuer who knows they are leaving may sign, for example a bounded lifetime for office grants or a review when the office changes hands.</t>

        <t><strong>Why the current evidence does not settle it.</strong> Issuer standing is evaluated at issuance and the families exercise it there. None of them carries an issuer signing in anticipation of a departure, because the record of such a grant is indistinguishable from any other grant signed at the same instant.</t>

        <t><strong>What this document requires until it is settled.</strong> Nothing beyond the temporal facet the grant itself carries. Issuance validity and current validity stay separate findings under APS-PRIN-TWO-FINDINGS, and a grant signed before a departure is valid until an ordinary lifecycle event ends it.</t>

        <t><strong>Scope.</strong> Candidate. It touches the succession mechanism and no requirement of APS Core conformance.</t>

        <t>Cases. LC-A-016, replacement authority pre-committed at issuance
        rather than issued after the fact. LC-C-007, whether the grant was bound
        to the office or to the person. LC-H-010, a resignation effective on
        delivery of notice, which fixes when the departure happened. LC-I-009, an
        interim holder extending its own reach.</t>

        <t>Candidates. CAND-03, which separates issuance validity from current
        validity and deliberately does not answer this. CAND-13, which covers
        pre-commitment and not a bound on what an outgoing issuer may
        pre-commit.</t>

        <t>Families. lifecycle-root-authority-succession, 13 cases.
        lifecycle-principal-events, 32 cases. lifecycle-agent-renunciation, 13
        cases. lifecycle-expiry-and-renewal, 15 vectors.</t>

        <t>This does not establish that such grants are invalid. It states that
        nothing here bounds what an outgoing issuer may sign.</t>
      </section>

      <section anchor="oq-authority-rollback" numbered="true" toc="default">
        <name>Authority Rollback</name>
        <t>Restoring a backup, a snapshot or a lagging replica can bring back
        authority state from before a revocation. An authority epoch, or an
        append-only record of revocations that a restore has to replay, would
        stop a restore from reviving revoked authority. Neither is specified
        here, and what a verifier should return after a restore is not
        tested.</t>

        <t><strong>What is unresolved.</strong> What a verifier returns after a restore, and what a verifier does when its own remembered high-water mark was itself restored from stale state.</t>

        <t><strong>Why the current evidence does not settle it.</strong> The rollback family exercises the rejection of stale authority: a presented value that regressed against an established high-water mark is refused. It carries no case in which the remembered mark is the thing that was restored, so it is not evidence about recovery from stale verifier memory.</t>

        <t><strong>What this document requires until it is settled.</strong> An enforcement point does not act on a state older than the newest it has established for that subject, under APS-LC-EPOCH-NO-REGRESSION, and refuses rather than resolving by recency of write. An implementation claiming the epoch feature defines its stale-verifier-state handling or reports the feature unsupported, under APS-LC-EPOCH-FEATURE-DEFINITION.</t>

        <t><strong>Scope.</strong> Candidate. It touches the authority-epoch mechanism and no requirement of APS Core conformance.</t>

        <t>Cases. LC-E-023, a faithfully restored process holding authority that
        may no longer be current. LC-F-016, a storage-layer partition
        resurrecting revoked authority below the application layer. LC-F-017, a
        revocation true at the source and false at a lagging replica. LC-F-018,
        regional enforcement points briefly disagreeing. LC-F-024, a lock holder
        whose pause outlasts its lease. LC-F-026, an isolated primary accepting
        writes nobody else will see.</t>

        <t>Candidates. CAND-08, which forbids acting on a state older than the
        newest established for that subject and requires an explicit attributable
        record to restore superseded authority.</t>

        <t>Families. authority-epoch-rollback, 12 cases.
        lifecycle-infrastructure-failure, 30 cases. conflicting-status-sources,
        14 cases.</t>

        <t>This does not establish that a restore revives revoked authority. It
        states that no rule here prevents it.</t>
      </section>

      <section anchor="oq-semantic-drift" numbered="true" toc="default">
        <name>Semantic Drift</name>
        <t>A grant can stay byte for byte the same while what it authorizes
        changes, because a tool, an API version or a resource classification
        changed underneath it. When a change in meaning should invalidate an
        earlier grant or approval, and how a verifier would detect it, is
        open.</t>

        <t><strong>What is unresolved.</strong> When a change in what a grant authorizes, with no change to the grant itself, should invalidate the grant or an approval under it, and how a verifier holding only records would detect such a change.</t>

        <t><strong>Why the current evidence does not settle it.</strong> The drift family exercises the pinned case, the unpinned case and a change of controller against a model-declared basis. Every one of those starts from something that was pinned or declared. No vector presents a change no party declared, because a fixture cannot supply evidence of a change nobody recorded.</t>

        <t><strong>What this document requires until it is settled.</strong> Where the authority model declares a class of referent change capability-relevant, continuity across such a change is established by something that pins it, under APS-LC-REFERENT-CONTINUITY-PINNED. Where nothing pins it, continuity is not established and the verdict says so. An unchanged name is never read as evidence of an unchanged referent.</t>

        <t><strong>Scope.</strong> Candidate. It touches the capability-binding mechanism and no requirement of APS Core conformance.</t>

        <t>Cases. LC-E-001, a stable model alias as a pointer with a documented
        default. LC-E-002, a valid grant whose named executor is gone. LC-E-027,
        a precedent for gating expanded capability behind re-consent. LC-E-033, a
        provider-side capability upgrade with no delegation-layer event.</t>

        <t>Candidates. CAND-07, a stable name does not establish stable
        semantics, which handles the pinned, unpinned and controller cases
        against a model-declared basis. CAND-11, a valid grant can be
        unexecutable. Whether a change in meaning should invalidate an earlier
        grant, and how a verifier would detect it unaided, stays open.</t>

        <t>Families. capability-binding-drift, 8 presentations and a declared
        defective fail set of 5. lifecycle-agent-side-events, 20
        presentations.</t>

        <t>This does not establish that a pinned referent is enough. It states
        that detection of a meaning change by a verifier holding only records is
        not specified.</t>
      </section>

      <section anchor="oq-notice-relying-parties" numbered="true" toc="default">
        <name>Notice and Relying Parties</name>
        <t>A revocation can be recorded at one moment and reach an agent, a
        gateway and an outside counterparty at different moments. What a relying
        party that acted on stale but authentic evidence is entitled to, and what
        evidence of notice a principal needs to show, is not defined here.</t>

        <t><strong>What is unresolved.</strong> What a relying party that acted on stale but authentic evidence is entitled to, and what evidence of notice a principal needs to show.</t>

        <t><strong>Why the current evidence does not settle it.</strong> The families exercise what a verifier establishes from records. Entitlement is not a finding a verifier returns from records, so no vector can assert it, and the reliance-notice family records the separation rather than resolving it.</t>

        <t><strong>What this document requires until it is settled.</strong> Recording a transition and observing it stay separate events. Where a profile makes a change effective on a party notice, the notice finding carries its own time and a verifier records a notice finding or records that it has none. This document states no entitlement for any party.</t>

        <t><strong>Scope.</strong> Candidate. It touches the principal and departure mechanism. No case behind this question states that a rule about human agents applies to an AI agent.</t>

        <t>Cases. LC-A-001, termination effective on the agent's notice rather
        than at the event. LC-A-027, a verifier's chain-is-void finding and a
        relying party's protected reliance as two facts. LC-A-028, two tiers of
        notice for known counterparties and for strangers. LC-H-006, a disputed
        root deposited with a neutral forum. LC-I-001, a re-registered identifier
        with no delegation-layer event marking the change of hands.</t>

        <t>Candidates. ANX-03, which separates chain validity from a party's
        knowledge and gives the notice finding its own timestamp. CAND-16, on
        when a recorded change becomes effective. ANX-03 proposes the separation
        and nothing about entitlement.</t>

        <t>Families. lifecycle-principal-events, 32 cases.
        lifecycle-third-party-reliance-notice, 12 vectors.
        lifecycle-multiple-principals-and-conflict, 92 vectors.
        lifecycle-identifier-reuse-and-rename, 13 presentations.</t>

        <t>The cases above come from bodies of law about human agents. Nothing
        here states that any of those rules applies to an AI agent, and nothing
        here establishes any entitlement for a relying party.</t>
      </section>

      <section anchor="oq-principal-authority" numbered="true" toc="default">
        <name>Associating a Principal with an Accepted Authority</name>

        <t>A verifier can accept a principal binding and accept a root
        authority basis independently, and still have established nothing
        about whether the two belong to one authority context. Accepting a
        root establishes that a chain has a head the verifier's trust policy
        admits. It does not establish which principal that authority
        represents.</t>

        <t><strong>What is unresolved.</strong> Which artifact or verifier
        state associates the principal axis with the accepted authority
        lineage for one action, and what standing the party supplying that
        association has to hold.</t>

        <t><strong>Why the current evidence does not settle it.</strong> This
        revision defines no artifact for the step from a principal to a first
        authority. PrincipalBindingV1 names the principal an agent acts for
        and is scoped to audiences and authority profiles. A root delegation
        names an issuer, a subject and an authority vector. Neither carries a
        reference to the other, so no family can present a substituted
        principal and a matching one as two vectors that a verifier separates,
        and none does.</t>

        <t><strong>What this document requires until it is settled.</strong>
        The association is profile and trust-policy dependent, over the
        binding, the accepted root basis and the authority-state material.
        Where it cannot be made it is not established, and a verifier does not
        infer it from agent identity or from root selection alone, which is the
        safe behavior until the question is settled. A verifier
        that cannot establish it does not report the action as taken for the
        principal the chain names.</t>

        <t><strong>Scope.</strong> Core. Every verification of every action
        passes through this arrow, which is why it is named here rather than
        left to a feature. The design work named for it is a component schema
        for the authority_state_ref of <xref target="decision-ref"/> binding
        the principal, the accepted root basis, the current status and the
        action. That schema is tested before any new object or
        decision-format change, and nothing in this revision depends on
        it.</t>

        <t>Cases. LC-D-004, a compromised operator identity acting as an
        implicit ancestor over many independent trees. LC-I-001, a
        re-registered identifier with no delegation-layer event marking the
        change of hands.</t>

        <t>Families. None. The security considerations name principal
        substitution as a failure class and name
        lifecycle-identifier-reuse-and-rename for the identifier half of it.
        No family binds a principal reference across a decision and an
        admission.</t>
      </section>

      <section anchor="oq-admission-record" numbered="true" toc="default">
        <name>A Durable Record of Admission</name>

        <t>The stage chain is intent, decision, result. Admission sits between
        the second and the third and produces nothing. Whether an approval was
        consumed is enforcement-boundary state keyed by the approval's
        identity, and it is not content of any record this document
        defines.</t>

        <t><strong>What is unresolved.</strong> Whether the admission
        transition should produce a signed record, and if it should, what that
        record's predecessor is, what a refusal before admission produces, and
        what becomes the predecessor of the action-result record.</t>

        <t><strong>Why the current evidence does not settle it.</strong> No
        family exercises a fourth stage. The family that pins the
        action-result stage supplies no predecessor in any of its cases, so
        the predecessor axis a fourth stage would depend on is reported as not
        checked throughout. A signed admission record would also not establish
        that the boundary performed consumption, reservation and dispatch
        atomically, so the record alone would not answer the question it looks
        like it answers.</t>

        <t><strong>What this document requires until it is settled.</strong> A
        verifier that holds no consumption state reports the approval-state
        axis as not established, under the axis discipline of
        <xref target="receipt-verification"/>, and does not report an action
        admitted from an approval that was issued, under
        APS-EVID-STATES-NOT-SYNONYMS. Evaluation alone never consumes an
        approval, and a refusal before admission leaves the approval
        unconsumed.</t>

        <t><strong>Scope.</strong> Core. The stage chain is core, so any
        durable admission record changes a Core construction rather than
        adding a feature beside it. Versioning, predecessor resolution and the
        handling of records written under this revision are settled together
        or not at all.</t>

        <t>Families. action-result-binding, 6 cases, with the predecessor axis
        not checked in all six. approval-single-use, 9 presentations, which
        exercises consumption at the boundary without producing a record
        of it.</t>
      </section>

      <section anchor="oq-crash-recovery" numbered="true" toc="default">
        <name>Recovery Across Consumption, Reservation and Dispatch</name>

        <t>Consumption of an approval is atomic. Reservation against every
        bounded ancestor is atomic. Dispatch is neither of those things and
        the three are not one transaction.</t>

        <t><strong>What is unresolved.</strong> What a boundary does after a
        failure between consumption and a durably established dispatch, how
        two concurrent admissions on one approval resolve beyond the
        requirement that consumption itself be atomic, and how an operation
        resumes without repeating its effect.</t>

        <t><strong>Why the current evidence does not settle it.</strong> The
        single-use family exercises a race pair at the boundary and admits the
        first presentation while refusing the second. That establishes
        serialisation of consumption. It does not reach a failure after
        consumption, because a fixture that stops a boundary mid-transaction
        would be testing the boundary's storage and not the protocol.</t>

        <t><strong>What this document requires until it is settled.</strong>
        The four moments the closed core already holds, which
        <xref target="d2e-retry-contract"/> reads together without adding to
        them. An idempotent reservation lookup is not permission to dispatch
        again, and a consumed approval does not become reusable because its
        reservation is still outstanding, both entailed by
        <xref target="policy-decision"/>, under which only an approval that has
        neither expired nor been consumed admits dispatch. A reservation is
        released only before dispatch or on trusted evidence that dispatch did
        not occur, which <xref target="cumulative-spend"/> states.</t>

        <t><strong>Scope.</strong> Core. The reservation contract is the
        core's. A portable recovery contract would have to be defined before
        any durable admission record could carry one, which is why the two
        questions are settled in that order.</t>

        <t>Families. approval-single-use, 9 presentations, for serialised
        consumption. lifecycle-infrastructure-failure, 30 cases, for the
        partition and restore shapes a recovery contract would have to
        survive.</t>
      </section>

      <section anchor="oq-conferral-authority" numbered="true" toc="default">
        <name>Whether Holding a Scope Establishes Authority to Confer It</name>

        <t>This question was drafted as a candidate lifecycle extension and
        is carried here instead, because the counterexample against it is
        unresolved.</t>

        <t><strong>What is unresolved.</strong> Whether an agent's holding a
        scope establishes that it may confer that scope on another party,
        including a child process it spawns or a copy of itself.</t>

        <t><strong>Why the current evidence does not settle it.</strong> The
        statement that conferral needs its own declared authority has a
        counterexample nothing in the drafting answers. Authority models exist
        in which conferral needs no separate grant, because a platform default
        creates the child with no explicit pass, and models exist in which a
        principal may grant the power to designate successors by name, office
        or function. Both are real models and the statement denies authority
        in both. The conferral family reaches an undeclared conferral right as
        a schema failure rather than as a finding about conferral, so its
        vectors do not separate the two readings.</t>

        <t><strong>What this document requires until it is settled.</strong>
        Nothing beyond what the closed core already states. Monotonic
        narrowing bounds what a child may receive and says nothing about who
        may create one, and depth exhaustion is a separate structural limit. A
        verifier does not report a conferral finding this document does not
        define.</t>

        <t><strong>Scope.</strong> Candidate. Nothing in APS Core conformance
        depends on it. Cases. LC-E-006, a subagent handing a held scope to a
        process it spawned. Families.
        lifecycle-conferral-without-authority, 10 vectors.</t>
      </section>

      <section anchor="oq-effectiveness-default" numbered="true" toc="default">
        <name>When a Recorded Lifecycle Change Becomes Effective</name>

        <t>This question was drafted as a candidate lifecycle extension and is
        carried here instead, because the counterexample against it is
        unresolved.</t>

        <t><strong>What is unresolved.</strong> What an authority model that
        declares no effectiveness rule for a change type falls back to.</t>

        <t><strong>Why the current evidence does not settle it.</strong> The
        drafted default was effective from the moment the change is recorded.
        The counterexample is the default itself. Effective on observation is
        equally defensible and is what a lagging enforcement point actually
        does, and a deployment that treats actions allowed by a lagging
        boundary inside a declared bound as a declared and bounded risk has
        chosen it deliberately. No family runs the same change under both
        readings, so nothing here distinguishes them.</t>

        <t><strong>What this document requires until it is settled.</strong> A
        verifier that treats a recorded change as effective records which rule
        it applied. Where the model declares a rule, the rule governs. Where
        it declares none, this document supplies no default and the
        effectiveness of the change at a given boundary is not
        established.</t>

        <t><strong>Scope.</strong> Candidate. This is not a freshness rule,
        which asks how old a verifier's answer is rather than whether the
        change took effect at all, and it is not a notice rule about third
        parties. Cases. LC-F-018, regional enforcement points briefly
        disagreeing. Families. conflicting-status-sources, 14 cases.
        lifecycle-infrastructure-failure, 30 cases.</t>
      </section>

      <section anchor="oq-non-issuer-revocation" numbered="true" toc="default">
        <name>Ending Authority Without Issuer Standing</name>

        <t>A party can hold standing to end an authority artifact it never
        issued. <xref target="lifecycle-concepts"/> names that standing and
        <xref target="ig-v2-break-glass"/> gives three shapes of it. For a direct
        revocation <xref target="revocation-cascade"/> names one party, the
        delegation's issuer, and the format at
        <xref target="revocation-record-format"/> carries one revoker member and
        requires it to equal that issuer.</t>

        <t><strong>What is unresolved.</strong> Whether a party holding lifecycle
        standing over an artifact it did not issue can end that artifact directly,
        and what record carries such an act.</t>

        <t><strong>Why the current evidence does not settle it.</strong> One
        requirement is keyed to the revoker member,
        APS-REC-REVOCATION-REVOKER-IS-ISSUER, which
        <xref target="revocation-record-format"/> states for that format and
        <xref target="requirement-matrix"/> marks specified and not exercised, and
        no vector named there presents a revocation from a party other than the
        issuer. A vector in either direction would need a standing source
        the corpus does not model, which is the same missing piece as the standing
        registry named elsewhere in this section.</t>

        <t><strong>What this document requires until it is settled.</strong> A
        direct revocation is the issuer's. A party with lifecycle standing that is
        not the issuer ends dependent authority by revoking its own ancestor grant,
        or through a suspension cause under
        <xref target="lifecycle-suspension"/>, which pauses use without ending the
        artifact. A verifier does not accept a revocation record whose revoker is
        not the named delegation's issuer, which the format at
        <xref target="revocation-record-format"/> carries as
        APS-REC-REVOCATION-REVOKER-IS-ISSUER for records under that format.</t>

        <t><strong>Scope.</strong> Core. The revocation rule is in the closed
        core, so a party other than the issuer is not admitted by claiming a
        feature.</t>

        <t>Cases. LC-B-008, authority ending completely and instantly from outside
        the delegation system. LC-B-025, one revoked licence invalidating every
        chain that depends on it at once.</t>

        <t>Families. lifecycle-outside-the-chain-standing, 22 vectors, for
        standing held from outside the chain. authority-revocation-record, 8
        vectors, which exercises the format for an issuer revocation only.</t>
      </section>

      <section anchor="oq-held" numbered="true" toc="default">
        <name>Two Items Held Out of This Revision</name>
        <t>The two items below were drafted, reviewed and left out on
        purpose. They are recorded here so that the sections they would touch
        are not read as settled. Both are held by a ruling rather than by a
        missing answer, which is why they are listed apart from the questions
        above.</t>

        <t>The cascade-derived and cascade-completion record formats. This
        revision now specifies one direct revocation record format, at
        <xref target="revocation-record-format"/>, which a family exercises
        against five independent negatives and a duplicate-offer case. That
        subsection defines neither a cascade-derived record nor a
        cascade-completion record, and no released package issues or verifies
        either. What is missing before this document could specify them is a
        family that settles who signs a cascade-derived record, how duplicates
        are treated, and on what basis a completion record could claim its set
        was complete, which is the question at
        <xref target="oq-teardown-completeness"/>. Until then the SHOULD of
        <xref target="revocation-evidence"/> and its profile-defined format
        stand, and a verifier without both the originating revocation record
        and a profile for its format reports the evidence cascade state as
        indeterminate, which does not change the authority result.</t>

        <t>The action-result predecessor binding. For an action-result record,
        the prev clause carries no BCP 14 keyword while the decision-reference
        equality in the same sentence carries MUST, and the step that validates
        prev and stage transitions during receipt verification carries none.
        Both reference implementations accept an action-result record whose prev
        names the action-intent record rather than the consumed policy decision.
        Opt-in predecessor binding shipped in the reference implementations and
        is recorded there as hardening rather than as a conformance fix, and the
        family that pins the action-result stage supplies no predecessor in any
        of its cases, so the predecessor axis is reported as not checked
        throughout. Two things a ruling has to settle first. Whether the
        action-intent to policy-decision link is made normative at the same time,
        since it is stated in the same unkeyworded form and is a different
        pairing with a different expected predecessor type. What a verifier that
        cannot obtain the predecessor reports, which on the axis discipline this
        document applies elsewhere is indeterminate rather than invalid, because
        an unobtainable predecessor is a gap in the verifier's evidence and not a
        defect in the record.</t>

        <t>Families. action-result-binding, 6 cases, with the predecessor axis
        not checked in all 6. receipt-decision-relation, 7 vectors.</t>

        <t>Neither item establishes a defect in this revision. Each records a
        place where this document states less than an implementation already
        does.</t>
      </section>

      <section anchor="oq-designs" numbered="true" toc="default">
        <name>Four Designs Under Consideration</name>
        <t>The four designs below are written down and are not part of this
        document. Each is stated with the one thing missing before it could
        enter, which in every case is a conformance family that exercises it.
        None of them is a commitment, and their presence here is not notice that
        a later revision will carry them.</t>

        <t>A root authority grant object. Authority delegation in this document
        starts from a record whose parent identifier is null, and acceptance of
        such a root is verifier policy rather than something the record
        establishes. A separate object for the step from a principal to the first
        authority would make that step checkable from records. Missing: no family
        exercises a record for that step, so every family starts from a chain
        whose root is accepted by configuration.</t>

        <t>A principal reference bound through the decision and the admission.
        The action-binding rule during receipt verification compares the supplied
        action input object's agent_id with the record's subject_agent. Both name
        the acting agent. A principal reference carried through the decision and
        then through the moment the approval is consumed would let a verifier
        establish that the action was admitted for the principal the chain names,
        and would bear on principal substitution. Missing: no family binds a
        principal reference across the decision and the admission point, so no
        vector distinguishes a substituted principal from a matching one at that
        boundary.</t>

        <t>An admission record between the decision and the result. Today the
        stage chain is intent, decision, result, and whether a decision was
        consumed is boundary state rather than record content, which is why the
        approval-state axis is not established for a verifier without access to
        that state. A fourth stage would make the admission itself a signed record, would give
        <xref target="d2e-execution-states"/> a record to rest on, would make a refusal a signed record rather than an absence, and
        would make the result's predecessor the admission rather than the
        decision. Missing: no family exercises a fourth stage, and the
        predecessor axis that a fourth stage would depend on is not checked in
        any case of the family that pins the action-result stage.</t>

        <t>A facet partition into core and profile dimensions. The authority
        object here carries exactly seven facets, a missing facet is invalid
        rather than an implicit unconstrained value, and a profile change on a
        facet is unsupported rather than narrower. Splitting the set into facets
        every implementation compares and facets a profile declares would let a
        deployment add a dimension without making every other implementation
        report unsupported. Missing: no family exercises a facet set other than
        the seven, so no vector shows what a verifier should return for a facet
        it does not know.</t>

        <t>None of the four establishes a gap that this revision has to close.
        Each records a design whose entry condition is a family that does not
        exist.</t>
      </section>
    </section>
    </section>

    <section anchor="future-work" numbered="true" toc="default">
      <name>Future Work</name>
            <t>Future work includes a uniform wire vocabulary for verifier claims
and evidence states across APS artifacts.  This revision defines
principal claim levels (<xref target="principal-binding"/>), key and evidence resolution
outcomes (<xref target="external-signer-keys"/> and <xref target="receipt-evidence"/>), and separate receipt-verification
axes (<xref target="receipt-verification"/>).  Generalizing those results into one normative
vocabulary remains future work.  A crosswalk from those results to
whatever vocabulary the wider evidence-sufficiency discussion settles
on <xref target="COSAI-189"/> is future work on the same footing.
This revision does not rename its own outcomes against an unadopted
proposal.</t>
      <t>Cross-implementation profiles for DecisionRefV1 also remain future
work.  <xref target="decision-ref"/> defines the digest computation, while
authority_state, policy_input, and decision_context contain
deployment-defined structures.  A profile that requires independent
recomputation across implementations must define those component
schemas and disclosure rules.  The contribution-attribution and
beneficiary-attribution layers (<xref target="attribution-axes"/>) and the normative
specification of institutional governance structures (<xref target="institutional-governance-v2"/>)
remain companion work.</t>
      <t>A profile carrying a ReceiptV1 record (<xref target="receipt-envelope"/>) as a signed
statement for registration with a Transparency Service
<xref target="RFC9943"/> also remains future work.  <xref target="related-work"/> positions
the envelope against that architecture.  This revision does not define
the carriage, the protected claims such a registration requires, or
what a relying party may conclude from a registration receipt.</t>
      <t>Operationally independent witnessing of agent state remains
partially addressed.  This revision separates proof of possession
from signer authority (<xref target="agent-passport"/>, <xref target="key-rotation"/>, <xref target="external-signer-keys"/> and <xref target="receipt-crypto"/>), defines
separately signed principal bindings and claim levels (<xref target="principal-binding"/>),
and keeps attestation provenance separate from verification status
(<xref target="attestation-provenance"/>).  These mechanisms constrain what a verifier may
conclude from signed claims.  They do not provide a general witness
for the internal state of a compromised-but-signing agent, which
remains open.</t>
      <t>Reasoned reaffirmation and constitutional change are future work.
      This revision states that a recorded revocation is irreversible, that
      restoring superseded authority is a new record from a party with
      lifecycle standing rather than a reversal, and that a successor inherits
      no tree. It states nothing about the case where the rule that grants
      authority changes rather than the authority itself: an institution
      amending its own charter, a principal changing the terms on which every
      grant beneath it stands, or a party reaffirming an authority for a
      stated reason after the condition that suspended it is gone. Each of
      those needs a record whose subject is a rule rather than an artifact,
      and needs a verifier to decide what a change to a rule does to the
      artifacts issued under the previous rule. Nothing here specifies either.
      Entry would need a family that exercises a rule change against the
      artifacts under it, which no family in the corpus does.</t>
    </section>
  </middle>

  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119"><front><title>Key words for use in RFCs to Indicate Requirement Levels</title><author fullname="S. Bradner"/><date year="1997" month="March"/></front><seriesInfo name="BCP" value="14"/><seriesInfo name="RFC" value="2119"/></reference>
        <reference anchor="RFC3339" target="https://www.rfc-editor.org/info/rfc3339"><front><title>Date and Time on the Internet: Timestamps</title><author fullname="G. Klyne"/><author fullname="C. Newman"/><date year="2002" month="July"/></front><seriesInfo name="RFC" value="3339"/></reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174"><front><title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title><author fullname="B. Leiba"/><date year="2017" month="May"/></front><seriesInfo name="BCP" value="14"/><seriesInfo name="RFC" value="8174"/></reference>
        <reference anchor="RFC8032" target="https://www.rfc-editor.org/info/rfc8032"><front><title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title><author fullname="S. Josefsson"/><author fullname="I. Liusvaara"/><date year="2017" month="January"/></front><seriesInfo name="RFC" value="8032"/></reference>
        <reference anchor="RFC8785" target="https://www.rfc-editor.org/info/rfc8785"><front><title>JSON Canonicalization Scheme (JCS)</title><author fullname="A. Rundgren"/><author fullname="B. Jordan"/><author fullname="S. Erdtman"/><date year="2020" month="June"/></front><seriesInfo name="RFC" value="8785"/></reference>
        <reference anchor="RFC6234" target="https://www.rfc-editor.org/info/rfc6234"><front><title>US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)</title><author fullname="D. Eastlake 3rd"/><author fullname="T. Hansen"/><date year="2011" month="May"/></front><seriesInfo name="RFC" value="6234"/></reference>
        <reference anchor="UAX15" target="https://www.unicode.org/reports/tr15/"><front><title>Unicode Standard Annex #15: Unicode Normalization Forms</title><author><organization>The Unicode Consortium</organization></author></front></reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="DID-KEY" target="https://w3c-ccg.github.io/did-key-spec/"><front><title>The did:key Method</title><author><organization>W3C Credentials Community Group</organization></author><date year="2024"/></front></reference>
        <reference anchor="RFC6973" target="https://www.rfc-editor.org/info/rfc6973"><front><title>Privacy Considerations for Internet Protocols</title><author fullname="A. Cooper"/><author fullname="H. Tschofenig"/><author fullname="B. Aboba"/><author fullname="J. Peterson"/><author fullname="J. Morris"/><author fullname="M. Hansen"/><author fullname="R. Smith"/><date year="2013" month="July"/></front><seriesInfo name="RFC" value="6973"/><seriesInfo name="DOI" value="10.17487/RFC6973"/></reference>
        <reference anchor="MCP" target="https://modelcontextprotocol.io/specification/2026-07-28"><front><title>Model Context Protocol Specification, Version 2026-07-28</title><author><organization>Model Context Protocol Project</organization></author><date year="2026" month="July"/></front></reference>
        <reference anchor="A2A" target="https://a2a-protocol.org/"><front><title>Agent2Agent (A2A) Protocol Specification</title><author><organization>A2A Project</organization></author></front></reference>
        <reference anchor="DID-CORE" target="https://www.w3.org/TR/did-core/"><front><title>Decentralized Identifiers (DIDs) v1.0</title><author><organization>W3C</organization></author><date year="2022" month="July"/></front></reference>
        <reference anchor="PEDIGREE" target="https://datatracker.ietf.org/doc/draft-rampalli-pedigree/"><front><title>PEDIGREE: Verifiable Delegation Identity for Agentic AI Systems</title><author initials="K." surname="Rampalli"/><date year="2026" month="April"/></front><seriesInfo name="Internet-Draft" value="draft-rampalli-pedigree-00"/></reference>
        <reference anchor="DRP" target="https://datatracker.ietf.org/doc/draft-nelson-agent-delegation-receipts/"><front><title>Delegation Receipt Protocol for AI Agent Authorization</title><author initials="R." surname="Nelson"/><date year="2026" month="June"/></front><seriesInfo name="Internet-Draft" value="draft-nelson-agent-delegation-receipts-10"/></reference>
        <reference anchor="ACTION-REF" target="https://datatracker.ietf.org/doc/draft-etcheverry-action-ref/"><front><title>Action Reference: A Deterministic Identifier for Agent Actions</title><author initials="P." surname="Etcheverry"/><author initials="K." surname="Ives"/><date year="2026" month="August"/></front><seriesInfo name="Internet-Draft" value="draft-etcheverry-action-ref-03"/></reference>
        <reference anchor="WIMSE-XORG" target="https://datatracker.ietf.org/doc/draft-reece-wimse-cross-org-delegation/"><front><title>Cross-Organizational Delegation for Workload and Agent Identity: Problem Statement and Requirements</title><author initials="M." surname="Reece"/><date year="2026" month="August"/></front><seriesInfo name="Internet-Draft" value="draft-reece-wimse-cross-org-delegation-02"/></reference>
        <reference anchor="OAUTH-CHAIN-DEL" target="https://datatracker.ietf.org/doc/draft-liu-oauth-chain-delegation/"><front><title>Delegation Chain for OAuth 2.0</title><author initials="D." surname="Liu"/><author initials="H." surname="Zhu"/><author initials="S." surname="Krishnan"/><author initials="A." surname="Parecki"/><date year="2026" month="June"/></front><seriesInfo name="Internet-Draft" value="draft-liu-oauth-chain-delegation-00"/></reference>
        <reference anchor="OAUTH-AUTHZ-EV" target="https://datatracker.ietf.org/doc/draft-liu-oauth-authorization-evidence/"><front><title>Authorization Evidence and Audit Trail for OAuth 2.0 Access Tokens</title><author initials="D." surname="Liu"/><author initials="H." surname="Zhu"/><author initials="S." surname="Krishnan"/><author initials="A." surname="Parecki"/><date year="2026" month="June"/></front><seriesInfo name="Internet-Draft" value="draft-liu-oauth-authorization-evidence-01"/></reference>
        <reference anchor="OAUTH-INTEGRATION" target="https://datatracker.ietf.org/doc/draft-liu-ai-agent-authorization-integration/"><front><title>AI Agent Authorization Integration Framework</title><author initials="D." surname="Liu"/><author initials="H." surname="Zhu"/><author initials="S." surname="Krishnan"/><author initials="A." surname="Parecki"/><author initials="H." surname="Xue"/><date year="2026" month="July"/></front><seriesInfo name="Internet-Draft" value="draft-liu-ai-agent-authorization-integration-00"/></reference>
        <reference anchor="OAUTH-REGO" target="https://datatracker.ietf.org/doc/draft-liu-oauth-rego-policy/"><front><title>Rego Policy Language for OAuth 2.0 Authorization</title><author initials="D." surname="Liu"/><author initials="H." surname="Zhu"/><author initials="S." surname="Krishnan"/><author initials="A." surname="Parecki"/><author initials="H." surname="Xue"/><date year="2026" month="June"/></front><seriesInfo name="Internet-Draft" value="draft-liu-oauth-rego-policy-00"/></reference>
        <reference anchor="EP-AEC" target="https://datatracker.ietf.org/doc/draft-schrock-ep-authorization-evidence-chain/"><front><title>Authorization Evidence Chains: Composing Heterogeneous Agent-Action Evidence (EP-AEC)</title><author initials="I." surname="Schrock"/><date year="2026" month="September"/></front><seriesInfo name="Internet-Draft" value="draft-schrock-ep-authorization-evidence-chain-07"/></reference>
        <reference anchor="EP-AUTHINTRO" target="https://datatracker.ietf.org/doc/draft-schrock-ep-authority-introduction/"><front><title>Authority Documents and Scoped Authority for Agent-Action Evidence</title><author initials="I." surname="Schrock"/><date year="2026" month="August"/></front><seriesInfo name="Internet-Draft" value="draft-schrock-ep-authority-introduction-03"/></reference>
        <reference anchor="EP-HUMANAUTH" target="https://datatracker.ietf.org/doc/draft-schrock-human-authorization-binding/"><front><title>Binding Named-Human Authorization Evidence into Agent-Action Records</title><author initials="I." surname="Schrock"/><date year="2026" month="July"/></front><seriesInfo name="Internet-Draft" value="draft-schrock-human-authorization-binding-00"/></reference>
        <reference anchor="SCITT-CAPSULE" target="https://datatracker.ietf.org/doc/draft-rampalli-scitt-capsule-provenance-binding/"><front><title>Binding Per-Action Authorization and Memory Provenance into Agent Action Capsules</title><author initials="K." surname="Rampalli"/><date year="2026" month="July"/></front><seriesInfo name="Internet-Draft" value="draft-rampalli-scitt-capsule-provenance-binding-00"/></reference>
        <reference anchor="AGENT-ID-FW" target="https://datatracker.ietf.org/doc/draft-duda-agent-id-framework/"><front><title>Self-Certifying Identity and Capability-Based Delegation for Autonomous AI Agents</title><author initials="A." surname="Duda"/><author initials="M." surname="Korczynski"/><author initials="O." surname="Hureau"/><author initials="S." surname="Fernandez"/><author initials="J." surname="Zhang"/><author initials="H." surname="Labiod"/><date year="2026" month="June"/></front><seriesInfo name="Internet-Draft" value="draft-duda-agent-id-framework-00"/></reference>
        <reference anchor="AGENT-ID-ARCH" target="https://datatracker.ietf.org/doc/draft-beyer-agent-identity-architecture/"><front><title>Architecture for Human-Anchored Agent Identity, Delegation, and Provenance</title><author initials="B. W." surname="Beyer"/><date year="2026" month="April"/></front><seriesInfo name="Internet-Draft" value="draft-beyer-agent-identity-architecture-00"/></reference>
        <reference anchor="AIMS" target="https://datatracker.ietf.org/doc/draft-ietf-wimse-aims/"><front><title>AI Identity Management System</title><author initials="P." surname="Kasselman"/><author initials="J." surname="Lombardo"/><author initials="Y." surname="Rosomakho"/><author initials="B." surname="Campbell"/><author initials="N." surname="Steele"/><author initials="A." surname="Parecki"/><date year="2026" month="September"/></front><seriesInfo name="Internet-Draft" value="draft-ietf-wimse-aims-00"/></reference>
        <reference anchor="AIP-DELEGATION" target="https://datatracker.ietf.org/doc/draft-singla-agent-identity-protocol/"><front><title>Agent Identity Protocol (AIP): Decentralized Identity and Delegation for AI Agents</title><author initials="P." surname="Singla"/><date year="2026" month="June"/></front><seriesInfo name="Internet-Draft" value="draft-singla-agent-identity-protocol-03"/></reference>
        <reference anchor="AIP-ENFORCEMENT" target="https://datatracker.ietf.org/doc/draft-aip-agent-identity-protocol/"><front><title>Agent Identity Protocol: Agentic Authentication and Authorized Policy Enforcement</title><author initials="J." surname="Cao"/><author initials="C." surname="Arango Gutierrez"/><date year="2026" month="March"/></front><seriesInfo name="Internet-Draft" value="draft-aip-agent-identity-protocol-00"/><refcontent>expired 17 September 2026</refcontent></reference>

        <reference anchor="APS-NARROWING" target="https://doi.org/10.5281/zenodo.18932404">
          <front>
            <title>Monotonic Narrowing for Agent Authority</title>
            <author fullname="Tymofii Pidlisnyi"/>
            <date year="2026" month="March"/>
          </front>
        </reference>
        <reference anchor="APS-FACETED" target="https://doi.org/10.5281/zenodo.19260073">
          <front>
            <title>Faceted Authority Attenuation</title>
            <author fullname="Tymofii Pidlisnyi"/>
            <date year="2026" month="March"/>
          </front>
        </reference>
        <reference anchor="APS-EVIDENCE-GAP" target="https://doi.org/10.5281/zenodo.19914628">
          <front>
            <title>The Evidence-Safety Gap in Cryptographic Agent Governance</title>
            <author fullname="Tymofii Pidlisnyi"/>
            <date year="2026" month="April"/>
          </front>
        </reference>
        <reference anchor="OAUTH-ID-JAG" target="https://datatracker.ietf.org/doc/draft-ietf-oauth-identity-assertion-authz-grant/">
          <front>
            <title>Identity Assertion JWT Authorization Grant</title>
            <author fullname="Aaron Parecki"/>
            <author fullname="Karl McGuinness"/>
            <author fullname="Brian Campbell"/>
            <date year="2026" month="May"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-identity-assertion-authz-grant-04"/>
        </reference>
        <reference anchor="RFC9943" target="https://www.rfc-editor.org/info/rfc9943"><front><title>An Architecture for Trustworthy and Transparent Digital Supply Chains</title><author fullname="H. Birkholz"/><author fullname="A. Delignat-Lavaud"/><author fullname="C. Fournet"/><author fullname="Y. Deshpande"/><author fullname="S. Lasker"/><date year="2026" month="June"/></front><seriesInfo name="RFC" value="9943"/></reference>
        <reference anchor="RFC9942" target="https://www.rfc-editor.org/info/rfc9942"><front><title>CBOR Object Signing and Encryption (COSE) Receipts</title><author fullname="O. Steele"/><author fullname="H. Birkholz"/><author fullname="A. Delignat-Lavaud"/><author fullname="C. Fournet"/><date year="2026" month="June"/></front><seriesInfo name="RFC" value="9942"/></reference>
        <reference anchor="RFC8693" target="https://www.rfc-editor.org/info/rfc8693"><front><title>OAuth 2.0 Token Exchange</title><author fullname="M. Jones"/><author fullname="A. Nadalin"/><author fullname="B. Campbell"/><author fullname="J. Bradley"/><author fullname="C. Mortimore"/><date year="2020" month="January"/></front><seriesInfo name="RFC" value="8693"/></reference>
        <reference anchor="RFC9396" target="https://www.rfc-editor.org/info/rfc9396"><front><title>OAuth 2.0 Rich Authorization Requests</title><author fullname="T. Lodderstedt"/><author fullname="J. Richer"/><author fullname="B. Campbell"/><date year="2023" month="May"/></front><seriesInfo name="RFC" value="9396"/></reference>
        <reference anchor="OAUTH-ACTOR-CHAIN" target="https://datatracker.ietf.org/doc/draft-mw-oauth-actor-chain/"><front><title>Cryptographically Verifiable Actor Chains for OAuth 2.0 Token Exchange</title><author initials="A." surname="Prasad"/><author initials="R." surname="Krishnan"/><author initials="D." surname="Lopez"/><author initials="S." surname="Addepalli"/><date year="2026" month="June"/></front><seriesInfo name="Internet-Draft" value="draft-mw-oauth-actor-chain-01"/></reference>
        <reference anchor="OAUTH-ACTOR-PROFILE" target="https://datatracker.ietf.org/doc/draft-mcguinness-oauth-actor-profile/"><front><title>OAuth Actor Profile for Delegation</title><author initials="K." surname="McGuinness"/><date year="2026" month="April"/></front><seriesInfo name="Internet-Draft" value="draft-mcguinness-oauth-actor-profile-00"/></reference>
        <reference anchor="OAUTH-REQ-DEL-CHAIN" target="https://datatracker.ietf.org/doc/draft-zehavi-oauth-authz-req-del-chain/"><front><title>OAuth Authorization Request Delegation Chain</title><author initials="Y." surname="Zehavi"/><date year="2026" month="September"/></front><seriesInfo name="Internet-Draft" value="draft-zehavi-oauth-authz-req-del-chain-01"/></reference>
        <reference anchor="OAUTH-REVOC-CLOSURE" target="https://datatracker.ietf.org/doc/draft-watts-oauth-agent-revocation-closure/"><front><title>Revocation Closure for Agentic Authorization Systems</title><author initials="D." surname="Watts"/><date year="2026" month="September"/></front><seriesInfo name="Internet-Draft" value="draft-watts-oauth-agent-revocation-closure-00"/></reference>
        <reference anchor="AIP-IBCT" target="https://datatracker.ietf.org/doc/draft-prakash-aip/"><front><title>Agent Identity Protocol (AIP): Verifiable Delegation for AI Agent Systems</title><author initials="S." surname="Prakash"/><date year="2026" month="August"/></front><seriesInfo name="Internet-Draft" value="draft-prakash-aip-01"/></reference>
        <reference anchor="SCITT-AGENT-RECEIPT" target="https://datatracker.ietf.org/doc/draft-noa-scitt-ai-agent-receipt/"><front><title>A SCITT Profile for AI-Agent Action Receipts</title><author initials="T." surname="Toraman"/><date year="2026" month="August"/></front><seriesInfo name="Internet-Draft" value="draft-noa-scitt-ai-agent-receipt-01"/></reference>
        <reference anchor="SCITT-ACTION-CAPSULE" target="https://datatracker.ietf.org/doc/draft-mih-scitt-agent-action-capsule/"><front><title>An Agent Action Capsule Profile for SCITT</title><author initials="S." surname="Mih"/><date year="2026" month="September"/></front><seriesInfo name="Internet-Draft" value="draft-mih-scitt-agent-action-capsule-05"/></reference>
        <reference anchor="VAARA-RECEIPT" target="https://datatracker.ietf.org/doc/draft-sirkkavaara-vaara-receipt/"><front><title>The Vaara Receipt: A Recomputable Receipt Format for Decisions About Autonomous Actions</title><author initials="H." surname="Sirkkavaara"/><date year="2026" month="September"/></front><seriesInfo name="Internet-Draft" value="draft-sirkkavaara-vaara-receipt-11"/></reference>
        <reference anchor="MCP-SEP-2787" target="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2787"><front><title>SEP-2787: Tool call attestation</title><author><organization>Model Context Protocol Project</organization></author><date year="2026"/></front><refcontent>specification enhancement proposal, closed 22 September 2026</refcontent></reference>
        <reference anchor="MCP-SEP-2817" target="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2817"><front><title>SEP-2817: AI Invocation Audit Context in Request _meta</title><author><organization>Model Context Protocol Project</organization></author><date year="2026"/></front><refcontent>specification enhancement proposal, open</refcontent></reference>
        <reference anchor="MCP-SEP-2828" target="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2828"><front><title>SEP: Server-Side Signed Execution Record for MCP Tool Calls</title><author><organization>Model Context Protocol Project</organization></author><date year="2026"/></front><refcontent>specification enhancement proposal, withdrawn by its author 18 July 2026</refcontent></reference>
        <reference anchor="MCP-SEP-3004" target="https://github.com/modelcontextprotocol/modelcontextprotocol/pull/3004"><front><title>SEP-3004: Tamper-Evident Audit Record Contract</title><author><organization>Model Context Protocol Project</organization></author><date year="2026"/></front><refcontent>specification enhancement proposal, closed 22 September 2026</refcontent></reference>
        <reference anchor="AUTHZEN" target="https://openid.net/specs/authorization-api-1_0-final.html"><front><title>Authorization API 1.0</title><author initials="O." surname="Gazitt"/><author initials="D." surname="Brossard"/><author initials="A." surname="Tulshibagwale"/><date year="2026" month="January"/></front><refcontent>OpenID AuthZEN, Final</refcontent></reference>
        <reference anchor="COSAI-149" target="https://github.com/cosai-oasis/ws4-secure-design-agentic-systems/issues/149"><front><title>Agent Manifest: a signed, pre-execution declaration layer for agentic systems</title><author><organization>Coalition for Secure AI, Workstream 4</organization></author><date year="2026" month="July"/></front><refcontent>proposal, open</refcontent></reference>
        <reference anchor="COSAI-189" target="https://github.com/cosai-oasis/ws4-secure-design-agentic-systems/issues/189"><front><title>Evidence sufficiency, and what a verifier may conclude when evidence is absent</title><author><organization>Coalition for Secure AI, Workstream 4</organization></author><date year="2026" month="September"/></front><refcontent>proposal, open</refcontent></reference>
        <reference anchor="COSAI-205" target="https://github.com/cosai-oasis/ws4-secure-design-agentic-systems/issues/205"><front><title>Define Decommissioning as an ADLC Phase and CoSAI Risk Map Stage</title><author><organization>Coalition for Secure AI, Workstream 4</organization></author><date year="2026" month="September"/></front><refcontent>proposal, open</refcontent></reference>
        <reference anchor="IETF-WIMSE-CHARTER" target="https://datatracker.ietf.org/doc/charter-ietf-wimse/"><front><title>Workload Identity in Multi System Environments (wimse) Working Group Charter</title><author><organization>IETF</organization></author><date year="2026" month="March"/></front></reference>
        <reference anchor="IETF-DAWN-CHARTER" target="https://datatracker.ietf.org/doc/charter-ietf-dawn/"><front><title>Discovery of Agents With Names (dawn) Proposed Working Group Charter</title><author><organization>IETF</organization></author><date year="2026" month="September"/></front></reference>
        <reference anchor="IETF-AGENTPROTO-CHARTER" target="https://datatracker.ietf.org/doc/charter-ietf-agentproto/"><front><title>Agent Communication Protocols (agentproto) Proposed Working Group Charter</title><author><organization>IETF</organization></author><date year="2026" month="September"/></front></reference>
        <reference anchor="APS-LIFECYCLE" target="https://github.com/aeoess/agent-authority-lifecycle/tree/1e2bab7ccee3682a5dd40ccd59f8c87a4afc07e1"><front><title>Authority Lifecycle for Long-Running AI Agents</title><author fullname="Tymofii Pidlisnyi"/><date year="2026"/></front><refcontent>version 0.2.0-draft, commit 1e2bab7ccee3682a5dd40ccd59f8c87a4afc07e1, work by this document's author</refcontent></reference>
        <reference anchor="APS-CONFORMANCE" target="https://github.com/Agent-Authority-Conformance/aps-conformance-suite/tree/5829e2ff00d75f49ce21e9d87e756658deb1ef33"><front><title>APS Conformance Suite</title><author fullname="Tymofii Pidlisnyi"/><date year="2026"/></front><refcontent>merge commit 5829e2ff00d75f49ce21e9d87e756658deb1ef33, work by this document's author</refcontent></reference>
      </references>
    </references>

    <section anchor="implementation-status" numbered="true" toc="default">
      <name>Implementation Status</name>
      <t>This section records the open-source implementations maintained by
      this document's author, as of 24 September 2026. It is informative and
      does not define APS conformance. The results below record consistency
      among artifacts maintained by this document's author and do not
      establish independent implementation or adoption. No conformance run was
      performed for this revision beyond the one recorded under
      <xref target="revocation-record-format"/>.</t>

      <t>What the lines below rest on. Every Implemented line in this appendix,
      and every yes in the implementation columns of
      <xref target="requirement-matrix"/>, comes from reading the sources of
      agent-passport-system 7.2.0 on npm and agent-passport-system 4.2.0 on PyPI.
      No run backs any of them except the authority-revocation-record run recorded
      under <xref target="revocation-record-format"/>. A vector named anywhere in
      this document under an identifier that
      <xref target="requirement-matrix"/> marks specified and not exercised
      carries no assertion keyed to that identifier, and is named because the
      family reaches the same subject matter.</t>

      <t>The releases described here are the TypeScript package
      "agent-passport-system" 7.2.0 (npm), the Python package
      "agent-passport-system" 4.2.0 (PyPI), the npm package
      "agent-passport-system-mcp" 6.1.0, and the Go repository at
      https://github.com/aeoess/agent-passport-go at v0.7.0. The TypeScript
      and Python packages carry both a pre-draft record line and a
      draft-native line, and only the draft-native line implements the wire
      formats of <xref target="agent-passport"/>,
      <xref target="principal-binding"/> and
      <xref target="faceted-attenuation"/>. The Go repository implements a
      subset centred on canonicalization, action-reference computation,
      verification and, since v0.7.0, issuance. The MCP package exposes
      protocol-layer tools. The enforcement boundary described in
      <xref target="gateway-reference-architecture"/> is a separate deployment
      component and is not part of the published packages. The description in
      that section was read from the Agent Passport Gateway repository at
      https://github.com/aeoess/agent-passport-gateway, at commit
      05a6aac8f7261d1866316fe03bd91fe0613dfaf5 of 22 September 2026. No A2A
      binding is specified by this document, and the released A2A adapter code is
      experimental.</t>

      <t>The lifecycle modules of
      <xref target="authority-lifecycle"/> ship in both packages as
      experimental and opt-in surfaces: activation, bounds,
      capability-binding, authority-state, chain-selection, lifecycle-state,
      status-coverage and suspension. Opt-in means an application that does
      not import them gets none of their behavior, and experimental means the
      packages' own changelogs decline to promise their surfaces are
      stable.</t>

      <section anchor="impl-exercised" numbered="true" toc="default">
        <name>Implemented and Exercised</name>
        <t>These mechanisms are implemented in the releases above and are
        covered by those packages' own test suites.</t>
        <ul spacing="normal">
          <li>The passport of <xref target="agent-passport"/> and the
          principal binding of <xref target="principal-binding"/>, in the
          closed wire shapes those sections define.</li>
          <li>Per-key validity-window selection at the artifact's signed
          issuance time, and the resolution outcomes of
          <xref target="external-signer-keys"/>, including the ambiguous
          outcome for a duplicated key identifier.</li>
          <li>AuthorityDelegationV1 of <xref target="faceted-attenuation"/>
          with all seven facets inside the signed content, and the component
          orders of <xref target="component-orders"/>.</li>
          <li>Phase-major chain verification of
          <xref target="chain-verification"/>, including the
          unrecognized-revocation-outcome rule and the root exemption from the
          not_before rule, except for the timestamp behavior recorded under
          the known deviations below.</li>
          <li>The revocation record format of
          <xref target="revocation-record-format"/>. Both packages issue and
          verify it. The authority-revocation-record family reports 8 pass, 0
          fail and 0 not_supported on each, asserting the state, the valid
          flag and the full failure list including message strings. That
          family is merged into the conformance suite at commit
          5829e2ff00d75f49ce21e9d87e756658deb1ef33. Both packages also decide a
          record whose revoker member differs from the named delegation's issuer
          as invalid under a revoker-not-issuer reason code and refuse to issue
          one, which is APS-REC-REVOCATION-REVOKER-IS-ISSUER. That behavior is
          implemented in both and no vector in the family reaches it, so
          <xref target="requirement-matrix"/> marks the identifier specified and
          not exercised. The subsection is a
          Candidate feature because supporting this one format is not a
          requirement of APS Core.</li>
          <li>Single-chain selection with no union across chains, which is the
          only continuity rule of <xref target="authority-lifecycle"/> whose
          module both packages ship as stable rather than experimental.</li>
          <li>The action_ref of <xref target="action-reference"/> and the
          external correlation form of <xref target="external-correlation"/>,
          exercised across the TypeScript, Python and Go implementations with
          shared known-answer vectors.</li>
          <li>The ReceiptV1 envelope of <xref target="receipt-envelope"/>, the
          identifier and signature constructions of
          <xref target="receipt-crypto"/>, and the three stages of
          <xref target="receipt-stages"/>. Both packages accept the expected
          enforcement-boundary identity as a verifier trust input and perform
          the <xref target="receipt-verification"/> step 4 comparison against
          the receipt issuer.</li>
          <li>The decision_ref of <xref target="decision-ref"/> over all five
          component references, and the receipt-to-decision binding and its
          temporal relation, which the receipt-decision-relation family
          exercises over seven vectors.</li>
          <li>The strict RFC 8785 <xref target="RFC8785"/> canonicalization,
          checked in continuous integration for byte-identical output against
          independent RFC 8785 implementations.</li>
        </ul>
        <t>A conformance fixture set is published at
        https://github.com/Agent-Authority-Conformance/aps-conformance-suite.
        Current versions and results are maintained at
        https://github.com/aeoess/agent-passport-system.</t>
      </section>

      <section anchor="impl-not-implemented" numbered="true" toc="default">
        <name>Specified but Not Implemented</name>
        <t>The following mechanisms are specified by this document and
        implemented by no released package. The mechanism list is followed by the
        identifier list generated from the implementation columns of
        <xref target="requirement-matrix"/>, which is exhaustive for identified
        requirements and is the authority where the two disagree.</t>
        <ul spacing="normal">
          <li>The consumption of a permit or narrow policy-decision record as
          a single-use approval, at <xref target="two-phase-execution"/>. The
          released verification path checks the envelope, the stage, the
          predecessor and the decision binding, and does not consume a
          receipt_id or hold single-use state. The enforcement boundary that
          would consume it is not a published package, which is also why the
          reservation and settlement ledger of
          <xref target="cumulative-spend"/> and
          <xref target="policy-chain"/> is absent.</li>
          <li>The not_attempted value of
          <xref target="receipt-evidence"/>. No released package reports that
          value on the evidence-resolution axis.</li>
          <li>Evaluation of a relying party's trust-policy pin at the
          artifact's issued_at, at <xref target="external-signer-keys"/>. The
          released trust-policy path evaluates a pin's validity window and its
          rotation overlap against verification time.</li>
          <li>Cascade-derived records and cascade-completion records, at
          <xref target="revocation-evidence"/>. Neither is issued nor verified
          by any released package, and
          <xref target="revocation-record-format"/> defines neither.</li>
          <li>The mediation-assumption rule of
          <xref target="mediation-assumption"/>. No released package checks
          that a governed path was the only path.</li>
          <li>Every requirement of <xref target="decision-to-effect"/> except
          the receipt-to-decision binding and its temporal relation. The
          interop record the section cites carries its own harness and is not
          a released package.</li>
          <li>The profile model of <xref target="profile-model"/>. No released
          package implements a profile document, a profile registry, or
          profile-context passing, and no fixture exists for a requirement on
          a profile document.</li>
          <li>The adapter contracts of <xref target="adapter-contracts"/>,
          beyond the action-reference recomputation both packages already
          perform.</li>
          <li>The conformance reporting of <xref target="conformance"/>. No
          released package emits a per-vector result record, and no
          machine-readable claim format is defined.</li>
          <li>Inside <xref target="authority-lifecycle"/>: the cached-decision
          limits of <xref target="lifecycle-status-coverage"/>, the
          policy-version limb of
          <xref target="lifecycle-capability-binding"/>, the binding mode,
          office-holder records, vacancy records, co-holder decision rules and
          pre-commitment of <xref target="lifecycle-succession"/>, and the
          principal-event records, confirmation procedures, renunciation and
          accountability findings of
          <xref target="lifecycle-principal-departure"/>. The identifier custodian
          records of <xref target="lifecycle-capability-binding"/> are evaluated
          and are not on this list: the released capability-binding module
          evaluates custodian binding and retention records supplied to it and
          resolves custodian standing through caller-supplied resolvers, and it
          issues and signs no such record. Production of those records is
          implemented by no released package.</li>
        </ul>

        <t>Identifier list. <xref target="requirement-matrix"/> marks 49 of its 99
        identifiers no in both implementation columns, meaning neither
        agent-passport-system 7.2.0 on npm nor agent-passport-system 4.2.0 on
        PyPI has a surface that implements the requirement, read from source. A
        no in both columns is not a statement that the requirement is wrong or
        unreachable, only that no released package carries it. They are:</t>

        <t>
          APS-EVID-NO-RETROACTIVE-REWRITE,
          APS-EVID-DIGEST-MISMATCH-NOT-ESTABLISHED,
          APS-ENF-NO-ABSENCE-INFERENCE, APS-PROF-REQUIRED-CONTENT,
          APS-PROF-SEMANTIC-PRESERVATION, APS-PROF-NO-WIDENING,
          APS-PROF-UNKNOWN-NOT-VALID,
          APS-LC-ISSUER-VS-LIFECYCLE-STANDING,
          APS-LC-SUCCESSOR-NO-INHERITANCE, APS-LC-RECHECK-AT-ADMISSION,
          APS-LC-CACHED-DECISION-FRESHNESS,
          APS-LC-UNKNOWN-DENIAL-SAYS-NOT-ESTABLISHED,
          APS-LC-COMPLETENESS-BASIS, APS-LC-POLICY-VERSION-IDENTIFIED,
          APS-LC-POLICY-TIGHTENING-RESTRICTS,
          APS-LC-EPOCH-FEATURE-DEFINITION,
          APS-LC-OFFLINE-DECLARED-IN-ADVANCE,
          APS-LC-BINDING-MODE-NO-DEFAULT,
          APS-LC-VACANCY-NOT-ESTABLISHED, APS-PRIN-TWO-FINDINGS,
          APS-PRIN-ROLE-NOT-FROM-BODY, APS-PRIN-SILENCE-NOT-CONSENT,
          APS-PRIN-ACCOUNTABILITY-SEPARATE,
          APS-EVID-RELATIONS-NOT-TRANSITIVE, APS-ENF-EXACT-ACTION-MATCH,
          APS-ENF-NO-COVERAGE-NO-BYPASS-CLAIM,
          APS-ENF-COVERAGE-PREMISE-SCOPED,
          APS-ENF-COVERAGE-RESOLVES-TO-ADMISSION,
          APS-EVID-EFFECT-NOT-FROM-RESULT, APS-EVID-READBACK-OUTCOMES,
          APS-EVID-MISSING-NAMED, APS-EVID-STATES-NOT-SYNONYMS,
          APS-ENF-RETRY-NEW-DECISION, APS-ENF-COMPENSATION-NEW-RECORD,
          APS-ENF-RESERVE-AT-APPROVAL, APS-ENF-COMPLETE-AT-ADMISSION,
          APS-ENF-SETTLE-AFTER-RESULT,
          APS-ENF-RELEASE-PRE-DISPATCH-ONLY,
          APS-ENF-CONFLICTING-REUSE-REJECTED, APS-ADAPT-NO-WIDENING,
          APS-ADAPT-NO-SILENT-SEMANTIC-LOSS, APS-ADAPT-STAGE-COMMITMENT,
          APS-ADAPT-CANONICALIZATION-STATED,
          APS-ADAPT-MCP-EXTENSION-DECLARED, APS-CONF-CLASS-NAMED,
          APS-CONF-CLAIM-CONTENT, APS-CONF-CLAIM-NOT-VERDICT,
          APS-CONF-THREE-RESULTS, APS-CONF-NOT-SUPPORTED-NOT-SCORE.
</t>

        <t>The remaining identifiers are marked yes in at least one column and are
        outside this subsection. Where a mechanism named above covers an
        identifier not on this list, the mechanism is partly implemented and the
        implementation columns say which part.</t>
      </section>

      <section anchor="impl-specific" numbered="true" toc="default">
        <name>Implementation-Specific Behavior</name>
        <t>The following items are implementation choices where this
        document leaves a construction to a profile or to a deployment.</t>
        <ul spacing="normal">
          <li>The record types named in
          <xref target="authority-lifecycle"/> under the proposed: namespace.
          The released packages ship them under that prefix in their
          experimental modules. This document fixes no wire name for any of
          them, no fixture family mints a record under any of them, and a
          later revision may change any of them.</li>
          <li>The authority-epoch marker the authority-state module carries.
          It is unsigned, it is not a wire field, and the module supports
          neither durability nor concurrency. This document defines no epoch
          wire field, and
          <xref target="lifecycle-epoch"/> turns the open design choices into
          obligations on an implementation that claims the feature.</li>
          <li>The reason_code value space of
          <xref target="revocation-evidence"/> and
          <xref target="revocation-record-format"/>, on which neither section
          imposes a grammar, and the verification_method field, which
          <xref target="revocation-evidence"/> does not name. The releases
          constrain neither.</li>
          <li>The target string construction
          <xref target="action-reference"/> requires a profile to
          define.</li>
          <li>The TypeScript Revocation-Observation emitter computes its
          signature over the project's legacy canonicalization rather than
          the RFC 8785 profile specified in this document, and verifiers of
          that record validate over the same form. The two canonicalizations
          differ only in the treatment of null-valued object members, which
          the legacy form omits. The record as emitted carries no
          null-valued members, so its signed bytes coincide with RFC 8785
          for that record. The Evidence-Bundle supporting-record emitter
          uses the RFC 8785 profile. Revocation-Observation is not a record
          this document specifies.</li>
        </ul>
      </section>

      <section anchor="impl-deviation" numbered="true" toc="default">
        <name>Known Deviations</name>
        <ul spacing="normal">
          <li>The released delegation, receipt-core and action-reference
          surfaces admit the second value 60 as 23:59:60 on the last calendar
          day of a month. <xref target="chain-verification"/> rejects the
          second value 60 wherever it appears. The passport and
          principal-binding surface rejects it. The revocation record surface of
          <xref target="revocation-record-format"/> states a second value of 00
          through 59 and no authority-revocation-record vector carries a second
          value of 60, so its behavior on that value is not established either
          way.</li>
          <li>The capability-binding-drift and
          lifecycle-identifier-reuse-and-rename families label an established
          pinned-referent mismatch as not established, in a verdict set with
          no denial member.
          <xref target="lifecycle-capability-binding"/> specifies a denial
          with a mismatch reason, and both released packages decide the
          denial. A family run that reproduces the earlier labelling is
          reproducing that family's own vocabulary and is not deciding the
          rule.</li>
          <li>The actionref-canonical family's README states four vectors and
          its fixture file carries six, the two extra being duplicate-scope
          negatives, one raw and one colliding only after normalization. The
          count used throughout this document is six, which is the file.</li>
          <li>The conformance suite pins agent-passport-system 7.1.0 in its
          own manifest at the commit this document cites. The package sources
          read for this document are 7.2.0 on npm and 4.2.0 on PyPI, so a
          result the suite records against its pinned package ran a version
          one minor release behind those sources. The
          authority-revocation-record run reported under
          <xref target="revocation-record-format"/> is the exception: it ran
          against clean installs of agent-passport-system 7.2.0 from npm and
          agent-passport-system 4.2.0 from PyPI, overriding the suite's 7.1.0
          pin, and a separate run against the pinned 7.1.0 was recorded
          alongside it.</li>
        </ul>
      </section>
    </section>

    <section anchor="changes-from-03" numbered="true" toc="default">
      <name>Changes from -03</name>
      <t>This section is informative. It summarizes the principal changes
      between draft-pidlisnyi-aps-03 and this revision. It is a history and
      not a specification, and where it disagrees with a section of this
      document the section governs.</t>

      <t>The comprehensive integration did not rewrite the stabilized core
      beyond the -04 repairs summarized in <xref target="changes-carried"/> and
      the edits logged under ruling R-A. The carried sections are
      <xref target="introduction"/>, <xref target="identity-scheme"/>,
      <xref target="delegation"/>, <xref target="policy-chain"/>,
      <xref target="signed-receipts"/>, <xref target="protocol-bindings"/> and
      <xref target="related-work"/>, which carry the -03 rules as revised below.
      <xref target="authority-model"/> and <xref target="profile-model"/> sit
      inside that range and are new.
      Every literal cross-reference in that text was converted to a
      cross-reference by anchor, because this revision renumbers the document.
      The R-A edits are two. In <xref target="agent-passport"/>, "principal
      authority is carried by the separate record" became "the principal
      relationship is carried by the separate record", because a binding is not a
      grant. In <xref target="security-considerations"/>, "outside the protocol
      guarantees" became "outside what this document specifies".</t>

      <section anchor="changes-new-sections" numbered="true" toc="default">
        <name>New Sections</name>
        <ul spacing="normal">
          <li><xref target="authority-model"/>, Authority and Verification
          Model, is new and sits before any wire format. It names the nine
          actors, states seven distinctions the rest of the document enforces,
          fixes the closed set of six artifact verdicts and the three boundary
          outcomes, states what evidence establishes and what it does not,
          names the mediation assumption as load bearing, and carries the
          transition contract the whole document is written against.</li>
          <li><xref target="revocation-record-format"/> is new. It specifies
          one wire format for the revocation record that
          <xref target="revocation-evidence"/> has required since -03 without
          defining. It is a Candidate feature, not a change to the SHOULD
          above it.</li>
          <li><xref target="profile-model"/>, Profile Model, is new. It states
          what a profile document identifies, including the loss value that
          applies to each APS semantic it touches, and collects the extension
          points at which this document defers a construction.</li>
          <li><xref target="authority-lifecycle"/>, Authority Lifecycle, is
          new. It has four parts: concepts, twelve authority continuity rules,
          eight lifecycle mechanisms, and candidate extensions. Six of the
          twelve continuity rules restate a requirement of the closed core, one
          identifier each, and those six identifiers are the enumerated Lifecycle
          Core set. Everything else in it is a Candidate feature.</li>
          <li><xref target="decision-to-effect"/>, Decision to Effect, is new.
          It separates five questions a deployment routinely answers as one,
          states the four non-transitive relations between a decision and an
          effect, and states the reservation and retry contract the closed
          core already holds across four of its sections.</li>
          <li><xref target="institutional-governance-v2"/> replaces the -03
          Institutional Governance section. The -03 text described an
          organization's structures. This revision describes how they reach
          the delegation layer, as charter, office, holder, root authority
          basis, delegation and action, and states that no family exercises
          the projection.</li>
          <li><xref target="gateway-reference-architecture"/>, the enforcement
          gateway reference architecture, is new and informative. It describes
          one arrangement taken from the open-source gateway and separates
          what that implementation does from what this document
          requires.</li>
          <li><xref target="conformance"/>, Conformance, is new. It defines
          seven conformance classes, the form of a claim, and the three
          results an implementation reports per vector.</li>
          <li><xref target="limits-and-open-questions"/>, Limits and Open
          Questions, is new. It separates five limits of the protocol from
          fifteen open design questions, each with what is unresolved, why the
          evidence does not settle it, what this document requires until it
          is, and whether it touches Core or a Candidate feature. Two further
          items are held out of this revision by ruling and four designs are
          recorded as under consideration.</li>
          <li><xref target="adapter-contracts"/>,
          <xref target="a2a-card-signing"/> and
          <xref target="gateway-extension-processors"/> are new subsections of
          Protocol Bindings. <xref target="related-work-matrix"/> is a new
          subsection of Related Work.</li>
          <li><xref target="case-corpus"/> and
          <xref target="requirement-matrix"/> are new appendices. The first is
          the provenance index from each rule to its hardest adversarial case.
          The second records every requirement identifier of this revision
          with the vectors that exercise it.</li>
        </ul>
      </section>

      <section anchor="changes-carried" numbered="true" toc="default">
        <name>Changes Carried From -03</name>
        <ul spacing="normal">
          <li>Result model. <xref target="receipt-stages"/> makes the expected
          enforcement-boundary identity a trust input the verifier supplies.
          <xref target="receipt-verification"/> adds a boundary-identity
          comparison to step 4 of its order. This changes the conditions under
          which a receipt reaches valid, because a verifier given no expected
          boundary identity reports that axis as not established.
          <xref target="receipt-verification"/> now states that an axis a
          verifier did not establish never contributes to a valid result, and
          <xref target="receipt-evidence"/> now states that omitting the
          evidence-resolution axis is not a permitted verifier scope while
          declining to resolve evidence is.</li>
          <li>Root trust. <xref target="chain-verification"/> now states the
          chain result for a root the verifier's trust policy does not accept:
          invalid, with a root-trust reason at the root's index. -03 left the
          result for an untrusted root unsaid.</li>
          <li>Cascade. The -03 requirement that a revocation MUST initiate a
          cascade to all transitive descendants is now a MAY to produce
          cascade evidence. Descendant invalidity follows from the
          <xref target="chain-verification"/> revocation check applied to
          every chain member.</li>
          <li>Revocation record. The -03 requirement that a revocation MUST
          produce a signed revocation record is now a SHOULD, in a format the
          applicable profile defines. The four minimum content elements are
          unchanged. This revision adds one such format at
          <xref target="revocation-record-format"/>, which satisfies the
          SHOULD without narrowing it.</li>
          <li>Reservation identity. A reservation is keyed by action_ref. A
          request matching an unsettled and uncancelled footprint is an
          idempotent retry, and a request under the same action_ref whose
          unit, amount or bounded ancestor set differs is conflicting reuse
          and is rejected. <xref target="d2e-retry-contract"/> reads that rule
          together with the three other core sections that bear on it.</li>
          <li>Leap second. A timestamp carries a second value from 00 through
          59 in every section, and a verifier rejects the second value 60
          wherever it appears. This is narrower than RFC 3339.</li>
          <li>Key-resolution outcome names. The five failure outcomes of
          <xref target="external-signer-keys"/> carry stable names. The
          resolved outcome carries no failure name, and this document defines
          no further key-resolution outcome.
          <xref target="chain-verification"/> no longer promises a stable
          failure code for chain verification, because this revision defines
          no failure-code vocabulary for it.</li>
          <li>not_before. The rule that a record's not_before MUST NOT predate
          its issued_at is scoped to a member whose parent_delegation_id is
          not null. A root MAY take effect before its own issued_at.</li>
          <li>Ceiling rule. An implementation ceiling reached while parsing or
          verifying is indeterminate with a reason naming the limit, not
          invalid. A syntax violation observed before any ceiling is reached
          remains invalid.</li>
          <li>Approval artifact. The -03 sentence permitting a profile to
          define a further approval artifact bound to the same action_ref was
          removed. The permit or narrow policy-decision record of
          <xref target="policy-decision"/> identifies the consumable
          approval.</li>
          <li>Historical key selection. <xref target="key-rotation"/> extends
          the evidence requirement to any historical key-selection boundary,
          including a relying party's trust-policy pin, with the ambiguous
          outcome as the result without such evidence.</li>
          <li>Approval-state axis. <xref target="receipt-verification"/> step
          10 reports an approval-state axis, not established where the
          verifier holds no consumption state.</li>
          <li>Unit equality. <xref target="policy-chain"/> states that a unit is
          an opaque non-empty string, that two units are the same unit when their
          UTF-8 byte sequences are equal, and that an implementation neither
          rejects a unit for failing a grammar this document does not state nor
          treats two unequal unit strings as one unit. -03 stated no equality
          rule.</li>
          <li>Revocation record scope. <xref target="revocation-evidence"/> now
          states that this document defines no wire encoding, identifier
          construction, signature construction, reason-code vocabulary or signer
          rule for the revocation record it asks for. -03 stated the four minimum
          content elements and left the rest unsaid.</li>
          <li>Invariant citations. <xref target="core-invariants"/> now states
          that INV-4 is reported as the evidence cascade state of
          <xref target="revocation-cascade"/> and is not an input to the authority
          result, where -03 said a cascade-completion record made INV-4 verifiable
          from records. The names of INV-2, Scope Monotonic Narrowing, and INV-3,
          Spend Limit Narrowing, and the issuance-time enforcement that section
          places on them and on INV-8, are unchanged from -03.
          <xref target="revocation-record-format"/> cites INV-5 where it states
          that a party does not replace a record it already holds.</li>
          <li>Title. The -03 title was "Agent Passport System (APS): Verifiable
          Agent Identity, Faceted Authority, and Signed Action Receipts". This
          revision is titled "Agent Passport System (APS): Verifiable Authority,
          Lifecycle, Enforcement, and Evidence for AI Agents", because authority
          and its lifecycle are what the document is organized around and
          receipts are one mechanism inside that.</li>
        </ul>
      </section>

      <section anchor="changes-conventions" numbered="true" toc="default">
        <name>Conventions Introduced by This Revision</name>
        <ul spacing="normal">
          <li>Every normative subsection outside the closed core carries a
          status block: Core, or a named Candidate feature, with the fixture
          families that exercise it and the released packages that implement
          it.</li>
          <li>Requirements outside the closed core carry stable semantic
          identifiers of the form APS-AREA-NAME, listed in
          <xref target="requirement-matrix"/>. An identifier never changes
          because a section moves and is never reused.</li>
          <li>A requirement is recorded as exercised only where a named vector
          carries an assertion that fails when the requirement is violated.
          Everything else is recorded as specified and not exercised.</li>
          <li>Record types belonging to a Candidate feature stay in the
          proposed: namespace. One name graduates in this revision,
          aps:authority-revocation:v1, because its semantics are fixed for that
          record_type and version, its wire shape is specified, a family
          exercises it against independent negatives, and both reference
          implementations map to it.</li>
        </ul>
      </section>
    </section>

    <section anchor="case-corpus" numbered="true" toc="default">
      <name>Case and Rule Provenance Index</name>
      <t>This appendix is informative. It is the provenance index for the
      lifecycle material in this document. It has two parts: an index from
      each rule to the case that is the hardest adversarial instance of it,
      and eighteen cases given in full. The corpus itself stays where it is
      maintained, in <xref target="APS-LIFECYCLE"/>, pinned at the commit that
      reference names, and this appendix reproduces no full listing of
      it.</t>

      <t>How the sources are used. The cases are drawn from law, corporate
      governance, aviation, medicine, banking, insolvency, government
      succession, military command, distributed systems, cryptographic
      infrastructure and published security incidents. Every one of those
      sources is used as a source of a case shape or of a counterexample. None
      of them says anything about AI agents. Nothing in this appendix states
      that a legal doctrine, a statute, a regulation or an institutional rule
      applies to an AI agent, and no such reading is intended or supported. A
      precedent here answers the question "what shapes does authority actually
      take", not the question "what rule governs an agent".</t>

      <t>Status values. "verified" means the case has a source that was fetched
      and quoted. "reviewed hypothetical" means the case was written and
      reviewed with no external precedent claimed. "candidate" means the case
      names a gap and is held as a candidate rather than a settled shape.
      "boundary" means the case is sound and resolves to something other than an
      authority state a verifier returns from records, which is why it is listed
      separately. A status is a statement about the case, not about any
      implementation.</t>

      <t>Family names are the fixture families of the conformance suite
      <xref target="APS-CONFORMANCE"/>. Naming a family records that vectors for
      that shape exist. It is not a conformance result and not a claim that any
      implementation passes them.</t>

      <t>What this appendix does not establish. It does not establish that the
      corpus is complete, that the cases are independent of each other, or that
      any case has been tested. It does not establish that this document
      specifies a rule for every case listed, and several cases exist precisely
      because it does not.</t>

      <section anchor="cc-provenance" numbered="true" toc="default">
        <name>Rule and Case Provenance Index</name>

        <t>Each entry names one rule of this document, the case that is the
        hardest adversarial instance of it found in the corpus, the fixture
        families that carry cases of that shape, and the status of the
        canonical case. Status values are those defined above. Where the
        canonical case is given in full below, the entry says so.</t>

        <dl newline="true" spacing="normal">
          <dt>L1, an ancestor revocation reaches what depends on it</dt>
          <dd>Canonical adversarial case LC-C-006, an ancestor found never to
          have been valid rather than revoked, given in full below, verified.
          Families: lifecycle-multiple-principals-and-conflict,
          ancestor-revocation-chain.</dd>

          <dt>L2, identity continuity is not authority continuity</dt>
          <dd>Canonical adversarial case LC-B-008, authority ending through an
          external fact with no artifact in the delegation graph, given in
          full below, verified. Families: lifecycle-legal-regulatory-events,
          sponsor-handover.</dd>

          <dt>L3 and L4, succession creates new authority and inherits no
          tree</dt>
          <dd>Canonical adversarial case LC-A-016, replacement authority
          pre-committed inside the original instrument, given in full below,
          verified. Families: lifecycle-principal-events,
          lifecycle-root-authority-succession,
          lifecycle-fiduciary-succession.</dd>

          <dt>L5, independent chains are not combined</dt>
          <dd>Canonical adversarial case LC-C-012, two independently rooted
          chains coordinating on one objective, given in full below, verified.
          Families: lifecycle-multiple-principals-and-conflict,
          chain-selection-no-union, single-chain-selection.</dd>

          <dt>L6, an earlier approval is not current authority</dt>
          <dd>Canonical adversarial case LC-B-029, a receiving institution's
          acceptance as a boundary a later change does not reach, given in
          full below, verified. Families: lifecycle-organization-events,
          cached-authorization-revocation.</dd>

          <dt>L7, unknown revocation state is not active</dt>
          <dd>Canonical adversarial case LC-F-018, regional enforcement points
          briefly disagreeing, given in full below, verified. Families:
          lifecycle-infrastructure-failure,
          revocation-resolution-forward-compat,
          conflicting-status-sources.</dd>

          <dt>L8, suspension is not revocation</dt>
          <dd>Canonical adversarial case LC-C-022, a pending-ratification
          state that is neither revoked nor not revoked, given in full below,
          verified. Families: lifecycle-multiple-principals-and-conflict,
          suspension-cause-composition.</dd>

          <dt>L9, key rotation is not delegation revocation</dt>
          <dd>Canonical adversarial case LC-D-013, key custody narrowed to a
          few named holders and defeated by one unmanaged device, verified.
          Families: lifecycle-credential-events, key-rotation-historical. This
          case is a boundary case for the authority model and is carried in
          the corpus rather than in full here.</dd>

          <dt>L10, expiry is not revocation</dt>
          <dd>Canonical adversarial case LC-A-001, authority ending at a
          factual moment under a notice-effective rule, given in full below,
          verified. Families: lifecycle-principal-events,
          lifecycle-expiry-and-renewal, lifecycle-purpose-exhaustion.</dd>

          <dt>L11, no silent authority resurrection</dt>
          <dd>Canonical adversarial case LC-E-023, a faithfully restored
          process holding authority that may no longer be current, verified.
          Families: lifecycle-infrastructure-failure,
          authority-epoch-rollback, chain-selection-no-union.</dd>

          <dt>L12, completeness is a separate and stronger claim</dt>
          <dd>Canonical adversarial case LC-F-027, an empty audit window as
          delivery lag rather than absence, given in full below, verified.
          Families: lifecycle-infrastructure-failure,
          lifecycle-evidence-and-record. Second canonical case LC-D-025,
          completeness of what a still-valid grant was used for, also given in
          full below.</dd>

          <dt>Activation conditions</dt>
          <dd>Canonical adversarial case LC-C-008, a missing successor
          designation resolving to a named default rather than failing closed,
          given in full below, verified. Families:
          lifecycle-time-and-scheduling, activation-not-established.</dd>

          <dt>Purpose bounds and exhaustion</dt>
          <dd>Canonical adversarial case LC-A-008, purpose exhaustion ending
          authority once an authenticated record shows the purpose was met
          rather than once the agent decides it was, verified. Families:
          lifecycle-principal-events, lifecycle-purpose-exhaustion.</dd>

          <dt>Capability binding and policy version</dt>
          <dd>Canonical adversarial case LC-E-033, a provider-side capability
          upgrade with no delegation-layer event, verified. Families:
          lifecycle-agent-side-events, capability-binding-drift,
          lifecycle-policy-change. Second canonical case LC-E-002, a valid
          grant whose named executor is gone, given in full below.</dd>

          <dt>Authority epoch and fencing</dt>
          <dd>Canonical adversarial case LC-F-016, a storage-layer partition
          resurrecting revoked authority below the application layer,
          verified. Families: lifecycle-infrastructure-failure,
          authority-epoch-rollback.</dd>

          <dt>Suspension, cause sets and release</dt>
          <dd>Canonical adversarial case LC-B-024, independent suspensions
          released independently, given in full below, verified. Families:
          lifecycle-legal-regulatory-events, suspension-cause-composition.</dd>

          <dt>Status sources, freshness and coverage</dt>
          <dd>Canonical adversarial case LC-F-017, a revocation true at the
          source and false at a lagging replica, verified. Families:
          lifecycle-infrastructure-failure, conflicting-status-sources,
          cached-authorization-revocation.</dd>

          <dt>Succession, handover and reauthorization</dt>
          <dd>Canonical adversarial case LC-C-014, a handover gated on the
          incoming holder's acknowledgment, given in full below, verified.
          Families: lifecycle-time-and-scheduling, sponsor-handover,
          lifecycle-organization-events.</dd>

          <dt>Principals, identities and departure</dt>
          <dd>Canonical adversarial case LC-B-026, a third party injecting an
          approval gate into an unmodified valid chain, given in full below,
          verified. Families: lifecycle-legal-regulatory-events,
          lifecycle-principal-events, lifecycle-principal-unreachable.</dd>

          <dt>Conferral of a held scope</dt>
          <dd>Canonical adversarial case LC-E-006, a scope handed to a spawned
          process, given in full below, verified. Families:
          lifecycle-agent-side-events, lifecycle-conferral-without-authority.
          This rule is an open question at
          <xref target="oq-conferral-authority"/> rather than a rule of this
          document.</dd>

          <dt>Work in flight</dt>
          <dd>Canonical adversarial case LC-E-013, invalidation arriving
          mid-run rather than at the next gateway check, given in full below,
          verified. Families: lifecycle-agent-side-events,
          lifecycle-organization-events, lifecycle-time-and-scheduling. This
          is an open question at <xref target="oq-work-in-flight"/>.</dd>

          <dt>The queued-action shape</dt>
          <dd>Canonical adversarial case LC-E-034, a queued action outlasting
          a suspension, given in full below, reviewed hypothetical. Families:
          lifecycle-time-and-scheduling, suspension-cause-composition.</dd>

          <dt>Principal-to-authority association</dt>
          <dd>Canonical adversarial case LC-D-004, a compromised operator
          identity acting as an implicit ancestor over many independent trees,
          verified. Families: lifecycle-credential-events,
          lifecycle-identifier-reuse-and-rename. This is an open question at
          <xref target="oq-principal-authority"/> and no family binds a
          principal reference across a decision and an admission.</dd>
        </dl>

        <t>What this index does not establish. It does not establish that the
        canonical case named for a rule is the only adversarial case for it,
        that the families named exercise the rule at the level this document
        states it, or that a rule with a canonical case is better covered than
        a rule without one. Coverage is recorded in
        <xref target="requirement-matrix"/> and nowhere else.</t>
      </section>

      <section anchor="cc-canonical" numbered="true" toc="default">
        <name>Eighteen Cases in Full</name>
        <t>Twelve of these are the cases the lifecycle document and its
        candidate statements cite most. Nine of the twelve are cited eight
        times or more across those two documents, and the other three are
        cited seven times and are also used by the worked examples in
        <xref target="worked-examples"/>. The remaining six are the cases the
        worked examples and the open questions of this document turn on
        directly.</t>

        <t>Each case carries five fields. Situation is what happened.
        Authority question is what a verifier has to answer. Rule exercised
        names the rule in this document the case bears on. Disposition in this
        document says what this revision does with the case, and every case
        carries one. What the rule does
        not establish is the boundary of that rule. Two further lines are kept
        where they exist: the source the case was drawn from, and the failure
        a naive implementation reaches, which is what makes the case
        adversarial rather than illustrative.</t>

        <t>Where the corpus recorded a proposed outcome, that line is kept as the
        pressure the case puts on an authority model and not as a rule. A case
        from another domain is a source of the question and never a source of the
        rule, and the disposition line is where this document answers.</t>

        <t><strong>LC-C-008.  A missing successor designation should fail open to a named statutory fallback, not fail closed like an unknown revocation</strong></t>
        <t>Status verified. Family lifecycle-time-and-scheduling. Domain government.</t>
        <t>Situation. A role becomes vacant and the organization never issued an explicit order naming who acts in the meantime. A verifier looking for a successor designation finds none recorded.</t>
        <t>Source. The Federal Vacancies Reform Act's default rule that the first assistant to a vacant Senate-confirmed office automatically becomes the acting officer, subject to a prior-service requirement and disqualification if the President has nominated that person. US Government Accountability Office, GAO-02-272R (<eref target="https://www.gao.gov/products/gao-02-272r"/>): "the first assistant to the office of such officer shall perform the functions and duties of the office temporarily in an acting capacity."</t>
        <t>Authority question. Does an unrecorded successor designation leave the office authority not established, or does the authority model supply a named default that the verifier must apply?</t>
        <t>Pressure this case puts on an authority model. A model that treats every unknown the same way answers this one badly. The corpus records that the domain solved it with a named default holder, resolved outside the record and checkable against its own eligibility conditions, which puts the question of whether an authority model can carry a pre-committed default at all.</t>
        <t>What a naive implementation gets wrong. A framework modeled only on L7's fail-closed rule for unknown revocation state will wrongly fail closed here too, and block a routine, lawful vacancy that the statute already solved with an affirmative default.</t>
        <t>Rule exercised. Invariants L7. L7 is about an unknown or stale revocation answer, which fails closed. An unknown successor designation is a different unknown, and in the source domain it resolves to a named fallback holder with its own eligibility gate rather than to a refusal. The two unknowns are not one.</t>
        <t>Disposition in this document. A statutory fallback is a pre-committed instrument in the sense of <xref target="lifecycle-succession"/>, and this document defines no such instrument and no default holder. Without one the vacancy is not established, with the coverage limb named, and a verifier supplies no default in either direction.</t>
        <t>What the rule does not establish. It does not establish that a named default holder exists in any deployment, and it does not establish which unknowns should resolve to a default. It establishes that an unknown successor designation and an unknown revocation answer are two different unknowns.</t>

        <t><strong>LC-C-006.  A tainted ancestor invalidates dependents only from the moment the taint is found, not retroactively</strong></t>
        <t>Status verified. Family lifecycle-multiple-principals-and-conflict. Domain government.</t>
        <t>Situation. A chain of appointments rests on a person's authority to make them. Eighteen months later, an independent investigator finds that person's own appointment was never valid, not revoked, never valid in the first place, and by then the downstream appointees have signed many orders that already took effect.</t>
        <t>Source. The GAO's August 2020 finding that DHS acting secretary Chad Wolf's and acting deputy secretary Ken Cuccinelli's appointments were invalid, because Kevin McAleenan, who named them, had himself been installed outside the statutory order of succession and had no authority to amend that order. GAO finding, reported by GovExec (<eref target="https://www.govexec.com/management/2020/08/top-two-homeland-security-officials-are-serving-illegally-gao-rules/167714/"/>): "McAleenan's subsequent appointments of Wolf and Cuccinelli were therefore invalid, GAO said, as he was not eligible to make them."</t>
        <t>Authority question. What does a verifier report about an ancestor established to have been invalid from issuance rather than revoked, and about the decisions taken while it looked valid?</t>
        <t>Pressure this case puts on an authority model. An ancestor invalid from issuance and discovered late is not a revocation event, and a model with only a revocation event has nothing to record. The corpus also separates what a finding does going forward from what it does to effects already taken, which the finding itself does not answer.</t>
        <t>What a naive implementation gets wrong. A revocation-only model finds nothing wrong here, because no one ever revoked anything. It has no way to represent "this grant was void from issuance" discovered after the fact, and no way to backdate that discovery without either pretending nothing happened or silently erasing evidence of effects already taken.</t>
        <t>Rule exercised. Invariants L1, L12. Open question: work in flight. L1 (revoking an ancestor invalidates dependents) assumes the ancestor was once valid and was later revoked. This case is the harder one L1 does not cover, an ancestor invalid from the start, discovered long after the fact. Also touches the "work in flight" open question and L12 (completeness), since the orders executed under the tainted chain are exactly the evidence a completeness claim needs to account for.</t>
        <t>Disposition in this document. Void from issuance is the artifact verdict invalid, carrying its own reason code and separated from revoked by that code, under <xref target="admissibility"/>. The finding reaches the chain from the moment a verifier establishes it. What becomes of effects already taken is a different question, open at <xref target="oq-work-in-flight"/>.</t>
        <t>What the rule does not establish. It does not establish what becomes of effects already taken under the chain while the chain looked valid, and it does not establish a moment at which the invalidity began for a relying party.</t>

        <t><strong>LC-F-018.  Multiple regional enforcement points are physically distinct copies of authority state, and can briefly disagree</strong></t>
        <t>Status verified. Family lifecycle-infrastructure-failure. Domain distributed-systems.</t>
        <t>Situation. An APS deployment runs multiple regional gateways sharing a globally-replicated authority store. A principal revokes a delegation. The gateway in the same region as the write enforces the revocation immediately. A gateway in a different region still serves the pre-revocation decision for some seconds to minutes.</t>
        <t>Source. AWS documents IAM's own distributed, eventually-consistent propagation path. AWS IAM troubleshooting guide (<eref target="https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_general.html"/>): "Any changes that you make in IAM (or other AWS services)... take time to become visible from all possible endpoints. Some delay results from the time it takes to send data from server to server, replication zone to replication zone, and Region to Region."</t>
        <t>Authority question. When two enforcement points hold separate copies of authority state and disagree, which answer does a verifier treat as the state of the authority?</t>
        <t>Pressure this case puts on an authority model. A deployment with more than one enforcement point holds more than one copy of authority state, so a model has to say what a lagging copy does to an answer and what an answer outside any declared bound is worth. The corpus records propagation lag as a bound a deployment declares and tests, and the case is what forces the question rather than the answer to it.</t>
        <t>What a naive implementation gets wrong. Assuming a single "the" authority store with one true current state, when a multi-region deployment has physically distinct copies that can each individually be asked whether something is revoked and briefly disagree.</t>
        <t>Rule exercised. Invariants L7. None of L1-L12 model multiple enforcement points each holding their own view of a replicated authority store. The L7 shape, "the authority is unreachable," doesn't capture "reachable but behind."</t>
        <t>Disposition in this document. A result is what one verifier established from the sources it read at one moment. <xref target="lifecycle-status-coverage"/> makes freshness and coverage properties of the source rather than of the authority, and <xref target="chain-verification"/> makes a stale or unavailable revocation answer indeterminate and never active. This document states no propagation bound.</t>
        <t>What the rule does not establish. It does not establish a propagation bound for any deployment. It establishes that a deployment with more than one enforcement point holds more than one copy of authority state.</t>

        <t><strong>LC-C-022.  A pending-ratification state is neither "revoked" nor "not revoked," and if ratification is denied, the record has to say the action was provisional throughout, not that a final revocation was later reversed</strong></t>
        <t>Status verified. Family lifecycle-multiple-principals-and-conflict. Domain military.</t>
        <t>Situation. A commander relieves a subordinate of command. The required written approval from a higher general officer has not yet arrived. Until it does, the relief has a lesser, provisional effect. If the approval never comes, the action is retroactively recharacterized as having only ever been the lesser effect, not undone from a final state.</t>
        <t>Source. US Army relief-for-cause procedure. Fort Carson command policy memo, quoting AR 600-20 (<eref target="https://home.army.mil/carson/6116/5089/9699/relief-for-cause.pdf"/>): "Any commander may temporarily suspend a subordinate from command, but the final action to relieve an officer from any command position will not be taken until after written approval by the first general officer in the chain of command."</t>
        <t>Authority question. How does a verifier report a change that has been initiated, has partial effect, and becomes final only on a separate approval that may never arrive?</t>
        <t>Pressure this case puts on an authority model. A change that has partial effect and becomes final only on a separate approval fits neither revoked nor not revoked. The corpus records the domain treating the interval as provisional throughout, so a model that only has a final state has to recharacterize the earlier record afterwards, which is the move this document does not allow.</t>
        <t>What a naive implementation gets wrong. Conflating this with an ordinary self-declared, self-terminated suspension. This is a different shape, an external, unilateral suspension by a superior that only becomes a final revocation with a specific separate approval. Treating the two the same either finalizes a revocation that legally never became final, or fails to suspend the subordinate while waiting on paperwork.</t>
        <t>Rule exercised. Invariants L8. Open question: release from suspension. Adds a ratification-pending intermediate state with retroactive recharacterization on denial, a shape not present in L8's plain suspension and revocation split, and directly relevant to release from suspension, <xref target="oq-release-from-suspension"/>.</t>
        <t>Disposition in this document. A pending ratification is a suspension cause under <xref target="lifecycle-suspension"/>. Authority is inactive while the cause stands, the cause is released only by a party with standing over it, and a release creates no new authority. No verdict for a revocation that is not yet final is defined here.</t>
        <t>What the rule does not establish. It does not establish who may ratify, and it does not establish how long a pending state may stand before something else has to happen.</t>

        <t><strong>LC-A-001.  A principal's death ends actual authority regardless of durability, effective on the agent's notice, not at the instant of death</strong></t>
        <t>Status verified. Family lifecycle-principal-events. Domain agency-law.</t>
        <t>Situation. A principal dies. An agent holding a delegation from that principal, durable or not, keeps trying to act on the principal's accounts. Nobody has processed a revocation record.</t>
        <t>Source. Restatement (Third) of Agency §3.07: reproduced text, staff.washington.edu (<eref target="https://staff.washington.edu/djdrake/RESt-Agency.doc"/>): "The death of an individual principal terminates the agent's actual authority. The termination is effective only when the agent has notice of the principal's death." Durability does not change this: Uniform Power of Attorney Act (2006) §110(a), as enacted at N.H. RSA 564-E:110 (<eref target="https://gc.nh.gov/rsa/html/LVI/564-E/564-E-110.htm"/>): a power of attorney terminates when "(1) the principal dies; (2) the principal becomes incapacitated, if the power of attorney is not durable."</t>
        <t>Authority question. Does authority end at the event, or at the moment the acting party has notice of it, and which of the two does a verifier hold evidence for?</t>
        <t>Pressure this case puts on an authority model. In the source domain authority ends at the principal's death whatever the instrument says, and takes effect for a party on that party's notice rather than at the instant of the event. A model that records only a manual revocation has no place for either the event or the notice, and recording a transition and observing it are two events with two times.</t>
        <t>What a naive implementation gets wrong. A revoke-only system waits for an explicit revocation record and misses that death is a self-executing terminating event. A system can also over-read "durable" as blanket death-immunity, when durability is scoped only to surviving incapacity, not death. Every power of attorney, durable or not, ends at death.</t>
        <t>Rule exercised. Invariants L1, L10. L1, L10. Termination happens at a factual moment (death) under a notice-effective rule, not an ancestor-revocation record. The scope of "durable" (incapacity-survival only, never death-survival) is a distinction no invariant states, and a naive system easily over-generalizes it.</t>
        <t>Disposition in this document. An external event changes a verifier's answer only through a record from a party in a role the authority model accepts, which is <xref target="cand-01"/> and <xref target="lifecycle-principal-departure"/>. The death itself reaches no verifier. A record of the event decides nothing without that accepted role, and where the role cannot be resolved the continuation of authority is not established.</t>
        <t>What the rule does not establish. It does not establish that any rule about human agents applies to an AI agent. It does not establish how notice is evidenced, or who carries the burden of showing it.</t>

        <t><strong>LC-B-029.  A receiving bank's acceptance is the hard boundary after which a mid-flight authority change no longer stops the order</strong></t>
        <t>Status verified. Family lifecycle-organization-events. Domain banking-payments.</t>
        <t>Situation. A treasury agent submits a payment order under a valid delegation. The authorizing principal's authority is revoked minutes later. If the receiving bank has not yet accepted the payment order, the revocation stops it from settling. If the bank already accepted it, the order proceeds regardless of the revocation, unless the bank itself agrees to unwind it.</t>
        <t>Source. UCC 4A-211's acceptance boundary. Cornell LII (<eref target="https://www.law.cornell.edu/ucc/4A/4A-211"/>): "After a payment order has been accepted, cancellation or amendment of the order is not effective unless the receiving bank agrees or a funds-transfer system rule allows cancellation or amendment without agreement of the bank."</t>
        <t>Authority question. Once an operation has passed a boundary after which no further authorization decision occurs, does a later authority change reach it?</t>
        <t>Pressure this case puts on an authority model. The corpus leaves work in flight open. In this document that is <xref target="oq-work-in-flight"/>: the old grant cannot authorize a new effect at the next authorization boundary, and what happens to the operation itself is unsettled. This supplies a concrete resolution for one instrument type: the receiving institution's acceptance is the hard boundary. Before it, revoking the authorizing delegation stops the order. After it, the order proceeds independent of what the delegation graph says.</t>
        <t>What a naive implementation gets wrong. Assuming revocation automatically halts any payment order already submitted under it ignores that acceptance gives the order a revocation-proof effect. Assuming revocation never matters for in-flight orders ignores that unaccepted orders remain fully stoppable.</t>
        <t>Rule exercised. Invariants L6. Distinct from the already-verified LC-B-028 (stop-payment), which is a customer-initiated cancellation decision under L6's recheck principle. This is the underlying delegated authority itself changing mid-flight, the specific question left open under work in flight, <xref target="oq-work-in-flight"/>.</t>
        <t>Disposition in this document. The old grant admits no new effect at the next authorization boundary, under APS-LC-RECHECK-AT-ADMISSION. What happens to an operation already under way is open at <xref target="oq-work-in-flight"/>, and this document defines no acceptance boundary inside a target system.</t>
        <t>What the rule does not establish. It does not establish a boundary for any instrument other than the one it names, and it does not establish what the operation should do once that boundary has passed.</t>

        <t><strong>LC-B-026.  A third party outside the principal-agent relationship can inject a new approval gate into an otherwise unmodified, valid chain</strong></t>
        <t>Status verified. Family lifecycle-legal-regulatory-events. Domain regulatory.</t>
        <t>Situation. A company settles a regulatory action. The consent decree does not touch any existing delegation. It adds a new, externally-imposed requirement that a named "responsible employee or official" personally certify a defined category of future reports, for the life of the decree.</t>
        <t>Source. Consent decree practice requiring a named responsible official to certify compliance reports under penalty of law. SEC EDGAR filing (<eref target="https://www.sec.gov/Archives/edgar/data/1397516/000119312507093837/dex105.htm"/>): "...which makes any representation concerning the Defendants' compliance or noncompliance with any requirement of this Consent Decree shall be certified by a 'responsible employee or official' of the Defendants."</t>
        <t>Authority question. How does a verifier report an approval gate added from outside the delegation chain, when no artifact in the chain changed?</t>
        <t>Pressure this case puts on an authority model. The original delegation chain is untouched and still valid, and a transaction in the decree's scope is no longer sufficient on that chain alone. It also needs the named official's separate certification, until the decree's own sunset date.</t>
        <t>What a naive implementation gets wrong. A gateway that only re-verifies the original chain has no slot for a chain-external approval requirement injected by an outside party. It keeps authorizing exactly the transactions the decree was meant to catch, because nothing in the delegation itself changed.</t>
        <t>Rule exercised.  Structurally close to a dual-control policy, but the source of the added gate is external (a court-approved settlement, not internal risk policy), which none of L1-L12 name as a category. Also the strongest sourced instance found of "policy change" as a family.</t>
        <t>Disposition in this document. The chain stays valid and the added gate denies the action at the boundary, which is the restricted state of <xref target="admissibility"/>. No record defined here carries the gate, and a deployment that needs one states it in its profile.</t>
        <t>What the rule does not establish. It does not establish how an externally added gate is carried in a record, and it does not establish that the added gate narrows the underlying grant.</t>

        <t><strong>LC-B-008.  Authority can end completely, instantly, and outside the delegation system entirely</strong></t>
        <t>Status verified. Family lifecycle-legal-regulatory-events. Domain regulatory.</t>
        <t>Situation. A bank's officer authority does not merely get revoked. A federal receiver is appointed and by statute steps into every power that officer held, the instant the appointment takes effect, with zero notice to the delegation system that was relying on that officer's authority.</t>
        <t>Source. 12 U.S.C. § 1821(d), under which the FDIC as receiver of a failed bank succeeds by operation of law to all rights and powers of the institution and its officers. Cornell LII (<eref target="https://www.law.cornell.edu/uscode/text/12/1821"/>): "The Corporation shall, as conservator or receiver, and by operation of law, succeed to all rights, titles, powers, and privileges of the insured depository institution."</t>
        <t>Authority question. What does a verifier do when the authority at the head of a chain ends through an external fact that produces no artifact anywhere in the delegation graph?</t>
        <t>Pressure this case puts on an authority model. In the source domain every delegation rooted in the former officer's authority ends when the receiver is appointed, whether or not any system recorded a revocation, and no replacement authority exists until the new principal issues one. A model in which authority ends only through a record it holds has nothing to read here, which is what makes the case adversarial.</t>
        <t>What a naive implementation gets wrong. A system that expects the terminating event to show up as a revocation record in the infrastructure it monitors sees nothing, because the ancestor authority ended through an external legal fact with no corresponding artifact anywhere in the delegation graph.</t>
        <t>Rule exercised. Invariants L1, L2. A harder-edged instance of L1 and L2, where the "ancestor" whose end triggers invalidation is not an APS artifact or even a company-internal record, but a statute taking effect the instant a regulator acts.</t>
        <t>Disposition in this document. An external event changes a verifier's answer only through a record from a party in a role the authority model accepts, which is <xref target="cand-01"/> and <xref target="lifecycle-principal-departure"/>. The appointment reaches no verifier by itself. Replacement authority is a new grant from a party that currently holds the authority granted, under <xref target="lifecycle-succession"/>.</t>
        <t>What the rule does not establish. It does not establish that an external legal fact is observable to a verifier, and it does not establish the moment at which a verifier could establish one.</t>

        <t><strong>LC-A-016.  Some replacement authority is pre-committed at issuance time, not issued fresh after the fact</strong></t>
        <t>Status verified. Family lifecycle-principal-events. Domain agency-law.</t>
        <t>Situation. A single delegation instrument names a primary delegate and an ordered list of successors. The primary exits: dies, resigns, becomes incapacitated. The next-in-line successor should be able to act under the same original grant, with no new document and no action required from the principal at the moment of handoff.</t>
        <t>Source. The Uniform Power of Attorney Act's successor-agent provision. UPOAA (2006) §111, hosted by the Mississippi Secretary of State (<eref target="https://www.sos.ms.gov/content/documents/pol_res/power%20of%20attorney/5upoaa_final_may08.pdf"/>): "A principal may designate one or more successor agents to act if an agent resigns, dies, becomes incapacitated, is not qualified to serve, or declines to serve."</t>
        <t>Authority question. Where replacement authority was pre-committed inside the original instrument, does the successor act under that instrument or need a fresh grant?</t>
        <t>Pressure this case puts on an authority model. In the source instrument the successor's authority comes from the original grant, at the scope and terms that grant already set, and becomes exercisable on the primary's exit with nothing issued at handoff time. A model in which replacement authority is always issued fresh after the fact has no shape for a grant that was pre-committed at issuance.</t>
        <t>What a naive implementation gets wrong. A system built around "replacement authority always means a fresh grant from a currently-authorized principal" (the L3/L4 pattern) has no slot for succession pre-committed inside a single instrument. It either treats the successor as unauthorized until a new grant appears, or wrongly treats the successor as inheriting the primary's entire personal delegation tree rather than just this one instrument.</t>
        <t>Rule exercised. Invariants L3, L4. L3 and L4 assume replacement authority is issued fresh, after the fact, by whoever currently holds authority. This is a third pattern, authority pre-committed at issuance for a defined contingency, that neither invariant names.</t>
        <t>Disposition in this document. Pre-commitment is named at <xref target="lifecycle-succession"/> and no released package implements it. Where the terms declare no binding mode and the actor is not the named subject, the mode is not established and a verifier supplies no default.</t>
        <t>What the rule does not establish. It does not establish that a pre-committed successor is exercisable, and it does not establish what the successor may do before its activating condition is established.</t>

        <t><strong>LC-E-034.  A queued action that outlasts a suspension needs a live check at fire time, not just at the moment it was queued</strong></t>
        <t>Status reviewed hypothetical. Family lifecycle-time-and-scheduling. Domain agent-native.</t>
        <t>Situation. An agent's authority is suspended pending an investigation. It already had a recurring action queued to fire later. The suspension is lifted before the queued action's scheduled fire time. The scheduler holding the queued action has no visibility into suspension state at all, it only knows the schedule, and fires the action exactly as originally planned.</t>
        <t>Source. No external precedent claimed.</t>
        <t>Authority question. Does a queued action carry the authority state it was queued under, or the state live at the moment it fires?</t>
        <t>Pressure this case puts on an authority model. This particular timeline is benign under L8's own logic, since the suspension was already lifted before the action fired, so denying it would be wrong. The case is worth naming because the scheduler got the right answer by accident, having never checked live suspension state at all. The same scheduler would fire the action identically even if the suspension were still active at fire time, which is the actual failure this case points at.</t>
        <t>What a naive implementation gets wrong. A scheduler that only checks authority state at the moment an action was queued, not at fire time, produces the correct result in this timeline purely by luck. Change nothing about the scheduler and only change the timeline so the suspension is still active at fire time, and it fires an action that should have been paused, because dormant queued work was never something L8's stated mechanism has a hook to act on until the scheduler itself checks live state at fire time.</t>
        <t>Rule exercised. Invariants L8. L8 is specified only in terms of pausing the use of authority and everything that depends on it, which implicitly assumes a live dependency to pause. A queued-but-not-yet-executing action is dormant, not in use, so L8's text does not make explicit that the scheduler must check live state at fire time for the scheduled-action case specifically.</t>
        <t>Disposition in this document. The recheck at the moment of consumption is APS-LC-RECHECK-AT-ADMISSION. A scheduler is not an enforcement boundary in this document, and a queued action reaches an authority answer only at the next authorization boundary.</t>
        <t>What the rule does not establish. It claims no external precedent. It does not establish that any scheduler behaves this way, and the timeline it names is benign. Its value is the failure next to it, a scheduler that would fire identically with the suspension still standing.</t>

        <t><strong>LC-F-027.  An empty audit window can mean the record hasn't arrived yet, not that nothing happened</strong></t>
        <t>Status verified. Family lifecycle-infrastructure-failure. Domain distributed-systems.</t>
        <t>Situation. An APS deployment's audit pipeline batches evidence records for delivery rather than writing them synchronously. A revocation is enforced immediately at the gateway, but the durable audit record proving the decision happened does not land in the evidence store for some minutes afterward.</t>
        <t>Source. AWS documents that CloudTrail log delivery is not instantaneous. AWS CloudTrail FAQs (<eref target="https://aws.amazon.com/cloudtrail/faqs/"/>): "Typically, CloudTrail delivers an event within 5 minutes of the API call."</t>
        <t>Authority question. Can a verifier read an empty window in an evidence store as a finding that nothing happened in that window?</t>
        <t>Pressure this case puts on an authority model. An evidence store read inside its own delivery lag is not a complete account of the interval asked about, so a model that reconstructs authority state at a past instant has to say what an empty window is worth. The corpus records delivery lag as a bound a deployment declares and monitors, and it does not follow that an enforcement decision waits on its own audit record.</t>
        <t>What a naive implementation gets wrong. Treating an empty audit-log window as proof nothing happened during that window, when it may only mean the batched delivery hasn't caught up yet, exactly the wrong conclusion for an investigation happening in near-real-time.</t>
        <t>Rule exercised. Invariants L12. L12 (completeness is a separate and stronger claim). This is the delivery-lag instance: a record that hasn't arrived yet is not evidence of absence.</t>
        <t>Disposition in this document. A verifier does not read absence from silence. APS-LC-COMPLETENESS-BASIS makes a completeness claim state its basis and reports not established with the coverage limb where that basis cannot be established, and <xref target="known-limits"/> carries no proof of absence as a limit of this document.</t>
        <t>What the rule does not establish. It does not establish a delivery bound, and it does not establish that a record which has not arrived will arrive.</t>

        <t><strong>LC-D-025.  "Authority is currently valid" and "a complete record exists of what was done under it" are different claims a verifier answers separately</strong></t>
        <t>Status verified. Family lifecycle-credential-events. Domain security-incident.</t>
        <t>Situation. An outsourced support role is legitimately scoped to view sensitive customer data as part of its ordinary function. Some holders of that access are bribed to misuse it within that same valid scope. The org detects and terminates the involved principals before an extortion attempt surfaces, but the data already copied out cannot be recovered by the termination.</t>
        <t>Source. Coinbase's May 2025 disclosure that criminals bribed a number of its outsourced, India-based customer support contractors to copy customer data, which was then used in a $20 million extortion attempt. The Hacker News (<eref target="https://thehackernews.com/2025/05/coinbase-agents-bribed-data-of-1-users.html"/>): "What these attackers were doing was finding Coinbase employees and contractors based in India who were associated with our business process outsourcing or support operations, that kind of thing, and bribing them in order to obtain customer data."</t>
        <t>Authority question. Does establishing that authority is no longer valid establish anything about what was done under it while it was valid?</t>
        <t>Pressure this case puts on an authority model. Revoking a misbehaving principal's authority answers whether it can still act and answers nothing about what it already did while the authority was valid. The second question needs its own account, built from evidence of exercised authority inside the valid window, and a model that reports only the first has no way to say that the second is unanswered.</t>
        <t>What a naive implementation gets wrong. Treating "we revoked their access" as having closed the incident conflates stopping future authorized action with establishing what happened during the entire window the authority was, by every technical measure, valid and properly scoped. A validly scoped grant misused for its whole active duration leaves a gap no revocation, however prompt, can retroactively close.</t>
        <t>Rule exercised. Invariants L12. Distinct from L12's teardown-completeness framing, which is about whether a descendant list was complete at a boundary. This is about whether the record of what a still-valid grant was actually used for is complete, a related but separate completeness claim about exercised authority rather than about descendant enumeration.</t>
        <t>Disposition in this document. Chain validity and an account of what was done under a grant are two findings. APS-LC-COMPLETENESS-BASIS governs the second, and this document defines no basis on which such an account is complete.</t>
        <t>What the rule does not establish. It does not establish what a complete record of exercised authority would contain, and it does not establish that the revocation was late.</t>

        <t><strong>LC-C-012.  Independently rooted chains can commit to a shared objective without unioning their scopes</strong></t>
        <t>Status verified. Family lifecycle-multiple-principals-and-conflict.</t>
        <t>Situation. One agent holds two chains from two unrelated roots. It proposes an action whose amount is above the ceiling of either chain on its own and below the two ceilings added together, and presents both chains for the one action.</t>
        <t>Authority question. Does holding two valid chains give an agent authority that neither chain gives it, and is coordinating on one objective the same thing as combining two authorities?</t>
        <t>Rule exercised. APS-AUTH-CHAIN-NO-UNION and APS-AUTH-CHAIN-SET-NOT-A-SELECTION, at <xref target="lifecycle-l5"/>. Each action is decided against one root-to-leaf chain. A concatenated presentation is not a selection of one chain and no action is decided against it. Independently rooted chains may coordinate on a shared objective while each keeps its own scope.</t>
        <t>Disposition in this document. APS-AUTH-CHAIN-NO-UNION decides it. One chain per action, no union of scope grants or spend ceilings, and cross-principal composition needs a profile this document does not supply.</t>
        <t>What a naive implementation gets wrong. A verifier that unions the two ceilings admits an amount neither principal granted, and reports a single result for a decision it made against a set.</t>
        <t>What the rule does not establish. It does not establish how an action selects its chain, which is an implementation choice. It does not establish that cross-principal composition is impossible, only that it needs a profile this document does not supply.</t>

        <t><strong>LC-E-006.  Holding a scope does not carry authority to hand it to something you spawn</strong></t>
        <t>Status verified. Family lifecycle-agent-side-events.</t>
        <t>Situation. An agent holding a scope spawns a child process and passes the scope to it, with nothing in the authority model declaring that the agent may confer authority.</t>
        <t>Authority question. Is authority to exercise a scope the same authority as authority to confer that scope on another party?</t>
        <t>Rule exercised. Nothing normative in this revision. The question is carried at <xref target="oq-conferral-authority"/> because the counterexample against the drafted rule is unresolved. Monotonic narrowing bounds what a child may receive and says nothing about who may create one.</t>
        <t>Disposition in this document. Nothing normative in this revision. The question is carried at <xref target="oq-conferral-authority"/>, and until it is settled a verifier that cannot establish conferral authority reports it as not established rather than reading it out of possession.</t>
        <t>What a naive implementation gets wrong. A framework that reads conferral out of possession creates authority for a party the principal never named, and a framework that forbids it outright denies authority in models where a platform default supplies it.</t>
        <t>What the rule does not establish. It does not establish that conferral always needs a fresh act of the principal, and it does not decide what happens to children already issued without declared conferral authority.</t>

        <t><strong>LC-C-014.  A handover can require the incoming holder's acknowledgment, with authority staying put until it arrives</strong></t>
        <t>Status verified. Family lifecycle-time-and-scheduling.</t>
        <t>Situation. Responsibility for an agent moves from one holder to another. The instrument governing the handover makes the move effective on the incoming holder acknowledging it rather than at a stated instant.</t>
        <t>Authority question. Is a handover an instant at which one party authority ends and another begins, or an interval with a condition at its end?</t>
        <t>Rule exercised. APS-LC-SUCCESSION-NEW-GRANT and the handover rules at <xref target="lifecycle-succession"/>. The agent keeps its identity, its old authority does not survive revocation of the ancestor it depended on, and the replacement chain stands on its own because it was independently issued. Ordering is a deployment choice: a planned handover may accept an overlap and a compromised holder may call for a gap.</t>
        <t>Disposition in this document. The acknowledgment-gated handover is described at <xref target="lifecycle-succession"/> and no released package implements it. Where the terms declare no binding mode, the mode is not established and a verifier supplies no default.</t>
        <t>What a naive implementation gets wrong. A framework that models a handover as an instant has no state for the interval, and either grants the incoming holder authority before the acknowledgment or leaves the outgoing holder with none after the announcement.</t>
        <t>What the rule does not establish. It does not decide the cutover order for any deployment, and it does not establish what covers the agent work during the interval.</t>

        <t><strong>LC-B-024.  Multiple independent suspensions on the same principal have to be released independently, not cleared by any one of them lapsing</strong></t>
        <t>Status verified. Family lifecycle-legal-regulatory-events.</t>
        <t>Situation. Two parties, acting for unrelated reasons, each impose a suspension on one grant. One of the two releases its own.</t>
        <t>Authority question. Does a release from one source reach a cause imposed by another, and what is the state of the grant while one cause remains?</t>
        <t>Rule exercised. APS-LC-CAUSE-SET-NOT-FLAG, APS-LC-RELEASE-PER-CAUSE and APS-LC-RELEASE-STANDING-EXTERNAL, at <xref target="lifecycle-suspension"/>. Causes are a set, each named cause is decided independently, standing over a cause is resolved outside the record, and a party holding standing over a cause it did not impose can release it.</t>
        <t>Disposition in this document. APS-LC-CAUSE-SET-NOT-FLAG and APS-LC-RELEASE-PER-CAUSE decide it, and <xref target="lifecycle-suspension"/> defines no precedence order among causes.</t>
        <t>What a naive implementation gets wrong. A framework holding one suspension flag clears the whole pause on the first release, and a framework that reads standing from the release record lets any genuine signature clear any cause.</t>
        <t>What the rule does not establish. It does not define a precedence order among causes, and it does not establish that a release returns authority to the shape it had before the cause was imposed.</t>

        <t><strong>LC-E-002.  A valid, non-expired, non-revoked grant can become unexecutable, and that is a fourth state, not a variant of the other three</strong></t>
        <t>Status verified. Family lifecycle-agent-side-events.</t>
        <t>Situation. A grant names a target, an executor or a capability that no longer resolves. Nothing in the grant has changed and no lifecycle event has occurred.</t>
        <t>Authority question. Does a referent that has vanished change the verdict on the artifact, or does it change only what happens at execution?</t>
        <t>Rule exercised. The unexecutable statement at <xref target="d2e-unexecutable"/>, which is informative because no family exercises it. The artifact verdict is unchanged, the execution attempt fails, and the record carries the referent that could not be resolved. Unexecutable is an execution outcome and not an artifact verdict.</t>
        <t>Disposition in this document. <xref target="d2e-unexecutable"/>, which is informative. The artifact verdict is unchanged, the execution attempt fails, and the record carries the referent that could not be resolved.</t>
        <t>What a naive implementation gets wrong. A framework that reports such an artifact invalid, expired, revoked or suspended reports a lifecycle event that did not happen, and loses the distinction between an authority that ended and a target that vanished.</t>
        <t>What the rule does not establish. It does not prescribe which party re-points a grant whose referent is gone, or whether that party may. It does not cover a referent that changed rather than vanished.</t>

        <t><strong>LC-E-013.  A long job's own logic must expect authority invalidation to arrive silently mid-run, not only at its next gateway check</strong></t>
        <t>Status verified. Family lifecycle-agent-side-events.</t>
        <t>Situation. An agent is part way through a long operation when the authority it is running under is revoked. The next authorization boundary is some distance away.</t>
        <t>Authority question. What does the agent do between the revocation and the next boundary, and does the revocation reach the work already under way?</t>
        <t>Rule exercised. APS-LC-RECHECK-AT-ADMISSION at <xref target="lifecycle-l6"/>, and CAND-12 at <xref target="cand-12"/>. The old grant authorizes no new effect at the next authorization boundary. Effects already completed stand, and ending authority does not by itself end sessions or derived credentials already issued.</t>
        <t>Disposition in this document. APS-LC-RECHECK-AT-ADMISSION decides the next authorization boundary. Whether the operation resumes, restarts, compensates or stops is open at <xref target="oq-work-in-flight"/>.</t>
        <t>What a naive implementation gets wrong. A framework that checks authority only at a gateway treats the interval between boundaries as covered by the last check, and an implementation that assumes revocation halts a running operation assumes a control this document does not require.</t>
        <t>What the rule does not establish. It does not say whether the operation resumes, restarts, compensates or stops, which is the question at <xref target="oq-work-in-flight"/>.</t>

      </section>


      <section anchor="cc-boundary" numbered="true" toc="default">
        <name>Boundary Cases</name>
        <t>These 36 cases came out of the same research as the cases above and
        each one is sound. What each lacks is a lifecycle verdict. Each resolves
        to a liability outcome, a detection-surface gap, an operational practice
        or an evidence question rather than to an authority state a verifier
        returns from records. They are listed because they bound the model. They
        mark where the authority question stops and a different question starts,
        and a design that answers one of them by extending the authority model is
        answering a different question from the one it looks like.</t>

        <t>Grouped by the reason each is outside the authority question,
        with the count in each group: execution and scheduler mechanics, 5.
        Implementation or configuration defect, 2. Liability or legal
        consequence, 5. No authority transition in the scenario, 2. No
        verifier in the scenario, 3. Security control, 19. The full list is
        held in <xref target="APS-LIFECYCLE"/> and is not reproduced here.</t>

        <t>Eight of the thirty-six are named elsewhere in this document and
        are given here so that those references resolve. LC-E-010, an
        idempotency-key retry returning the original result instead of
        re-executing, and LC-E-011, a reused key with changed parameters
        erroring outright, both under execution and scheduler mechanics, and
        both behind the statement at <xref target="d2e-indeterminate"/> that
        deduplication is execution behavior rather than an authority finding.
        LC-E-022, at-least-once delivery making the target rather than the
        scheduler responsible for preventing duplicate execution, same group.
        LC-F-036, a cache whose configured lifetime drifts past its declared
        freshness policy, under implementation or configuration defect, which
        the stale-revocation failure class names as a configuration defect
        rather than an authority finding. LC-D-016, a substituted
        cryptographic constant defeating structural verification, under
        security control, which the trust-root substitution class names as the
        build-integrity half with no fixture family. LC-D-023 and LC-D-019,
        an admin credential on a readable share and harvested credentials
        remaining sufficient, both under security control, behind the ambient
        bypass class. LC-D-027, a narrowly granted vendor credential reaching
        unrelated systems because nothing enforced the boundary, same group
        and same class.</t>

        <t>Several of these are published security incidents. They are
        listed as sources of case shapes. Nothing here attributes fault to any
        named organization, and nothing here states that any incident would have
        gone differently under this document.</t>

        <t>This list does not establish that a boundary case is unimportant, and
        it does not establish that the six reasons are the only reasons a case
        could fall outside the authority question. It establishes which cases
        were read and set aside, and why.</t>
      </section>
    </section>

    <section anchor="requirement-matrix" numbered="true" toc="default">
      <name>Requirement Matrix</name>

      <t>This appendix is informative. It records every normative requirement
      this revision states outside the closed core, under the stable semantic
      identifier that requirement carries, with the section that states it,
      the feature it belongs to, the vectors that exercise it, and whether
      each reference implementation covers it.</t>

      <t>Identifiers have the form APS-&lt;AREA&gt;-&lt;SEMANTIC-SLUG&gt;
      defined in <xref target="conformance-identifiers"/>. The areas are fixed:
      ID, PRIN, AUTH, LC, POL, ENF, REC, EVID, PROF, ADAPT, GOV and CONF. An
      identifier never changes because a section moves and is never reused.
      Renumbering this document moves no identifier.</t>

      <t>Feature values. Core means a requirement of APS Core conformance,
      mandatory for an implementation claiming the class the requirement's area
      maps to in <xref target="conformance-classes"/>. Core, restated means the
      requirement is stated in the closed core and the named section restates it
      without adding to it, so citing either place cites one requirement.
      Lifecycle Core is an informative grouping name for the six identifiers in
      <xref target="authority-lifecycle"/> that restate the closed core, one from
      each of six of the twelve continuity rules, and it is not a claimable base.
      Core, document requirement means a requirement of APS Core conformance that
      binds a document a party writes rather than a runtime check a verifier
      performs, so no runtime vector can reach it. Every other value names one
      Candidate feature an implementation can claim.</t>

      <t>Vector columns. A requirement is recorded as exercised only where a
      named vector carries an assertion that fails when the requirement is
      violated. A related family is not coverage, and a family named in a
      status block is not coverage on its own. Where both vector fields read
      none, the requirement is specified and not exercised. Of the 99
      requirements below, 14 are exercised by a named vector and 85 are
      specified and not exercised.</t>

      <t>Implementation columns. TypeScript is agent-passport-system 7.2.0 on
      npm and Python is agent-passport-system 4.2.0 on PyPI. A value of yes
      means the named package has a surface that implements the requirement,
      read from its source, not that a run was observed. The one run this
      document records is the authority-revocation-record run at
      <xref target="revocation-record-format"/>, and no other run backs a value
      in these columns.</t>

      <t>Corpus pin. Every vector named below is present in the APS conformance
      suite <xref target="APS-CONFORMANCE"/> at merge commit
      5829e2ff00d75f49ce21e9d87e756658deb1ef33, dated 24 September 2026, which
      includes the authority-revocation-record family. Vectors were read from
      the working tree at commit 04c2e334395c55c029f061ae0ca55f80aeb6ee9e plus
      that family, and no vector changed between the two commits.</t>

      <section anchor="req-matrix-list" numbered="true" toc="default">
        <name>Requirements of This Revision</name>

        <t>The implementation values below come from reading the sources of
        agent-passport-system 7.2.0 on npm and agent-passport-system 4.2.0 on
        PyPI, on the same basis as <xref target="implementation-status"/>. No run
        backs any of them except the authority-revocation-record run recorded
        under <xref target="revocation-record-format"/>. A vector named under an
        identifier marked specified and not exercised carries no assertion keyed
        to that identifier. Where a status block elsewhere in this document lists
        implemented requirements, it lists the identifiers this list marks yes for
        at least one of the two packages.</t>

        <dl newline="true" spacing="normal">
          <dt>APS-EVID-VERDICT-SET-CLOSED</dt>
          <dd>Section: <xref target="admissibility"/>. Feature: Evidence model. Positive vectors: lifecycle-evidence-and-record, all 12 cases, whose runner asserts the closed verdict vocabulary on every case. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-EVID-REASON-CODE-REQUIRED</dt>
          <dd>Section: <xref target="admissibility"/>. Feature: Evidence model. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-EVID-NOT-ESTABLISHED</dt>
          <dd>Section: <xref target="admissibility"/>. Feature: Evidence model. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-EVID-NO-RETROACTIVE-REWRITE</dt>
          <dd>Section: <xref target="evidence-model"/>. Feature: Evidence model. Positive vectors: lifecycle-evidence-and-record LC-G-006-b, LC-G-006-c. Negative vectors: lifecycle-evidence-and-record LC-G-006-d, LC-G-006-e. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-EVID-DIGEST-MISMATCH-NOT-ESTABLISHED</dt>
          <dd>Section: <xref target="evidence-model"/>. Feature: Evidence model. Positive vectors: none. Negative vectors: lifecycle-evidence-and-record LC-G-006-f. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-ENF-NO-ABSENCE-INFERENCE</dt>
          <dd>Section: <xref target="mediation-assumption"/>. Feature: Evidence model. Positive vectors: none. Negative vectors: accountability-record vector 9, positive-deny-executed. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-REC-REVOCATION-TIME-SIGNED</dt>
          <dd>Section: <xref target="revocation-record-format"/>. Feature: Revocation record format. Positive vectors: authority-revocation-record ARR-01. Negative vectors: authority-revocation-record ARR-04. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-REC-REVOCATION-UNKNOWN-TYPE-UNSUPPORTED</dt>
          <dd>Section: <xref target="revocation-record-format"/>. Feature: Revocation record format. Positive vectors: none. Negative vectors: authority-revocation-record ARR-05. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-REC-REVOCATION-RECOMPUTE-IDS</dt>
          <dd>Section: <xref target="revocation-record-format"/>. Feature: Revocation record format. Positive vectors: authority-revocation-record ARR-01. Negative vectors: authority-revocation-record ARR-02, ARR-03, ARR-06. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-REC-REVOCATION-FIRST-WINS</dt>
          <dd>Section: <xref target="revocation-record-format"/>. Feature: Revocation record format. Positive vectors: authority-revocation-record ARR-07. Negative vectors: authority-revocation-record ARR-08. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-REC-REVOCATION-REVOKER-IS-ISSUER</dt>
          <dd>Section: <xref target="revocation-record-format"/>. Feature: Revocation record format. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-PROF-REQUIRED-CONTENT</dt>
          <dd>Section: <xref target="profile-required-content"/>. Feature: Profile model. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-PROF-SEMANTIC-PRESERVATION</dt>
          <dd>Section: <xref target="profile-required-content"/>. Feature: Profile model. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-PROF-NO-WIDENING</dt>
          <dd>Section: <xref target="profile-required-content"/>. Feature: Profile model. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-PROF-UNKNOWN-NOT-VALID</dt>
          <dd>Section: <xref target="profile-required-content"/>. Feature: Profile model. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-LC-STANDING-NOT-FROM-RECORD</dt>
          <dd>Section: <xref target="lifecycle-concepts"/>. Feature: Lifecycle concepts. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-STANDING-THREE-VALUED</dt>
          <dd>Section: <xref target="lifecycle-concepts"/>. Feature: Lifecycle concepts. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-ISSUER-VS-LIFECYCLE-STANDING</dt>
          <dd>Section: <xref target="lifecycle-concepts"/>. Feature: Lifecycle concepts. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-LC-VERDICT-ENUMERATIONS-DISTINCT</dt>
          <dd>Section: <xref target="lifecycle-concepts"/>. Feature: Lifecycle concepts. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-NOT-ESTABLISHED-LIMB</dt>
          <dd>Section: <xref target="lifecycle-concepts"/>. Feature: Lifecycle concepts. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-ANCESTOR-REVOCATION-REACHES-DEPENDENTS</dt>
          <dd>Section: <xref target="lifecycle-l1"/>. Feature: Lifecycle Core. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-IDENTITY-NOT-AUTHORITY</dt>
          <dd>Section: <xref target="lifecycle-l2"/>. Feature: Continuity rules outside Lifecycle Core. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-NO-REVOCATION-REVERSAL</dt>
          <dd>Section: <xref target="lifecycle-l3"/>. Feature: Lifecycle Core. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-NO-REPARENTING</dt>
          <dd>Section: <xref target="lifecycle-l3"/>. Feature: Continuity rules outside Lifecycle Core. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-SUCCESSOR-NO-INHERITANCE</dt>
          <dd>Section: <xref target="lifecycle-l4"/>. Feature: Continuity rules outside Lifecycle Core. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-AUTH-CHAIN-NO-UNION</dt>
          <dd>Section: <xref target="lifecycle-l5"/>. Feature: Lifecycle Core. Positive vectors: none. Negative vectors: single-chain-selection SCS-06, chain-selection-no-union CSNU-01 to CSNU-11. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-AUTH-CHAIN-SET-NOT-A-SELECTION</dt>
          <dd>Section: <xref target="lifecycle-l5"/>. Feature: Continuity rules outside Lifecycle Core. Positive vectors: none. Negative vectors: single-chain-selection SCS-06. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-AUTH-CHAIN-REPORT-ONE-CHAIN</dt>
          <dd>Section: <xref target="lifecycle-l5"/>. Feature: Continuity rules outside Lifecycle Core. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-RECHECK-AT-ADMISSION</dt>
          <dd>Section: <xref target="lifecycle-l6"/>. Feature: Lifecycle Core. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-LC-CACHED-DECISION-FRESHNESS</dt>
          <dd>Section: <xref target="lifecycle-l6"/>. Feature: Continuity rules outside Lifecycle Core. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-LC-UNKNOWN-NOT-ACTIVE</dt>
          <dd>Section: <xref target="lifecycle-l7"/>. Feature: Lifecycle Core. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-UNKNOWN-DENIAL-SAYS-NOT-ESTABLISHED</dt>
          <dd>Section: <xref target="lifecycle-l7"/>. Feature: Continuity rules outside Lifecycle Core. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-LC-SUSPENSION-NOT-REVOCATION</dt>
          <dd>Section: <xref target="lifecycle-l8"/>. Feature: Continuity rules outside Lifecycle Core. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-ROTATION-NOT-REVOCATION</dt>
          <dd>Section: <xref target="lifecycle-l9"/>. Feature: Lifecycle Core. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-REVOCATION-NOT-ABOUT-KEY</dt>
          <dd>Section: <xref target="lifecycle-l9"/>. Feature: Continuity rules outside Lifecycle Core. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-EXPIRY-NOT-REVOCATION</dt>
          <dd>Section: <xref target="lifecycle-l10"/>. Feature: Continuity rules outside Lifecycle Core. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-NO-RESURRECTION</dt>
          <dd>Section: <xref target="lifecycle-l11"/>. Feature: Continuity rules outside Lifecycle Core. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-COMPLETENESS-BASIS</dt>
          <dd>Section: <xref target="lifecycle-l12"/>. Feature: Continuity rules outside Lifecycle Core. Positive vectors: none. Negative vectors: lifecycle-infrastructure-failure LC-F-016-b, LC-F-026-a, LC-F-027-a, LC-F-027-b, LC-F-029-a. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-LC-ACTIVATION-SOURCE-DECLARED</dt>
          <dd>Section: <xref target="lifecycle-activation"/>. Feature: Activation conditions. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-ACTIVATION-EVIDENCE-ORDER</dt>
          <dd>Section: <xref target="lifecycle-activation"/>. Feature: Activation conditions. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-ACTIVATION-NOT-INVALID</dt>
          <dd>Section: <xref target="lifecycle-activation"/>. Feature: Activation conditions. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-BOUND-KINDS-DISTINCT</dt>
          <dd>Section: <xref target="lifecycle-bounds"/>. Feature: Purpose bounds and exhaustion. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-PURPOSE-MEMBERSHIP-NOT-EXHAUSTION</dt>
          <dd>Section: <xref target="lifecycle-bounds"/>. Feature: Purpose bounds and exhaustion. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-FULFILMENT-UNESTABLISHED-NOT-EXHAUSTED</dt>
          <dd>Section: <xref target="lifecycle-bounds"/>. Feature: Purpose bounds and exhaustion. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-EXHAUSTION-IRREVERSIBLE</dt>
          <dd>Section: <xref target="lifecycle-bounds"/>. Feature: Purpose bounds and exhaustion. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-REFERENT-CONTINUITY-PINNED</dt>
          <dd>Section: <xref target="lifecycle-capability-binding"/>. Feature: Capability and policy binding. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-PINNED-MISMATCH-DENIES</dt>
          <dd>Section: <xref target="lifecycle-capability-binding"/>. Feature: Capability and policy binding. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-POLICY-VERSION-IDENTIFIED</dt>
          <dd>Section: <xref target="lifecycle-capability-binding"/>. Feature: Core, restated. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-LC-POLICY-TIGHTENING-RESTRICTS</dt>
          <dd>Section: <xref target="lifecycle-capability-binding"/>. Feature: Capability and policy binding. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-LC-EPOCH-FEATURE-DEFINITION</dt>
          <dd>Section: <xref target="lifecycle-epoch"/>. Feature: Authority epoch. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-LC-EPOCH-NO-REGRESSION</dt>
          <dd>Section: <xref target="lifecycle-epoch"/>. Feature: Authority epoch. Positive vectors: none. Negative vectors: authority-epoch-rollback AER-01 to AER-12, for rejection of stale authority. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-EPOCH-SCOPE-DECLARED</dt>
          <dd>Section: <xref target="lifecycle-epoch"/>. Feature: Authority epoch. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-WITHDRAWAL-NOT-REMOVAL</dt>
          <dd>Section: <xref target="lifecycle-l3"/>. Feature: Continuity rules outside Lifecycle Core. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-CAUSE-SET-NOT-FLAG</dt>
          <dd>Section: <xref target="lifecycle-suspension"/>. Feature: Suspension cause sets. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-RELEASE-PER-CAUSE</dt>
          <dd>Section: <xref target="lifecycle-suspension"/>. Feature: Suspension cause sets. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-RELEASE-STANDING-EXTERNAL</dt>
          <dd>Section: <xref target="lifecycle-suspension"/>. Feature: Suspension cause sets. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-CHAIN-RESULT-PRECEDES-PAUSE</dt>
          <dd>Section: <xref target="lifecycle-suspension"/>. Feature: Suspension cause sets. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-STATUS-SOURCE-ACCEPTED</dt>
          <dd>Section: <xref target="lifecycle-status-coverage"/>. Feature: Status sources. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-FRESHNESS-PER-SOURCE</dt>
          <dd>Section: <xref target="lifecycle-status-coverage"/>. Feature: Status sources. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-STATUS-CONFLICT-NO-ADMIT</dt>
          <dd>Section: <xref target="lifecycle-status-coverage"/>. Feature: Status sources. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-COVERAGE-AS-STATED</dt>
          <dd>Section: <xref target="lifecycle-status-coverage"/>. Feature: Status sources. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-OFFLINE-DECLARED-IN-ADVANCE</dt>
          <dd>Section: <xref target="lifecycle-status-coverage"/>. Feature: Status sources. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-LC-SUCCESSION-NEW-GRANT</dt>
          <dd>Section: <xref target="lifecycle-succession"/>. Feature: Succession and handover. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-LC-BINDING-MODE-NO-DEFAULT</dt>
          <dd>Section: <xref target="lifecycle-succession"/>. Feature: Succession and handover. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-LC-VACANCY-NOT-ESTABLISHED</dt>
          <dd>Section: <xref target="lifecycle-succession"/>. Feature: Succession and handover. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-PRIN-TWO-FINDINGS</dt>
          <dd>Section: <xref target="lifecycle-principal-departure"/>. Feature: Principals and departure. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-PRIN-ROLE-NOT-FROM-BODY</dt>
          <dd>Section: <xref target="lifecycle-principal-departure"/>. Feature: Principals and departure. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-PRIN-SILENCE-NOT-CONSENT</dt>
          <dd>Section: <xref target="lifecycle-principal-departure"/>. Feature: Principals and departure. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-PRIN-ACCOUNTABILITY-SEPARATE</dt>
          <dd>Section: <xref target="lifecycle-principal-departure"/>. Feature: Principals and departure. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-EVID-RELATIONS-NOT-TRANSITIVE</dt>
          <dd>Section: <xref target="d2e-relations"/>. Feature: Decision to effect. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-REC-DECISION-REF-RECOMPUTED</dt>
          <dd>Section: <xref target="d2e-relations"/>. Feature: Core, restated. Positive vectors: receipt-decision-relation pass, temporal-equal, temporal-earlier. Negative vectors: receipt-decision-relation substitution and the three flipped counterparts. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-REC-DECISION-BINDING-BEFORE-READ</dt>
          <dd>Section: <xref target="d2e-relations"/>. Feature: Decision to effect. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-ENF-EXACT-ACTION-MATCH</dt>
          <dd>Section: <xref target="d2e-exact-call"/>. Feature: Decision to effect. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-ENF-NO-COVERAGE-NO-BYPASS-CLAIM</dt>
          <dd>Section: <xref target="d2e-bypass"/>. Feature: Decision to effect. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-ENF-COVERAGE-PREMISE-SCOPED</dt>
          <dd>Section: <xref target="d2e-bypass"/>. Feature: Decision to effect. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-ENF-COVERAGE-RESOLVES-TO-ADMISSION</dt>
          <dd>Section: <xref target="d2e-bypass"/>. Feature: Decision to effect. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-EVID-EFFECT-NOT-FROM-RESULT</dt>
          <dd>Section: <xref target="d2e-effect-verification"/>. Feature: Decision to effect. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-EVID-READBACK-OUTCOMES</dt>
          <dd>Section: <xref target="d2e-effect-verification"/>. Feature: Decision to effect. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-EVID-MISSING-NAMED</dt>
          <dd>Section: <xref target="d2e-not-established"/>. Feature: Decision to effect. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-EVID-STATES-NOT-SYNONYMS</dt>
          <dd>Section: <xref target="d2e-execution-states"/>. Feature: Decision to effect. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-ENF-RETRY-NEW-DECISION</dt>
          <dd>Section: <xref target="d2e-indeterminate"/>. Feature: Decision to effect. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-ENF-COMPENSATION-NEW-RECORD</dt>
          <dd>Section: <xref target="d2e-indeterminate"/>. Feature: Decision to effect. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-ENF-RESERVE-AT-APPROVAL</dt>
          <dd>Section: <xref target="two-phase-execution"/>. Feature: Core, restated. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-ENF-COMPLETE-AT-ADMISSION</dt>
          <dd>Section: <xref target="policy-decision"/>. Feature: Core, restated. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-ENF-SETTLE-AFTER-RESULT</dt>
          <dd>Section: <xref target="cumulative-spend"/>. Feature: Core, restated. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-ENF-RELEASE-PRE-DISPATCH-ONLY</dt>
          <dd>Section: <xref target="cumulative-spend"/>. Feature: Core, restated. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-ENF-CONFLICTING-REUSE-REJECTED</dt>
          <dd>Section: <xref target="policy-chain"/>. Feature: Core, restated. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-ADAPT-NO-WIDENING</dt>
          <dd>Section: <xref target="adapter-general-rules"/>. Feature: Adapter contracts. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-ADAPT-NO-SILENT-SEMANTIC-LOSS</dt>
          <dd>Section: <xref target="adapter-general-rules"/>. Feature: Adapter contracts. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-ADAPT-RECOMPUTE-ACTION-REF</dt>
          <dd>Section: <xref target="adapter-general-rules"/>. Feature: Adapter contracts. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python yes.</dd>

          <dt>APS-ADAPT-STAGE-COMMITMENT</dt>
          <dd>Section: <xref target="adapter-general-rules"/>. Feature: Adapter contracts. Positive vectors: none. Negative vectors: k8s-receipt-admission-stage-negatives cand1 to cand5. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-ADAPT-CANONICALIZATION-STATED</dt>
          <dd>Section: <xref target="adapter-general-rules"/>. Feature: Adapter contracts. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-ADAPT-MCP-EXTENSION-DECLARED</dt>
          <dd>Section: <xref target="adapter-mcp"/>. Feature: Adapter contracts. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-ADAPT-NO-INVENTED-SPEND-BASIS</dt>
          <dd>Section: <xref target="adapter-oauth-idjag"/>. Feature: Core, restated. Positive vectors: none. Negative vectors: none. Implementation: TypeScript yes, Python no.</dd>

          <dt>APS-CONF-CLASS-NAMED</dt>
          <dd>Section: <xref target="conformance-classes"/>. Feature: Core, document requirement. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-CONF-CLAIM-CONTENT</dt>
          <dd>Section: <xref target="conformance-claim"/>. Feature: Core, document requirement. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-CONF-CLAIM-NOT-VERDICT</dt>
          <dd>Section: <xref target="conformance-claim"/>. Feature: Core, document requirement. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-CONF-THREE-RESULTS</dt>
          <dd>Section: <xref target="conformance-results"/>. Feature: Conformance reporting. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

          <dt>APS-CONF-NOT-SUPPORTED-NOT-SCORE</dt>
          <dd>Section: <xref target="conformance-results"/>. Feature: Conformance reporting. Positive vectors: none. Negative vectors: none. Implementation: TypeScript no, Python no.</dd>

        </dl>

        <t>What this list does not establish. It does not establish that any
        implementation ran any vector, that an exercised requirement is
        correctly implemented anywhere, or that the requirements listed are
        every obligation this document places on an implementation. An
        obligation stated across two sentences, or stated without a BCP 14
        keyword, carries no identifier and does not appear here.</t>
      </section>

  <section anchor="req-id-map" numbered="true" toc="default">
    <name>Map From the Suite Requirement Identifiers</name>

    <t>The rows below are every requirement the inventory records against a
    named fixture. The 43 requirements the inventory records as not exercised
    with no fixture at all are not reproduced here and are listed in the
    inventory itself.</t>

    <table anchor="tbl-req-coverage" align="left">
      <name>Requirement coverage, corpus inventory rows with a fixture</name>
      <thead>
        <tr><th>REQ id</th><th>Sec</th><th>Family</th><th>Vec</th><th>Impl</th><th>Result</th></tr>
      </thead>
      <tbody>
        <tr><td>REQ-2.2-1</td><td>2.2</td><td>cross-stack/receipts-amdal</td><td>6</td><td>PY</td><td>partial</td></tr>
        <tr><td>REQ-2.2-4</td><td>2.2</td><td>cross-stack/receipts-amdal</td><td>6</td><td>PY</td><td>partial</td></tr>
        <tr><td>REQ-2.4-2</td><td>2.4</td><td>cross-stack/oracle-safety-check</td><td>13</td><td>TS, PKG</td><td>partial</td></tr>
        <tr><td>REQ-2.5-4</td><td>2.5</td><td>cross-stack/oracle-safety-check</td><td>13</td><td>TS, PKG</td><td>partial</td></tr>
        <tr><td>REQ-2.6-1</td><td>2.6</td><td>instruction-provenance</td><td>10</td><td>TS</td><td>partial</td></tr>
        <tr><td>REQ-3.2-1</td><td>3.2</td><td>cross-stack/oracle-safety-check</td><td>13</td><td>none</td><td>not exercised</td></tr>
        <tr><td>REQ-3.2-2</td><td>3.2</td><td>cross-stack/oracle-safety-check</td><td>13</td><td>TS</td><td>exercised</td></tr>
        <tr><td>REQ-3.2-3</td><td>3.2</td><td>cross-stack/oracle-safety-check</td><td>13</td><td>TS</td><td>partial</td></tr>
        <tr><td>REQ-3.2-4</td><td>3.2</td><td>cross-stack/oracle-safety-check</td><td>13</td><td>TS</td><td>exercised</td></tr>
        <tr><td>REQ-3.2-5</td><td>3.2</td><td>cross-stack/oracle-safety-check</td><td>13</td><td>TS</td><td>partial</td></tr>
        <tr><td>REQ-3.2-7</td><td>3.2</td><td>cross-stack/oracle-safety-check</td><td>13</td><td>TS</td><td>exercised</td></tr>
        <tr><td>REQ-3.2-8</td><td>3.2</td><td>cross-stack/oracle-safety-check</td><td>13</td><td>TS</td><td>partial</td></tr>
        <tr><td>REQ-3.2-9</td><td>3.2</td><td>cross-stack/oracle-safety-check</td><td>13</td><td>TS</td><td>exercised</td></tr>
        <tr><td>REQ-3.3-1</td><td>3.3</td><td>cross-stack/oracle-safety-check</td><td>13</td><td>TS</td><td>partial</td></tr>
        <tr><td>REQ-3.5-1</td><td>3.5</td><td>cross-stack/oracle-safety-check</td><td>13</td><td>TS</td><td>partial</td></tr>
        <tr><td>REQ-3.5-2</td><td>3.5</td><td>interop/aae-envelope</td><td>4</td><td>TS</td><td>partial</td></tr>
        <tr><td>REQ-4-1</td><td>4</td><td>cross-stack/oracle-safety-check</td><td>13</td><td>none</td><td>not exercised</td></tr>
        <tr><td>REQ-4-2</td><td>4</td><td>cross-stack/oracle-safety-check</td><td>13</td><td>none</td><td>partial</td></tr>
        <tr><td>REQ-4.1-1</td><td>4.1</td><td>actionref-canonical</td><td>6</td><td>none</td><td>not exercised</td></tr>
        <tr><td>REQ-4.1-2</td><td>4.1</td><td>actionref-canonical</td><td>6</td><td>none</td><td>not exercised</td></tr>
        <tr><td>REQ-4.1-3</td><td>4.1</td><td>actionref-canonical</td><td>6</td><td>TS</td><td>partial</td></tr>
        <tr><td>REQ-4.1-7</td><td>4.1</td><td>cross-stack/action-ref-v1-negatives</td><td>14</td><td>NODE</td><td>partial</td></tr>
        <tr><td>REQ-4.1-8</td><td>4.1</td><td>cross-stack/action-ref-v1-negatives</td><td>14</td><td>NODE</td><td>partial</td></tr>
        <tr><td>REQ-4.2-1</td><td>4.2</td><td>cross-stack/argentum-action-ref-v1v2</td><td>10</td><td>PY</td><td>exercised</td></tr>
        <tr><td>REQ-5.1-1</td><td>5.1</td><td>cross-stack/receipts-aeoess</td><td>2</td><td>PY, PKG</td><td>partial</td></tr>
        <tr><td>REQ-5.1-2</td><td>5.1</td><td>cross-stack/receipts-aeoess, cross-stack/oracle-safety-check</td><td>2, 13</td><td>PY, TS</td><td>partial</td></tr>
        <tr><td>REQ-5.1-3</td><td>5.1</td><td>cross-stack/receipts-aeoess</td><td>2</td><td>PY, PKG</td><td>partial</td></tr>
        <tr><td>REQ-5.2-1</td><td>5.2</td><td>cross-stack/receipts-aeoess</td><td>2</td><td>PY</td><td>partial</td></tr>
        <tr><td>REQ-5.3.1-1</td><td>5.3.1</td><td>cross-stack/receipts-aeoess</td><td>2</td><td>none</td><td>partial</td></tr>
        <tr><td>REQ-5.3.2-3</td><td>5.3.2</td><td>cross-stack/oracle-safety-check</td><td>13</td><td>none</td><td>not exercised</td></tr>
        <tr><td>REQ-5.4-1</td><td>5.4</td><td>receipt-decision-relation</td><td>7</td><td>TS</td><td>partial</td></tr>
        <tr><td>REQ-5.4-2</td><td>5.4</td><td>receipt-decision-relation</td><td>7</td><td>none</td><td>not exercised</td></tr>
        <tr><td>REQ-5.5-1</td><td>5.5</td><td>cross-stack/oracle-safety-check</td><td>13</td><td>TS</td><td>partial</td></tr>
        <tr><td>REQ-5.6-1</td><td>5.6</td><td>cross-stack/oracle-safety-check</td><td>13</td><td>TS</td><td>partial</td></tr>
        <tr><td>REQ-7.3-3</td><td>7.3</td><td>cross-stack/token-exchange-attenuation-v0</td><td>12</td><td>TS</td><td>partial</td></tr>
        <tr><td>REQ-9-3</td><td>9</td><td>cross-stack/aat-amdal</td><td>5</td><td>PY</td><td>partial</td></tr>
        <tr><td>REQ-9-4</td><td>9</td><td>cross-stack/action-ref-v1-negatives</td><td>14</td><td>NODE</td><td>partial</td></tr>
        <tr><td>REQ-9-6</td><td>9</td><td>interop/scitt-cose-vectors-ietf126</td><td>not run</td><td>TS</td><td>partial</td></tr>
        <tr><td>REQ-9-7</td><td>9</td><td>composition/a2a-1496-negative-paths</td><td>4</td><td>TS</td><td>partial</td></tr>
      </tbody>
    </table>

    <t>Reading the table. A vector count is the count for the file the inventory
    row names, not for every file in the family. Where a family carries dated
    files, the count is for the file cited. The oracle-safety-check rows share
    one 13-vector set and differ in which mutation of it the row reaches, so the
    counts do not add across rows. The scitt-cose row records a verifier that
    exists but needs an external test-vector checkout that is not in the tree,
    and the corpus records that run as skipped.</t>

    <t>What this table does not establish. It does not establish that an
    exercised row means the requirement is correctly implemented anywhere, that
    a partial row is close to exercised, or that the ratio of the three results
    measures anything. It does not carry the 43 requirements with no fixture,
    so it is not a coverage summary.</t>
  </section>

  <section anchor="family-index" numbered="true" toc="default">
    <name>Families Named in Status Blocks</name>

    <t>The families below are named in the status blocks of
    <xref target="profile-model"/> and <xref target="conformance"/>. Five of them
    are named in <xref target="req-matrix-list"/> as the vectors that exercise a
    requirement of this revision: accountability-record,
    authority-epoch-rollback, chain-selection-no-union, receipt-decision-relation
    and single-chain-selection. The rest carry no requirement identifier, because
    the inventory at <xref target="req-id-map"/> covers the -03 text and these
    families were written against text proposed after it.</t>

    <table anchor="tbl-family-index" align="left">
      <name>Fixture families named in status blocks of the profile and conformance sections</name>
      <thead>
        <tr><th>Family</th><th>Vec</th><th>Counted from</th><th>Declared status</th></tr>
      </thead>
      <tbody>
        <tr><td>activation-not-established</td><td>19</td><td>cases</td><td>candidate_against_proposed</td></tr>
        <tr><td>accountability-record</td><td>12</td><td>vectors</td><td>not declared in the vectors file</td></tr>
        <tr><td>action-result-binding</td><td>6</td><td>cases</td><td>not declared in the vectors file</td></tr>
        <tr><td>ancestor-revocation-chain</td><td>4</td><td>cases</td><td>not declared in the vectors file</td></tr>
        <tr><td>approval-single-use</td><td>9</td><td>presentations</td><td>not declared in the vectors file</td></tr>
        <tr><td>arap-binding</td><td>27</td><td>denial_binding_cases 12, approval_cases 10, pep_fallback_cases 5</td><td>candidate</td></tr>
        <tr><td>authority-epoch-rollback</td><td>12</td><td>cases</td><td>candidate</td></tr>
        <tr><td>cached-authorization-revocation</td><td>9</td><td>cases</td><td>candidate</td></tr>
        <tr><td>capability-binding-drift</td><td>8</td><td>presentations</td><td>candidate_against_proposed</td></tr>
        <tr><td>chain-selection-no-union</td><td>11</td><td>cases</td><td>candidate_against_proposed</td></tr>
        <tr><td>conflicting-status-sources</td><td>14</td><td>cases</td><td>candidate_against_proposed</td></tr>
        <tr><td>instruction-provenance</td><td>10</td><td>vectors</td><td>not declared in the fixture file</td></tr>
        <tr><td>issuance-refusal-expiry</td><td>8</td><td>part_a_issuance 5, part_b_verification 3</td><td>not declared in the vectors file</td></tr>
        <tr><td>key-rotation-historical</td><td>5</td><td>cases</td><td>not declared in the vectors file</td></tr>
        <tr><td>lifecycle-conferral-without-authority</td><td>10</td><td>vectors</td><td>not declared in the vectors file</td></tr>
        <tr><td>lifecycle-credential-events</td><td>42</td><td>cases</td><td>candidate_against_proposed</td></tr>
        <tr><td>lifecycle-identifier-reuse-and-rename</td><td>13</td><td>presentations</td><td>candidate_against_proposed</td></tr>
        <tr><td>lifecycle-legal-regulatory-events</td><td>44</td><td>vectors</td><td>not declared in the vectors file</td></tr>
        <tr><td>lifecycle-multiple-principals-and-conflict</td><td>92</td><td>vectors</td><td>candidate_against_proposed</td></tr>
        <tr><td>lifecycle-outside-the-chain-standing</td><td>22</td><td>vectors</td><td>candidate_against_proposed</td></tr>
        <tr><td>lifecycle-principal-events</td><td>32</td><td>cases</td><td>candidate_against_proposed</td></tr>
        <tr><td>merkle-root-parity</td><td>6</td><td>vectors</td><td>not declared in the vectors file</td></tr>
        <tr><td>read-fidelity-receipt</td><td>8</td><td>vectors</td><td>not declared in the fixture file</td></tr>
        <tr><td>receipt-decision-relation</td><td>7</td><td>one file per vector</td><td>not declared in a vectors file</td></tr>
        <tr><td>revocation-resolution-forward-compat</td><td>14</td><td>cases</td><td>not declared in the vectors file</td></tr>
        <tr><td>runtime-authority-denial-continuity</td><td>9</td><td>cases</td><td>not declared in the vectors file</td></tr>
        <tr><td>single-chain-selection</td><td>6</td><td>cases</td><td>not declared in the vectors file</td></tr>
        <tr><td>suspension-cause-composition</td><td>16</td><td>cases</td><td>candidate_against_proposed</td></tr>
      </tbody>
    </table>

    <t>The cross-stack group named in the protocol adapter class is not one
    family. At the pinned commit it holds nine external-system families and two
    lab-authored regression families, each admitted under its own evidence
    document and each declaring its own verification split. They are not counted
    as a single number here for the same reason the corpus refuses a suite-wide
    support number.</t>

    <t>Counted from. The Counted from column names the key in the family's
    vectors file that the count was taken from. The key differs by family
    because the unit differs, which is the same reason
    <xref target="conformance-results"/> gives for refusing a total. A count in
    this table is a count of entries under one named key and is not comparable
    across rows.</t>

    <t>Declared status. The value is read from the family's vectors file, from
    its status member or its label member. Where a file carries both and they
    differ in spelling, the longer spelling is recorded, which is the reading
    the corpus itself states for the two families that do this. Not declared in
    the vectors file means the file carries neither member. That does not mean
    the family has no status, and several state one in the README only.</t>

    <t>Every family in this table is run by the repository's own test entry
    point at the pinned commit, which is a fact about the package manifest at
    that commit rather than an observation of a run.</t>

    <t>What this table does not establish. It does not establish that any family
    passed, that the families listed are a complete set for this document, or
    that vector counts measure the strength of a family. A family with 92
    vectors is not four times the family with 22.</t>
  </section>
    </section>
  </back>
</rfc>
