<?xml version="1.0" encoding="utf-8"?>
<rfc ipr="trust200902" docName="draft-wang-jep-action-mandate-profile-02" category="exp" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <front>
    <title abbrev="JEP-AMP">JEP Action Mandate Profile (JEP-AMP)</title>
    <seriesInfo name="Internet-Draft" value="draft-wang-jep-action-mandate-profile-02"/>
    <author initials="Y." surname="Wang" fullname="Yuqiang Wang">
      <organization/>
      <address>
        <email>signal@humanjudgment.org</email>
        <uri>https://github.com/hjs-spec</uri>
      </address>
    </author>
    <date year="2026" month="September" day="26"/>
    <keyword>JEP</keyword><keyword>mandate</keyword><keyword>delegation</keyword>
    <keyword>authorization</keyword><keyword>agents</keyword>
    <abstract>
      <t>This document defines JEP Action Mandate Profile 2 (JEP-AMP-2), a profile of the Judgment Event Protocol (JEP) <xref target="JEP"/>.</t>
      <t>JEP-AMP-2 specifies how a JEP Delegation event can express a bounded, verifiable, terminable, and auditable mandate for an agent, human, organization, workflow, or system to attempt an action on behalf of a principal.</t>
      <t>JEP-AMP-2 does not redefine JEP-Core event verbs, Event Identity, Event Hash, signature semantics, validation checks, identity systems, credential systems, legal liability, payment clearing, or global authorization validity. It defines a signed Action Mandate Descriptor and profile-level rules for evaluating mandate validity under an explicit trust, policy, domain, and relying-party context.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="intro"><name>Introduction</name>
      <t>JEP-Core defines signed J/D/T/V events and the minimum protocol semantics of Delegation. A Core-valid D event records a delegation statement, but does not by itself establish that the delegator possessed authority, that the delegatee may execute an action, or that a relying party should permit the action.</t>
      <t>JEP-AMP-2 defines a profile for one narrower use of D: a bounded action mandate.</t>
      <t>The central profile question is:</t>
      <sourcecode type="text"><![CDATA[
Does this signed delegation satisfy the declared AMP mandate rules,
and does the requested action remain within that mandate?
]]></sourcecode>
      <t>The local decision to permit an external action remains a relying-party or domain-policy decision.</t>
      <t>JEP Profiles <xref target="JEP-PROFILES"/> defines the general profile-selection, composition, trust, acceptance, and profile-specific-check model.</t>
      <t>JEP Conformance <xref target="JEP-CONFORMANCE"/> defines validation-result and test-harness conventions used by this profile.</t>
      <t>Where this document conflicts with JEP-Core, JEP-Core controls.</t>
    </section>
    <section anchor="requirements"><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.</t>
    </section>
    <section anchor="terminology"><name>Terminology</name>
      <section anchor="term-mandate"><name>Action Mandate</name>
      <t>A signed JEP Delegation event whose <tt>what</tt> value conforms to the Action Mandate Descriptor defined by this profile.</t>
      </section>
      <section anchor="term-identity"><name>Mandate Identity</name>
      <t>The Event Identity <tt>(who,id)</tt> of the JEP Delegation event that issues the mandate.</t>
      <t>Mandate Identity is the canonical logical identifier of an AMP-2 mandate.</t>
      </section>
      <section anchor="term-artifact-hash"><name>Mandate Artifact Hash</name>
      <t>The JEP Event Hash of one exact signed representation of the issuance event.</t>
      <t>The Mandate Artifact Hash is not the Mandate Identity.</t>
      </section>
      <section anchor="term-issuer"><name>Issuer</name>
      <t>The actor identified by the issuance event's <tt>who</tt> member.</t>
      <t>The issuer is not automatically authorized to act for the principal.</t>
      </section>
      <section anchor="term-principal"><name>Principal</name>
      <t>The person, organization, account, tenant, legal entity, or other subject on whose behalf the delegated action is to be attempted.</t>
      </section>
      <section anchor="term-delegatee"><name>Delegatee</name>
      <t>The actor identified by <tt>what.delegatee</tt>.</t>
      </section>
      <section anchor="term-mandate-status"><name>Mandate Status</name>
      <t>A profile-level result indicating whether the mandate satisfies the AMP-2 requirements for the requested evaluation context.</t>
      <t>The initial values are <tt>valid</tt>, <tt>invalid</tt>, and <tt>indeterminate</tt>.</t>
      </section>
      <section anchor="term-action-decision"><name>Action Decision</name>
      <t>A local relying-party decision about whether an external action should be allowed, denied, reviewed, or deferred.</t>
      <t>Action Decision is not a global JEP-AMP conclusion.</t>
      </section>
    </section>
    <section anchor="profile-id"><name>Profile Identifier and Versioning</name>
      <t>The profile identifier for this version is:</t>
      <sourcecode type="text"><![CDATA[
https://humanjudgment.org/jep/profiles/amp/2
]]></sourcecode>
      <t>The short name <tt>JEP-AMP-2</tt> MAY be used in user interfaces and documentation.</t>
      <t>The identifier is an HTTPS URI under a publisher-controlled namespace. It is not an IANA-registered URN namespace value. Implementations MUST compare the profile identifier as the exact URI string defined above. Dereferencing the URI is not required for validation, although publishers SHOULD keep the URI stable and SHOULD make profile documentation available there when practical.</t>
      <t>JEP-AMP-1 used <tt>urn:jep:profile:amp:1</tt>. AMP-2 changes mandate identity, reference, validation, and Core-alignment semantics in non-compatible ways. Therefore AMP-2 uses a new profile identifier rather than silently changing the meaning of AMP-1.</t>
      <t>An AMP-2 producer binds profile selection by including the exact profile identifier in the signed Action Mandate Descriptor.</t>
    </section>
    <section anchor="core-relation"><name>Relationship to JEP-Core</name>
      <t>JEP-AMP-2 relies on JEP-Core for:</t>
      <ul spacing="normal">
        <li>the D event object;</li>
        <li>required <tt>id</tt>, <tt>who</tt>, <tt>when</tt>, <tt>what</tt>, and <tt>sig</tt> members;</li>
        <li>Event Identity <tt>(who,id)</tt>;</li>
        <li>Event Hash;</li>
        <li>signing-payload and signature semantics;</li>
        <li><tt>aud</tt>;</li>
        <li><tt>ref</tt>;</li>
        <li>extension processing;</li>
        <li>independent validation checks;</li>
        <li>validation modes;</li>
        <li>idempotent acceptance.</li>
      </ul>
      <t>JEP-AMP-2 MUST NOT redefine any of those semantics.</t>
      <t>JEP-Core idempotent acceptance prevents one Event Identity from applying the same acceptance effect more than once within one acceptance domain.</t>
      <t>AMP mandate usage or consumption is a different concept. A single mandate may authorize zero, one, or multiple external action attempts according to this profile and local policy. Implementations MUST NOT treat Core <tt>already_accepted</tt> as equivalent to "mandate consumed".</t>
    </section>
    <section anchor="descriptor"><name>Action Mandate Descriptor</name>
      <section anchor="descriptor-encoding"><name>Encoding</name>
      <t>For the AMP-2 baseline profile, the Action Mandate Descriptor is the JEP D event's <tt>what</tt> object.</t>
      <t>The descriptor MUST therefore include the Core-required D members <tt>delegatee</tt> and <tt>scope</tt>.</t>
      <t>AMP-2 does not define a detached descriptor encoding. External policy, credential, evidence, receipt, or domain objects MAY be referenced from the descriptor or from JEP references, but the authoritative AMP-2 descriptor itself is signed inline as <tt>what</tt>.</t>
      <t>A future extension MAY define a detached representation, but it MUST preserve the Core-required signed D semantics and define conflict resolution.</t>
      </section>
      <section anchor="descriptor-required"><name>Required Members</name>
      <t>An AMP-2 Action Mandate Descriptor MUST contain:</t>
      <ul spacing="normal">
        <li><tt>profile</tt></li>
        <li><tt>principal</tt></li>
        <li><tt>delegatee</tt></li>
        <li><tt>action</tt></li>
        <li><tt>target</tt></li>
        <li><tt>scope</tt></li>
        <li><tt>validity</tt></li>
      </ul>
      <t>The required members have the following baseline shapes:</t>
      <ul spacing="normal">
        <li><tt>profile</tt> MUST be a string equal to <tt>https://humanjudgment.org/jep/profiles/amp/2</tt>.</li>
        <li><tt>principal</tt> MUST be an object containing a non-empty string <tt>id</tt>. <tt>principal.type</tt> MAY be present as a non-empty string.</li>
        <li><tt>delegatee</tt> MUST be a non-empty string actor identifier.</li>
        <li><tt>action</tt> MUST be an object containing a non-empty string <tt>type</tt>. <tt>action.type</tt> MUST be an absolute URI identifying the action or action family. A domain profile MAY define additional members of <tt>action</tt>.</li>
        <li><tt>target</tt> MUST be an object containing non-empty string members <tt>type</tt> and <tt>id</tt>. A domain profile MUST define the identifier and matching semantics for the target type it uses.</li>
        <li><tt>scope</tt> MUST be a non-empty JSON object. A domain profile MUST define the meaning and comparison rules for any scope members that affect an Action Decision.</li>
        <li><tt>validity</tt> MUST be an object containing <tt>expires_at</tt>. <tt>validity.expires_at</tt> MUST be an RFC 3339 date-time <xref target="RFC3339"/>. <tt>validity.not_before</tt> MAY also be present and, if present, MUST be an RFC 3339 date-time.</li>
      </ul>
      <t>If <tt>validity.not_before</tt> is absent, AMP-2 imposes no profile-level lower time bound. A relying party MAY impose a local or domain-specific lower bound, but MUST NOT derive trusted start time solely from the JEP <tt>when</tt> value.</t>
      <t>A mandate whose <tt>expires_at</tt> precedes <tt>not_before</tt> is invalid.</t>
      <t>The descriptor MUST NOT add new top-level members beyond those defined by this document or a later compatible AMP revision. Additional extensibility MUST use JEP <tt>ext</tt> / <tt>ext_crit</tt> or referenced profile-defined objects rather than a second descriptor-level extension namespace.</t>
      </section>
      <section anchor="descriptor-optional"><name>Optional Members</name>
      <t>The descriptor MAY contain:</t>
      <ul spacing="normal">
        <li><tt>mandate_id</tt></li>
        <li><tt>constraints</tt></li>
        <li><tt>usage</tt></li>
        <li><tt>policy_ref</tt></li>
        <li><tt>authority_evidence</tt></li>
        <li><tt>delegation</tt></li>
        <li><tt>termination</tt></li>
      </ul>
      <t><tt>mandate_id</tt>, when present, MUST be a non-empty string application-level alias. It MUST NOT replace Mandate Identity for cross-system logical references.</t>
      <t><tt>constraints</tt>, when present, MUST be a JSON object. If absent, AMP-2 imposes no additional constraint set beyond the required action, target, scope, validity, and applicable policy rules.</t>
      <t><tt>policy_ref</tt>, when present, MUST be a non-empty array of objects. Each object MUST contain a non-empty <tt>uri</tt> string identifying the applicable policy or policy document. Absence of <tt>policy_ref</tt> means that the mandate itself declares no external policy reference; local policy MAY still apply.</t>
      <t><tt>authority_evidence</tt>, when present, MUST be a non-empty array of references. Each reference MUST use JEP reference semantics or a reference form explicitly defined by the active authority profile.</t>
      <t>No descriptor-level <tt>extensions</tt> member is defined by AMP-2. Extension data belongs in JEP <tt>ext</tt> / <tt>ext_crit</tt> or in referenced profile-defined objects.</t>
      </section>
      <section anchor="descriptor-action"><name>Action</name>
      <t><tt>action</tt> MUST be an object and MUST contain the required <tt>type</tt> member defined in Section 6.2.</t>
      <t><tt>action.type</tt> identifies the action or action class.</t>
      <t>AMP-2 does not define a global action taxonomy. A domain profile MUST define the semantics and request-matching rules for each action type it uses.</t>
      <t>Additional members of <tt>action</tt> MAY be defined by the active domain profile.</t>
      </section>
      <section anchor="descriptor-target"><name>Target</name>
      <t><tt>target</tt> MUST be an object and MUST contain the required <tt>type</tt> and <tt>id</tt> members defined in Section 6.2.</t>
      <t>The target identifies the object, resource, record, account, workflow, case, transaction, or other domain object to which the mandate applies.</t>
      <t>A domain profile MUST define the target identifier, normalization, comparison, and matching rules used for Action Decision.</t>
      </section>
      <section anchor="descriptor-scope"><name>Scope</name>
      <t><tt>scope</tt> MUST be a non-empty JSON object and MUST be machine-processable under the applicable domain profile.</t>
      <t>It MAY include purpose, work-unit, resource, tenant, geography, data-boundary, or other domain limits.</t>
      <t>A relying party MUST NOT infer a broader scope merely because a requested action uses the same action type or target family.</t>
      <t>A domain profile MUST define comparison rules for every scope member that can change an Action Decision.</t>
      </section>
      <section anchor="descriptor-constraints"><name>Constraints</name>
      <t><tt>constraints</tt> MAY define amount limits, data limits, resource sets, vendor sets, customer sets, risk limits, approval thresholds, or other boundaries.</t>
      <t>A domain profile MUST define comparison rules for any constraint that affects Action Decision.</t>
      </section>
      <section anchor="descriptor-usage"><name>Usage</name>
      <t>If <tt>usage</tt> is absent, AMP-2 imposes no profile-level use-count limit. Local or domain policy MAY still impose a limit.</t>
      <t>If <tt>usage</tt> is present, it MUST be an object containing <tt>max_uses</tt>.</t>
      <t><tt>usage.max_uses</tt> MUST be a positive integer.</t>
      <t><tt>usage.reservation_required</tt> MAY be present as a boolean. If absent, its value is <tt>false</tt>.</t>
      <t>A <tt>max_uses</tt> value of <tt>1</tt> defines a single-use mandate at the AMP layer.</t>
      <t>Usage counting and consumption state MUST NOT be inferred from Core idempotent acceptance. A relying party MUST still enforce <tt>max_uses</tt> safely. Deployments requiring concurrent or distributed use control MUST provide an atomic or equivalent reservation/consumption mechanism, regardless of the value of <tt>reservation_required</tt>.</t>
      </section>
      <section anchor="descriptor-authority"><name>Authority Evidence</name>
      <t><tt>authority_evidence</tt> MAY reference evidence that the issuer is authorized to issue or convey the mandate on behalf of the principal.</t>
      <t>If the principal is distinct from the issuer, a Mandate Verifier MUST NOT report issuer authority as <tt>pass</tt> without applicable authority evidence or a selected policy/profile rule that establishes that authority.</t>
      <t>If the principal and issuer identifiers are the same, actor binding may be sufficient for a self-principal deployment only when the active profile or local policy explicitly permits that interpretation.</t>
      </section>
      <section anchor="descriptor-delegation"><name>Delegation Controls</name>
      <t>If <tt>delegation</tt> is absent, subdelegation is not allowed.</t>
      <t>If <tt>delegation</tt> is present, it MUST be an object containing the boolean member <tt>subdelegation_allowed</tt>.</t>
      <t>If <tt>subdelegation_allowed</tt> is <tt>false</tt>, no child mandate is permitted under AMP-2.</t>
      <t>If <tt>subdelegation_allowed</tt> is <tt>true</tt>:</t>
      <ul spacing="normal">
        <li><tt>max_depth</tt> MUST be present and MUST be a positive integer;</li>
        <li><tt>scope_expansion_allowed</tt> MAY be present as a boolean and defaults to <tt>false</tt>;</li>
        <li><tt>constraint_relaxation_allowed</tt> MAY be present as a boolean and defaults to <tt>false</tt>;</li>
        <li>the parent-reference rule defined by this document applies;</li>
        <li>any parent-termination effect on child eligibility MUST be explicitly defined by the parent descriptor or active domain profile.</li>
      </ul>
      <t>AMP-2 has no implicit parent-termination cascade rule.</t>
      <t>If a child mandate is permitted, its issuance event MUST reference the parent Mandate Identity using a typed JEP event reference. An exact parent artifact MAY additionally be pinned by Event Hash.</t>
      <t>Unless <tt>scope_expansion_allowed</tt> is explicitly <tt>true</tt>, child scope MUST be equal to or narrower than parent scope.</t>
      <t>Unless <tt>constraint_relaxation_allowed</tt> is explicitly <tt>true</tt>, child constraints MUST be equal to or stricter than parent constraints.</t>
      <t>Even when expansion or relaxation is permitted by the descriptor, the active domain policy MAY still reject it.</t>
      </section>
      <section anchor="descriptor-termination"><name>Termination Controls</name>
      <t>If <tt>termination</tt> is absent, the issuance actor is the default authorized terminator.</t>
      <t>If <tt>termination</tt> is present, it MUST be an object. It MAY contain <tt>authorized_terminators</tt>.</t>
      <t><tt>authorized_terminators</tt>, when present, MUST be a non-empty array of non-empty string actor identifiers. Only actors permitted by this list and any stricter active policy may satisfy the AMP <tt>termination-status</tt> check as an authorized terminator.</t>
      <t>Expiry under <tt>validity.expires_at</tt> does not require a T event.</t>
      </section>
      <section anchor="descriptor-example"><name>Minimal Descriptor Example</name>
      <sourcecode type="json"><![CDATA[
{
  "profile": "https://humanjudgment.org/jep/profiles/amp/2",
  "principal": {
    "id": "did:example:acme",
    "type": "organization"
  },
  "delegatee": "did:example:agent:procure-7",
  "action": {
    "type": "urn:example:procurement:action:purchase"
  },
  "target": {
    "type": "procurement_request",
    "id": "req-123"
  },
  "scope": {
    "purpose": "purchase-approved-materials",
    "work_unit_ref": "req-123"
  },
  "validity": {
    "not_before": "2026-09-26T00:00:00Z",
    "expires_at": "2026-09-28T00:00:00Z"
  },
  "constraints": {
    "amount": {
      "currency": "USD",
      "max": 5000
    }
  },
  "usage": {
    "max_uses": 1,
    "reservation_required": true
  },
  "policy_ref": [
    {
      "uri": "urn:policy:acme:procurement:v3"
    }
  ],
  "delegation": {
    "subdelegation_allowed": false
  }
}
]]></sourcecode>
      <t>The DID identifiers are illustrative only.</t>
      </section>
    </section>
    <section anchor="issuance"><name>Mandate Issuance</name>
      <t>An AMP-2 mandate is issued by one JEP D event.</t>
      <t>The issuance event:</t>
      <ul spacing="normal">
        <li>MUST conform to JEP-Core 0.7 or a later compatible Core revision;</li>
        <li>MUST have <tt>verb</tt> equal to <tt>D</tt>;</li>
        <li>MUST carry an AMP-2 descriptor in <tt>what</tt>;</li>
        <li>MUST have <tt>what.profile</tt> equal to <tt>https://humanjudgment.org/jep/profiles/amp/2</tt>;</li>
        <li>MUST have <tt>what.delegatee</tt> and <tt>what.scope</tt>;</li>
        <li>SHOULD use <tt>aud</tt> when the mandate is intended for a bounded audience;</li>
        <li>MAY use <tt>ref</tt> to identify a parent mandate or another context whose relationship is explicitly defined;</li>
        <li>MUST NOT claim that AMP-2 alone establishes global legal authorization.</li>
      </ul>
      <t>The issuance Event Identity is the canonical Mandate Identity.</t>
      <t>The issuance Event Hash identifies only the exact signed issuance artifact.</t>
    </section>
    <section anchor="references"><name>Mandate References</name>
      <section anchor="reference-logical"><name>Logical Reference</name>
      <t>A JEP event referring to an AMP-2 mandate SHOULD reference the issuance Event Identity.</t>
      <t>Conceptually:</t>
      <sourcecode type="json"><![CDATA[
{
  "type": "jep:event",
  "value": {
    "who": "did:example:issuer",
    "id": "urn:uuid:..."
  }
}
]]></sourcecode>
      </section>
      <section anchor="reference-artifact"><name>Exact Artifact Pin</name>
      <t>When the exact signed issuance artifact matters, the reference MAY additionally pin the issuance Event Hash.</t>
      <t>A validator MUST verify an exact-artifact pin when the active validation context requires <tt>reference_integrity</tt>.</t>
      </section>
      <section anchor="reference-alias"><name>Application Alias</name>
      <t>A <tt>mandate_id</tt> alias MAY be indexed or displayed by applications.</t>
      <t>A relying party MUST NOT substitute <tt>mandate_id</tt> for Mandate Identity unless a domain mapping explicitly defines that mapping and collision behavior.</t>
      </section>
    </section>
    <section anchor="termination"><name>Mandate Termination</name>
      <section anchor="termination-event"><name>Termination Event</name>
      <t>An AMP-2 termination declaration is a JEP T event that:</t>
      <ul spacing="normal">
        <li>has <tt>verb</tt> equal to <tt>T</tt>;</li>
        <li>uses a typed JEP event reference in <tt>ref</tt> whose <tt>value</tt> equals the Mandate Identity;</li>
        <li>has <tt>what.termination_scope</tt> equal to <tt>https://humanjudgment.org/jep/profiles/amp/2#mandate-reliance</tt>;</li>
        <li>is signed and Core-validated;</li>
        <li>is issued by an actor authorized by the mandate or applicable profile.</li>
      </ul>
      <t>The T event MAY include a profile-defined reason such as <tt>revoked</tt>, <tt>consumed</tt>, <tt>superseded</tt>, <tt>completed</tt>, <tt>policy_change</tt>, or <tt>constraint_violation</tt>.</t>
      </section>
      <section anchor="termination-effect"><name>Profile-Level Effect</name>
      <t>A conforming Mandate Verifier that observes an authorized AMP-2 termination event in the applicable evaluation context MUST treat the referenced mandate as ineligible for future reliance in that context.</t>
      <t>This is an AMP profile rule. The JEP T event itself does not delete history, retroactively invalidate prior events, or prove that every downstream system has observed or enforced the termination.</t>
      </section>
      <section anchor="termination-expiry"><name>Expiry</name>
      <t>After <tt>validity.expires_at</tt>, the mandate is invalid for new AMP reliance even if no T event exists.</t>
      <t>Expiry is evaluated from the mandate validity rule and the time source chosen by the active profile or relying party. The issuance event's JEP <tt>when</tt> value alone is not trusted wall-clock evidence.</t>
      </section>
    </section>
    <section anchor="usage-state"><name>Reservation, Usage, and Consumption</name>
      <section anchor="usage-separation"><name>Separation from Core Acceptance</name>
      <t>Core acceptance answers whether the same JEP Event Identity has already applied the same acceptance effect in one acceptance domain.</t>
      <t>AMP usage answers whether a mandate has remaining authorized uses.</t>
      <t>These are independent state machines and MUST NOT be conflated.</t>
      </section>
      <section anchor="usage-limits"><name>Single-Use and Bounded-Use Mandates</name>
      <t>When <tt>usage.max_uses</tt> limits use, the relying party MUST maintain sufficient usage state to avoid permitting more uses than allowed.</t>
      <t>For concurrent or distributed relying parties, a domain profile SHOULD define an atomic reservation or consumption mechanism.</t>
      </section>
      <section anchor="reservation"><name>Reservation</name>
      <t>A reservation record SHOULD bind:</t>
      <ul spacing="normal">
        <li>Mandate Identity;</li>
        <li>requested action and target;</li>
        <li>request digest when available;</li>
        <li>reserving actor;</li>
        <li>reservation time;</li>
        <li>optional reservation expiry;</li>
        <li>reservation outcome.</li>
      </ul>
      <t>A reservation MAY be recorded by a profile-defined V event or by an external domain record referenced from a JEP event.</t>
      </section>
      <section anchor="consumption"><name>Consumption</name>
      <t>A consumption record SHOULD bind:</t>
      <ul spacing="normal">
        <li>Mandate Identity;</li>
        <li>receipt or evidence reference;</li>
        <li>consuming actor or relying party;</li>
        <li>consumed use count;</li>
        <li>consumption time;</li>
        <li>terminal reason when applicable.</li>
      </ul>
      <t>A T event with reason <tt>consumed</tt> MAY record a declaration that no future reliance is intended. It does not by itself provide the concurrency guarantee required to prevent double consumption.</t>
      </section>
    </section>
    <section anchor="validation"><name>AMP Validation Model</name>
      <section anchor="validation-layers"><name>Layer Separation</name>
      <t>AMP-2 distinguishes:</t>
      <ul spacing="normal">
        <li>JEP-Core validation status;</li>
        <li>AMP Mandate Status;</li>
        <li>local Action Decision.</li>
      </ul>
      <t>A valid JEP signature is not sufficient for Mandate Status <tt>valid</tt>.</t>
      <t>Mandate Status <tt>valid</tt> is not a global authorization decision.</t>
      </section>
      <section anchor="validation-checks"><name>Profile-Specific Checks</name>
      <t>The following provisional AMP-2 check identifiers are defined:</t>
      <ul spacing="normal">
        <li><tt>https://humanjudgment.org/jep/profiles/amp/2#profile-binding</tt></li>
        <li><tt>https://humanjudgment.org/jep/profiles/amp/2#descriptor</tt></li>
        <li><tt>https://humanjudgment.org/jep/profiles/amp/2#issuer-authority</tt></li>
        <li><tt>https://humanjudgment.org/jep/profiles/amp/2#delegatee</tt></li>
        <li><tt>https://humanjudgment.org/jep/profiles/amp/2#time-validity</tt></li>
        <li><tt>https://humanjudgment.org/jep/profiles/amp/2#audience</tt></li>
        <li><tt>https://humanjudgment.org/jep/profiles/amp/2#termination-status</tt></li>
        <li><tt>https://humanjudgment.org/jep/profiles/amp/2#usage-status</tt></li>
        <li><tt>https://humanjudgment.org/jep/profiles/amp/2#request-scope</tt></li>
        <li><tt>https://humanjudgment.org/jep/profiles/amp/2#subdelegation</tt></li>
        <li><tt>https://humanjudgment.org/jep/profiles/amp/2#evidence</tt></li>
        <li><tt>https://humanjudgment.org/jep/profiles/amp/2#policy</tt></li>
      </ul>
      <t>Check statuses use the JEP conformance values:</t>
      <ul spacing="normal">
        <li><tt>pass</tt></li>
        <li><tt>fail</tt></li>
        <li><tt>not_checked</tt></li>
        <li><tt>not_applicable</tt></li>
        <li><tt>unsupported</tt></li>
        <li><tt>indeterminate</tt></li>
      </ul>
      <t>AMP-2 does not define a cumulative validation level.</t>
      </section>
      <section anchor="validation-status"><name>Mandate Status</name>
      <t>For the requested AMP validation context:</t>
      <ul spacing="normal">
        <li><tt>valid</tt> means every required AMP check passed or was not applicable;</li>
        <li><tt>invalid</tt> means at least one required AMP check failed;</li>
        <li><tt>indeterminate</tt> means no required check failed but at least one required check is unsupported, not checked, or indeterminate.</li>
      </ul>
      <t>A validator MUST report which checks were required and which statuses were obtained.</t>
      </section>
      <section anchor="validation-flow"><name>Baseline Validation Flow</name>
      <t>A Mandate Verifier SHOULD:</t>
      <ul spacing="normal">
        <li>validate the issuance event under JEP-Core;</li>
        <li>confirm that the event is D and <tt>what.profile</tt> is the AMP-2 identifier;</li>
        <li>validate the descriptor structure;</li>
        <li>confirm <tt>what.delegatee</tt> and <tt>what.scope</tt>;</li>
        <li>evaluate issuer/principal authority under the active trust or policy profile;</li>
        <li>evaluate validity time using the applicable time source;</li>
        <li>evaluate <tt>aud</tt> when required;</li>
        <li>resolve relevant authorized termination declarations;</li>
        <li>evaluate usage or reservation state when applicable;</li>
        <li>evaluate requested actor, action, target, scope, and constraints;</li>
        <li>evaluate subdelegation rules when applicable;</li>
        <li>evaluate required evidence, approvals, and policy;</li>
        <li>return Core status, AMP check results, and Mandate Status separately.</li>
      </ul>
      <t>A validator MUST NOT report Action Decision <tt>allow</tt> solely because Mandate Status is <tt>valid</tt>.</t>
      </section>
    </section>
    <section anchor="verification-events"><name>Verification Events</name>
      <t>A JEP V event MAY record an AMP evaluation.</t>
      <t>The V event MUST satisfy JEP-Core V requirements, including <tt>ref</tt>, <tt>verification_scope</tt>, and <tt>result</tt>.</t>
      <t>A profile-defined AMP verification scope SHOULD use a collision-resistant identifier derived from the AMP-2 profile identifier.</t>
      <t>Examples include:</t>
      <ul spacing="normal">
        <li><tt>https://humanjudgment.org/jep/profiles/amp/2#mandate-validation</tt></li>
        <li><tt>https://humanjudgment.org/jep/profiles/amp/2#reservation-status</tt></li>
        <li><tt>https://humanjudgment.org/jep/profiles/amp/2#consumption-status</tt></li>
        <li><tt>https://humanjudgment.org/jep/profiles/amp/2#receipt-binding</tt></li>
      </ul>
      <t>A V event MUST NOT imply evaluation beyond its declared scope.</t>
      <t>A V result value is the semantic result of that declared verification scope. It MUST NOT be confused with the independent validator check-status vocabulary used in Section 11.</t>
    </section>
    <section anchor="subdelegation"><name>Subdelegation and Chains</name>
      <t>Subdelegation is not allowed unless the parent descriptor explicitly permits it.</t>
      <t>A child mandate MUST identify the parent Mandate Identity.</t>
      <t>A child mandate MUST NOT expand scope or relax constraints unless the parent descriptor and applicable domain profile explicitly permit that change.</t>
      <t>Chain reconstruction, cycle analysis, complete-log assumptions, and causal or responsibility interpretation belong to a chain profile or external system.</t>
      <t>AMP-2 defines only the mandate-level comparison rules required to decide whether a child remains within the parent mandate.</t>
      <t>When parent termination is intended to affect child eligibility, the parent descriptor or domain profile MUST define that rule explicitly. No cascade is implied by JEP-Core or by AMP-2 merely because a parent reference exists.</t>
    </section>
    <section anchor="receipts"><name>Receipts and Evidence</name>
      <t>AMP-2 is primarily a pre-action mandate profile.</t>
      <t>A receipt or post-action evidence record SHOULD identify Mandate Identity.</t>
      <t>When the exact issuance artifact matters, the receipt MAY additionally bind the Mandate Artifact Hash.</t>
      <t>A receipt MAY also reference:</t>
      <ul spacing="normal">
        <li>the action request;</li>
        <li>relevant V events;</li>
        <li>relevant J events;</li>
        <li>reservation or consumption state;</li>
        <li>termination declarations;</li>
        <li>the external action or result;</li>
        <li>evidence objects or evidence digests.</li>
      </ul>
      <t>A receipt MUST NOT claim that legal, policy, factual, or external-result requirements were satisfied unless the receipt or referenced evidence supports that claim under an identified verification or policy scope.</t>
    </section>
    <section anchor="domain"><name>Domain Protocols and Local Action Decisions</name>
      <t>JEP-AMP-2 is cross-domain and does not replace domain protocols.</t>
      <t>A payment, procurement, healthcare, identity, data-access, or other domain profile MAY define a mapping between AMP and its native mandate or authorization object.</t>
      <t>Such a mapping SHOULD state:</t>
      <ul spacing="normal">
        <li>which object controls domain execution;</li>
        <li>which fields are authoritative in that domain;</li>
        <li>how AMP action, target, scope, and constraints map to domain semantics;</li>
        <li>which trust and policy profiles apply;</li>
        <li>which receipt or evidence system is authoritative;</li>
        <li>how failures map between the systems.</li>
      </ul>
      <t>JEP-AMP-2 MUST NOT define payment clearing, settlement, funds movement, medical authorization, legal effect, or another domain's native execution semantics.</t>
      <t>A local gateway MAY return decisions such as <tt>allow</tt>, <tt>deny</tt>, <tt>review</tt>, or <tt>indeterminate</tt>, but such values are relying-party decisions and are not global AMP validity values.</t>
    </section>
    <section anchor="capabilities"><name>Capability Declaration</name>
      <t>A system MAY publish an AMP capability declaration.</t>
      <t>Example:</t>
      <sourcecode type="json"><![CDATA[
{
  "jep_core": "0.7",
  "amp_profiles": ["https://humanjudgment.org/jep/profiles/amp/2"],
  "roles": [
    "mandate_producer",
    "mandate_verifier",
    "gateway_evaluator"
  ],
  "validation_modes": [
    "archival",
    "acceptance",
    "policy"
  ],
  "amp_checks": [
    "https://humanjudgment.org/jep/profiles/amp/2#descriptor",
    "https://humanjudgment.org/jep/profiles/amp/2#issuer-authority",
    "https://humanjudgment.org/jep/profiles/amp/2#termination-status",
    "https://humanjudgment.org/jep/profiles/amp/2#request-scope"
  ],
  "reservation_supported": true
}
]]></sourcecode>
      <t>A capability declaration is descriptive. It does not prove conformance, authority, certification, or legal competence.</t>
      <t>Unsupported required capabilities MUST NOT be silently downgraded to a successful AMP result.</t>
    </section>
    <section anchor="conformance"><name>Conformance</name>
      <section anchor="conf-producer"><name>AMP-2 Mandate Producer</name>
      <t>A conforming AMP-2 Mandate Producer MUST:</t>
      <ul spacing="normal">
        <li>produce a JEP D event conforming to the applicable Core Producer class;</li>
        <li>use <tt>https://humanjudgment.org/jep/profiles/amp/2</tt>;</li>
        <li>include the Action Mandate Descriptor inline in <tt>what</tt>;</li>
        <li>satisfy all required descriptor members;</li>
        <li>use Mandate Identity consistently;</li>
        <li>preserve profile and Core boundaries.</li>
      </ul>
      </section>
      <section anchor="conf-verifier"><name>AMP-2 Mandate Verifier</name>
      <t>A conforming AMP-2 Mandate Verifier MUST:</t>
      <ul spacing="normal">
        <li>perform or consume a JEP-Core validation result;</li>
        <li>support the baseline AMP checks required by the evaluation context;</li>
        <li>preserve independent check statuses;</li>
        <li>distinguish Core status, Mandate Status, and Action Decision;</li>
        <li>resolve authorized T events when termination status is required;</li>
        <li>evaluate usage state when the mandate declares a usage limit;</li>
        <li>reject or return indeterminate when required evidence or capabilities are unavailable;</li>
        <li>avoid treating Event Hash as Mandate Identity.</li>
      </ul>
      </section>
      <section anchor="conf-gateway"><name>Gateway Evaluator</name>
      <t>A gateway that claims AMP-2 Gateway Evaluator capability MUST perform Mandate Verification before making a local Action Decision.</t>
      <t>If the local Action Decision relies on the AMP mandate as authorization evidence, the gateway MUST NOT return <tt>allow</tt> when Mandate Status is <tt>invalid</tt> or <tt>indeterminate</tt>.</t>
      <t>A gateway MAY allow an action on an independent non-AMP basis, but it MUST report that AMP was not the authorization basis for that decision and MUST NOT present the result as AMP-authorized.</t>
      <t>Its local Action Decision MUST be labeled as local or domain-specific and MUST NOT be presented as a universal AMP authorization result.</t>
      </section>
    </section>
    <section anchor="failures"><name>Failure Codes and Test Guidance</name>
      <t>AMP failures SHOULD identify both the profile check and stable error code.</t>
      <t>Initial recommended error codes include:</t>
      <ul spacing="normal">
        <li><tt>AMP_ERR_PROFILE_BINDING</tt></li>
        <li><tt>AMP_ERR_DESCRIPTOR</tt></li>
        <li><tt>AMP_ERR_ISSUER_AUTHORITY</tt></li>
        <li><tt>AMP_ERR_DELEGATEE</tt></li>
        <li><tt>AMP_ERR_TIME</tt></li>
        <li><tt>AMP_ERR_AUDIENCE</tt></li>
        <li><tt>AMP_ERR_TERMINATED</tt></li>
        <li><tt>AMP_ERR_USAGE_EXHAUSTED</tt></li>
        <li><tt>AMP_ERR_REQUEST_SCOPE</tt></li>
        <li><tt>AMP_ERR_SUBDELEGATION</tt></li>
        <li><tt>AMP_ERR_EVIDENCE</tt></li>
        <li><tt>AMP_ERR_POLICY</tt></li>
        <li><tt>AMP_ERR_REFERENCE</tt></li>
        <li><tt>AMP_ERR_UNSUPPORTED_CAPABILITY</tt></li>
      </ul>
      <t>AMP test vectors SHOULD include:</t>
      <ul spacing="normal">
        <li>valid minimal issuance;</li>
        <li>invalid profile identifier;</li>
        <li>missing Core-required <tt>delegatee</tt>;</li>
        <li>missing Core-required <tt>scope</tt>;</li>
        <li>expired mandate;</li>
        <li>issuer-authority failure;</li>
        <li>delegatee mismatch;</li>
        <li>action or target outside scope;</li>
        <li>authorized termination by Mandate Identity;</li>
        <li>termination reference with wrong Event Identity;</li>
        <li>exact-artifact hash mismatch;</li>
        <li>safe Core retry without mandate consumption;</li>
        <li>single-use mandate first consumption;</li>
        <li>single-use mandate exhausted;</li>
        <li>concurrent reservation race with exactly one successful consumption;</li>
        <li>child mandate narrowing parent scope;</li>
        <li>child mandate illegally expanding parent scope;</li>
        <li>receipt bound to Mandate Identity;</li>
        <li>receipt additionally pinning exact Mandate Artifact Hash;</li>
        <li>unsupported required profile capability;</li>
        <li>indeterminate issuer authority;</li>
        <li>V event that overclaims beyond its declared verification scope.</li>
      </ul>
      <t>Stateful consumption, termination, and reservation vectors SHOULD use the stateful test-harness conventions defined by JEP Conformance.</t>
    </section>
    <section anchor="security"><name>Security Considerations</name>
      <t>A valid signature does not establish issuer authority, Mandate Status, or Action Decision.</t>
      <t>Implementations MUST validate Core status, AMP descriptor structure, issuer/principal authority, validity time, relevant audience requirements, termination status, usage state where applicable, subdelegation controls, and required policy or evidence before relying on a mandate.</t>
      <t>Event Identity and Event Hash confusion can cause incorrect revocation, consumption, or receipt binding. Logical mandate references MUST use Mandate Identity. Exact artifact checks MAY additionally use Event Hash.</t>
      <t>Single-use mandates require concurrency-safe reservation or consumption. Core idempotent acceptance alone is insufficient.</t>
      <t>Relying parties MUST NOT silently broaden action, target, scope, constraints, or subdelegation rights.</t>
      <t>A failed or unavailable required trust, policy, evidence, reservation, or termination check MUST NOT be converted into successful Mandate Status.</t>
    </section>
    <section anchor="privacy"><name>Privacy Considerations</name>
      <t>Action mandates can expose business intent, organizational relationships, authority structures, customer or supplier references, resource identifiers, transaction context, and risk policy.</t>
      <t>Implementations SHOULD minimize sensitive data in the descriptor and SHOULD reference external evidence when embedding it is unnecessary.</t>
      <t>Stable Mandate Identity, actor identifiers, policy references, and receipt bindings can enable cross-context correlation.</t>
      <t>Domain profiles SHOULD define retention, disclosure, encryption, selective disclosure, and redaction rules appropriate to their context.</t>
    </section>
    <section anchor="iana"><name>IANA Considerations</name>
      <t>This document requests no IANA actions.</t>
      <t><tt>https://humanjudgment.org/jep/profiles/amp/2</tt> and the profile-specific identifiers derived from it are publisher-controlled HTTPS URI identifiers. They are not IANA-registered URN namespace values.</t>
      <t>A future registry specification may register JEP profile identifiers, profile checks, verification scopes, and error codes.</t>
    </section>
    <section anchor="changes"><name>Changes from -01</name>
      <t>Major changes from <tt>draft-wang-jep-action-mandate-profile-01</tt>:</t>
      <ul spacing="normal">
        <li>aligned AMP with JEP-Core 0.7, JEP Profiles-01, and JEP Conformance-01;</li>
        <li>replaced the historical <tt>urn:jep:profile:amp:1</tt> identifier with the publisher-controlled HTTPS profile identifier <tt>https://humanjudgment.org/jep/profiles/amp/2</tt>;</li>
        <li>defined canonical Mandate Identity as the issuance Event Identity <tt>(who,id)</tt>;</li>
        <li>limited Event Hash to exact signed-artifact identity;</li>
        <li>removed Event-Hash-derived mandate identity;</li>
        <li>changed mandate, termination, reservation, consumption, receipt, and chain logical references to use Mandate Identity;</li>
        <li>made the AMP descriptor the signed inline D <tt>what</tt> object;</li>
        <li>removed baseline detached-descriptor semantics;</li>
        <li>made <tt>scope</tt> REQUIRED to match JEP-Core D requirements;</li>
        <li>defined baseline JSON shapes for all required descriptor members;</li>
        <li>reduced the baseline optional-member set and removed the second descriptor-level extension namespace;</li>
        <li>defined omission/default semantics for <tt>validity.not_before</tt>, <tt>usage</tt>, <tt>constraints</tt>, <tt>policy_ref</tt>, <tt>delegation</tt>, and <tt>termination</tt>;</li>
        <li>required <tt>validity.expires_at</tt> for bounded AMP-2 mandates;</li>
        <li>removed the redundant baseline descriptor <tt>issuer</tt> field; issuer is Core <tt>who</tt>;</li>
        <li>removed nonce and Validation Level dependencies;</li>
        <li>replaced cumulative validation levels with independent AMP checks;</li>
        <li>removed <tt>conditional</tt> from validator check statuses;</li>
        <li>separated Core idempotent acceptance from mandate usage and consumption;</li>
        <li>made single-use reservation and consumption explicitly stateful and concurrency-sensitive;</li>
        <li>made termination a profile-level future-reliance rule rather than a claim of global external revocation;</li>
        <li>required a typed JEP Event Identity reference for AMP termination;</li>
        <li>removed implicit parent-termination cascade semantics;</li>
        <li>defined explicit subdelegation defaults and expansion/relaxation controls;</li>
        <li>aligned V events with Core <tt>ref</tt>, <tt>verification_scope</tt>, and <tt>result</tt>;</li>
        <li>distinguished V semantic result values from validator check statuses;</li>
        <li>required AMP-based gateways to fail closed for <tt>invalid</tt> or <tt>indeterminate</tt> Mandate Status while allowing separately labeled non-AMP authorization;</li>
        <li>changed IANA language to request no action and use publisher-controlled HTTPS identifiers.</li>
      </ul>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="JEP">
          <front><title>Judgment Event Protocol (JEP)</title><author initials="Y." surname="Wang" fullname="Yuqiang Wang"/><date year="2026" month="September" day="26"/></front>
          <seriesInfo name="Internet-Draft" value="draft-wang-jep-judgment-event-protocol-07"/>
        </reference>
        <reference anchor="JEP-PROFILES">
          <front><title>JEP Profiles and Interoperability</title><author initials="Y." surname="Wang" fullname="Yuqiang Wang"/><date year="2026" month="September" day="26"/></front>
          <seriesInfo name="Internet-Draft" value="draft-wang-jep-profiles-01"/>
        </reference>
        <reference anchor="JEP-CONFORMANCE">
          <front><title>JEP Conformance and Test Suite</title><author initials="Y." surname="Wang" fullname="Yuqiang Wang"/><date year="2026" month="September" day="26"/></front>
          <seriesInfo name="Internet-Draft" value="draft-wang-jep-conformance-01"/>
        </reference>
        <reference anchor="RFC2119">
          <front><title>Key words for use in RFCs to Indicate Requirement Levels</title><author initials="S." surname="Bradner"/><date year="1997" month="March"/></front>
          <seriesInfo name="BCP" value="14"/><seriesInfo name="RFC" value="2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front><title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title><author initials="B." surname="Leiba"/><date year="2017" month="May"/></front>
          <seriesInfo name="BCP" value="14"/><seriesInfo name="RFC" value="8174"/>
        </reference>
        <reference anchor="RFC3339">
          <front><title>Date and Time on the Internet: Timestamps</title><author initials="G." surname="Klyne"/><author initials="C." surname="Newman"/><date year="2002" month="July"/></front>
          <seriesInfo name="RFC" value="3339"/>
        </reference>
      </references>
    </references>
  </back>
</rfc>
