<?xml version="1.0" encoding="utf-8"?>
<rfc ipr="trust200902" docName="draft-sergeev-wexp-core-02" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <front>
    <title abbrev="WEXP Appraisal Core">WEXP Core: Witnessability Appraisal Semantics for Execution-Related Claims</title>
    <seriesInfo name="Internet-Draft" value="draft-sergeev-wexp-core-02"/>
    <author initials="M." surname="Sergeev" fullname="Mikhail Sergeev" role="editor">
      <organization>Independent Researcher</organization>
      <address><email>mikhailsergeev369@gmail.com</email></address>
    </author>
    <author initials="V." surname="Ikher" fullname="Vladimir Ikher">
      <organization>Independent Researcher</organization>
      <address><email>ikherva@gmail.com</email></address>
    </author>
    <date year="2026" month="October" day="23"/>
    <area>Security</area>
    <keyword>witnessability</keyword>
    <keyword>execution evidence</keyword>
    <keyword>boundary ceiling</keyword>
    <keyword>AI agents</keyword>
    <keyword>appraisal</keyword>
    <abstract>
      <t>The Witnessed Execution Protocol (WEXP) Core defines carrier-neutral Witnessability appraisal semantics for execution-related claims. It operationalizes selected concepts of the Witnessability Model under the Witnessability Conceptual Core within the bounded claim domain specified here. It defines four distinct content bases, two independent evidence qualifiers, the Boundary Ceiling, exact-claim support, deterministic <tt>accept</tt>, <tt>downgrade</tt>, and <tt>reject</tt> verdicts, composition without inflation, and a normalized interface between evidence-carrying profiles and appraisers. WEXP Core does not define a record serialization, signature envelope, action identifier, authorization model, or evidence-artifact schema. Carrier and evidence profiles can supply its normalized inputs; a native record format is optional and is not a prerequisite for this Core.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>Software and AI systems produce logs, traces, approvals, tool-call records, attestations, provenance statements, and transparency receipts. These artifacts answer different questions and are often treated as if they were interchangeable. An authentic record can contain an unsupported claim; a provenance statement can identify origin without proving a runtime event; and an independently verifiable invocation remains evidence of invocation rather than execution.</t>
      <t>WEXP provides a bounded appraisal layer. Given normalized findings about an exact action, a claimed content base, an evidence-producing boundary, and any applicable provenance or independent-verification evidence, WEXP determines the set of exact claims that the findings support. It then compares the asserted claim with that set and returns one of three verdicts. The result grades support for a claim. It does not certify correctness, safety, authority, policy compliance, or alignment.</t>
      <t>The conceptual basis for this work is the Witnessability Model <xref target="WITNESSABILITY"/> under the Witnessability Conceptual Core <xref target="WCC-CORE"/>. <xref target="conceptual-foundations"/> identifies the scope and limits of that relationship. This document is self-contained: conceptual publications are informative and are not required to implement the normative appraisal procedure. WEXP retains the project identifier introduced as the Witnessed Execution Protocol; the title of this revision identifies the appraisal role of its Core.</t>
      <t>This Informational document specifies a carrier-neutral appraisal contract. Its normative requirements apply when claiming conformance to that contract; they do not designate an Internet Standards Track protocol. The companion Coverage document is Experimental because its bounded coverage-evaluation approach requires experimental evaluation of operational assumptions and interoperability.</t>

      <section anchor="scope">
        <name>Scope and Non-Goals</name>
        <t>This document specifies:</t>
        <ul>
          <li><t>the content bases <tt>observation</tt>, <tt>intent</tt>, <tt>invocation</tt>, and <tt>execution</tt>;</t></li>
          <li><t>the qualifiers <tt>PROV</tt> and <tt>IV</tt>;</t></li>
          <li><t>the normalized input contract used by carrier and evidence profiles;</t></li>
          <li><t>the Boundary Ceiling and exact-support rules;</t></li>
          <li><t>the appraisal result and the verdicts <tt>accept</tt>, <tt>downgrade</tt>, and <tt>reject</tt>;</t></li>
          <li><t>composition and limitation inheritance; and</t></li>
          <li><t>semantic reason tokens and conformance requirements.</t></li>
        </ul>
        <t>This document does not define JSON, CBOR, CDDL, canonicalization, signatures, key discovery, record identifiers, global action identity, authorization or principal binding, action lifecycle states, chain discovery, evidence-artifact formats, trust-anchor discovery, policy gates, or a transparency service. It also does not assign a global <tt>EXECUTED</tt> state. Those concerns belong to carriers, profiles, policies, or adjacent specifications.</t>
        <t>Completion of a larger process, a durable external effect, goal satisfaction, nonoccurrence, coverage completeness, and authorization validity are separate facets. They are not additional content bases in this document.</t>
      </section>

      <section anchor="architecture">
        <name>Appraisal Architecture and Data Flow</name>
        <t>The architecture separates profile-specific input preparation from carrier-independent Core appraisal. A carrier or evidence profile specifies the mapping rules; a mapper implements those rules. The normalized input and the appraisal result are logical data objects at the boundaries of the Core procedure, not processing layers.</t>
        <t>The following diagram shows the logical data flow. It does not prescribe separate deployment components or a wire format.</t>
        <artwork><![CDATA[
Carrier artifacts and appraisal parameters (data)
        |
        v
Mapper implementing a carrier or evidence profile
  parse, authenticate, evaluate profile predicates,
  bind findings to an exact target and base
        |
        v
Normalized Appraisal Input (data)
        |
        v
WEXP Appraisal Core (procedure)
        |
        v
Witnessability Appraisal (data)
]]></artwork>
        <t>The arrows denote the production and consumption of data. They do not denote normative dependencies or evidence support, and the processing stages do not correspond to the four content bases. Passing through a stage does not itself establish support for a claim or strengthen that support. Support remains subject to the exact-claim predicates and the Boundary Ceiling, as specified in <xref target="supported-claims"/>.</t>
        <t>A carrier profile maps its fields and artifacts into the normalized input defined in <xref target="normalized-input"/>. WEXP Core consumes only that normalized input. A carrier profile <bcp14>MUST NOT</bcp14> treat field presence, a digest reference, a signature, or an artifact label as a passing semantic finding unless the profile-defined predicate for the exact claim has been evaluated successfully.</t>
        <t>The dependency is one-way: a carrier profile depends normatively on this Core; this Core has no normative dependency on any carrier. Two carriers that produce equivalent normalized inputs under the same evaluation context produce the same Core appraisal.</t>
        <t>A Core invocation begins only after an upstream mapper has produced one complete logical <tt>AppraisalInput</tt>. Failure to parse, authenticate, or interpret a carrier well enough to construct that input produces no Core appraisal and remains a carrier or mapping-profile diagnostic. A mapper does not fabricate a partial Core input solely to transport such a failure. In particular, a carrier-specific unknown-extension error is not a Core fatal reason and is not translated to <tt>E_UNKNOWN_CRITICAL_SEMANTIC</tt>. That Core token has the narrower meaning defined in <xref target="input-validity"/>.</t>
      </section>


      <section anchor="conceptual-foundations">
        <name>Relationship to the Witnessability Conceptual Core and Model</name>
        <t>The Witnessability Conceptual Core 1.0 <xref target="WCC-CORE"/> provides general claim-relative constraints on support assessment, including separation of verification, appraisal, and reliance (W-I2), non-amplification and preserved incomparability (W-I7), and the derived Boundary Ceiling Rule (<xref target="WCC-CORE"/>, Section 6.5). The Witnessability Model 1.1 <xref target="WITNESSABILITY"/> specializes the subject to execution-related evidence, qualified states, and execution-relevant boundaries. This Core specifies an operational appraisal procedure for the limited domain in <xref target="typed-claims"/>.</t>
        <t>The correspondence is scoped, not an identity of formal objects. A WEXP typed claim is evaluated for an exact action and context; it does not represent every Target Proposition admitted by the Conceptual Core. A WEXP supported-claim set is not the Conceptual Core's Support Envelope. A WEXP Appraisal records support, counter-evidence, gaps, and limitations, but does not implement every component of a Witness Case or prescribe a Relying-Party Decision.</t>
        <t>The Model's qualified-state interpretation motivates the separation of content bases from PROV and IV. In this Core, the structural order does not entail support at another base. The Boundary Ceiling excludes claims; it supplies no positive finding. Verification qualifies only the exact base and target for which the applicable predicate passed. No scalar WL label replaces those predicates.</t>
        <t>The Model states its Boundary Ceiling as Axiom BC. The Conceptual Core states a more general boundary rule derived from non-amplification. Applying an exclusion rule here neither proves the Model's axiom nor establishes a refinement theorem between these works. Conformance or interoperability evidence for this Core establishes only the declared implementation or comparison scope.</t>
        <t><xref target="conceptual-correspondence"/> records the principal correspondences and limitations. Normative behavior is fully stated in this document; an informative conceptual reference cannot silently add an input field, a predicate, or an acceptance condition. Later revisions of either conceptual publication require an explicit correspondence review before being claimed as the basis of a later Core revision.</t>
      </section>

      <section anchor="related-work">
        <name>Relationship to Related Work</name>
        <t>RATS <xref target="RFC9334"/> appraises evidence about an environment. Transparency systems provide evidence about registration or inclusion under their verification assumptions. Provenance systems describe origin and production history. Action-record, capsule, receipt, and audit specifications define carriers and lifecycle objects. WEXP is complementary: it defines the per-action evidence-to-claim appraisal semantics that those systems can invoke through a mapping profile.</t>
        <t>WEXP does not duplicate canonical action identity, evidence-collection sufficiency, authorization evidence chains, action lifecycle state, or SCITT carrier semantics <xref target="RFC9943"/>. Such systems can consume a WEXP Appraisal as one typed result, and WEXP profiles can consume their artifacts as evidence, without either layer taking ownership of the other.</t>
        <section anchor="coverage-relationship">
          <name>Joint Use with Coverage (Informative)</name>
          <t>WEXP Coverage <xref target="WEXP-COVERAGE"/> defines a separate experimental contract for claims about bounded populations of actions and records. Core appraises exact typed claims for one target; it does not establish population completeness. Coverage is not a Core content base, qualifier, verdict, or legacy WL display label, and Core has no normative dependency on Coverage. A deployment can use either contract alone or combine them in one implementation, invocation, or report.</t>
          <t>A joint-use profile identifies how Core targets correspond to elements of the Coverage scope, including the meaning of the action, required claims, versions, contexts, cutoffs, and policies. A shared identifier alone does not establish that a ledger append and an external payment are the same action. A combined report preserves the Core appraisals, the Coverage result, and a separate application-policy decision with its dependencies. Core <tt>reject</tt> is not a Coverage refutation, and an absent or unsupported component required by the selected task is not a positive combined result. Receipt delivery and consumption of an appraisal result are different events.</t>
          <t>Shared evidence or administrative control can create common dependencies; independence established for one claim is not automatically transferred to the other contract. Completeness relative to actual actions does not establish that every required action or obligation was fulfilled. These joint-use requirements belong to the applicable profile, not to a new Core algorithm or conformance claim.</t>
        </section>
      </section>
    </section>

    <section anchor="terminology">
      <name>Conventions and Terminology</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.</t>
      <dl>
        <dt>Action Target</dt>
        <dd><t>The exact action, decision, invocation, execution, or observed event to which a claim and its supporting findings are bound. Core treats the target as opaque and defines no identifier format.</t></dd>
        <dt>Content Base</dt>
        <dd><t>The kind of action-related content asserted by a claim: observation, intent, invocation, or execution.</t></dd>
        <dt>Qualifier</dt>
        <dd><t>An additional property of evidence supporting an exact content claim. A qualifier does not change the content base.</t></dd>
        <dt>Normalized Evidence Fact</dt>
        <dd><t>A profile-produced finding with an exact target, an exact content base or qualifier role, an evaluation status, basis references, and limitations.</t></dd>
        <dt>Boundary Ceiling</dt>
        <dd><t>The strongest content base that the accepted evidence-producing boundary can warrant. It excludes stronger claims but never creates support.</t></dd>
        <dt>Boundary Grounding</dt>
        <dd><t>The reported grounding class of a boundary finding: <tt>asserted-only</tt>, <tt>attributed</tt>, <tt>attested</tt>, or <tt>not-evaluated</tt>. It records the kind of grounding reported under the applicable profile and context, not a guarantee that the boundary is true or controlled by the asserted actor. It is distinct from the groundedness of an argument graph in <xref target="WCC-CORE"/>. The fixed rejection result uses <tt>unavailable</tt>, as specified in <xref target="algorithm"/>.</t></dd>
        <dt>Exact Support</dt>
        <dd><t>Support established by the predicate for the same action target, content base, qualifier set, and evaluation context as the claim.</t></dd>
        <dt>Witnessability Appraisal</dt>
        <dd><t>The result produced by the Core procedure, including the supported claim set, verdict, reasons, evaluation gaps, limitations, boundary information, and evaluation context.</t></dd>
      </dl>
    </section>

    <section anchor="conformance-surfaces">
      <name>Conformance Surfaces</name>
      <t>This document distinguishes Core-appraiser conformance from mapping-profile, composition-profile, carrier, and result-carrier conformance. <xref target="conformance"/> defines the evidence required for a Core-appraiser claim. Each other claim identifies the exact profile and the obligations it covers.</t>
      <t>A capability declaration describes the assessments represented by a normalized input. It <bcp14>MUST NOT</bcp14> be used as positive evidence, as a structural ceiling on claims, or as a sort key over claims. An unperformed assessment is reported through its exact status and applicable evaluation gap; a verdict alone <bcp14>MUST NOT</bcp14> replace that information.</t>
      <t>This revision defines no numbered Conformance Classes. An implementation of the complete Core-appraiser surface need not implement a native carrier or a composition profile. Conversely, implementing a carrier or profile does not establish Core-appraiser conformance. Producer capability declarations remain matters for their identified profiles.</t>
    </section>

    <section anchor="claim-model">
      <name>Claim Model</name>

      <section anchor="action-target">
        <name>Exact Action Target</name>
        <t>Every asserted claim and every finding used to support it <bcp14>MUST</bcp14> be bound to an exact action target. Equality and binding are defined by the mapping profile. Core does not require or create a global action identifier.</t>
        <t>A correlation hint, record identifier, shared timestamp, similar payload, or common signer <bcp14>MUST NOT</bcp14> be treated as an exact target binding unless an applicable profile defines and validates that use.</t>
      </section>

      <section anchor="content-bases">
        <name>Content Bases</name>
        <t>This document defines four distinct content bases:</t>
        <dl>
          <dt>observation</dt>
          <dd><t>A positive finding that an event concerning the exact action target was recorded or reported. Absence of evidence does not support observation.</t></dd>
          <dt>intent</dt>
          <dd><t>A specific intention, approval, plan, or decision concerning the exact action and its bound arguments is evidenced. It does not establish authority, approval validity, policy satisfaction, invocation, or execution.</t></dd>
          <dt>invocation</dt>
          <dd><t>The exact invocation crossed an observed invocation boundary. It does not establish that the invoked operation executed or produced an effect.</t></dd>
          <dt>execution</dt>
          <dd><t>Execution of the exact action was evidenced at an execution-relevant controlled boundary. It does not establish completion of a larger process, durable external effect, goal satisfaction, authorization validity, or correctness.</t></dd>
        </dl>
        <t>The bases have a structural content-depth order:</t>
        <artwork><![CDATA[
observation < intent < invocation < execution
]]></artwork>
        <t>This order is not an entailment relation. Evidence supporting one base does not, by that fact alone, support any other base. A mapping profile <bcp14>MUST</bcp14> evaluate each base predicate independently.</t>
      </section>

      <section anchor="qualifiers">
        <name>Evidence Qualifiers</name>
        <dl>
          <dt>PROV</dt>
          <dd><t>The established execution of the exact action is linked to provenance that has been semantically validated and accepted in the evaluation context. PROV applies only to the execution base. Provenance for intent, invocation, configuration, an environment, or an output object does not by itself satisfy PROV for the action's execution.</t></dd>
          <dt>IV</dt>
          <dd><t>The exact content claim, at its exact base, has been independently verified under an applicable profile and trust configuration. IV can qualify any supported base and does not raise that base.</t></dd>
        </dl>
        <t>The qualifiers are independent. Neither implies the other. IV for invocation <bcp14>MUST NOT</bcp14> be transferred to execution, and IV or PROV for one action <bcp14>MUST NOT</bcp14> be transferred to another.</t>
        <t>A different key, signer, organization label, or trust root is not sufficient by itself to establish independence. The applied IV profile <bcp14>MUST</bcp14> define the administrative, operational, and technical criteria it evaluates.</t>
      </section>

      <section anchor="typed-claims">
        <name>Typed Claims and Admissible Domain</name>
        <t>A typed claim is a pair <tt>(base, qualifiers)</tt>, where <tt>base</tt> is a content base and <tt>qualifiers</tt> is a subset of <tt>{PROV, IV}</tt>. The claim is admissible only if PROV is absent or the base is execution.</t>
        <t>Well-formedness and admissibility are separate: <tt>(intent, {PROV})</tt> uses a recognized base and qualifier set and is well-formed, but is inadmissible as an asserted claim and is rejected at step 6 when no earlier rejection applies in <xref target="input-validity"/>; an unknown base or qualifier, wrong logical type, or malformed qualifier set fails the structural check at step 3.</t>
        <t>The admissible claims are:</t>
        <artwork><![CDATA[
(observation, {})       (observation, {IV})
(intent, {})            (intent, {IV})
(invocation, {})        (invocation, {IV})
(execution, {})         (execution, {PROV})
(execution, {IV})       (execution, {PROV, IV})
]]></artwork>
        <t>An asserted claim outside this domain is rejected with <tt>E_CLAIM_OUT_OF_DOMAIN</tt>. An appraiser <bcp14>MUST NOT</bcp14> silently delete an invalid qualifier and reinterpret the assertion as another claim.</t>
      </section>

      <section anchor="structural-order">
        <name>Structural Order</name>
        <t>For structural comparison only:</t>
        <artwork><![CDATA[
(b1, A1) <= (b2, A2)  iff  b1 <= b2 and A1 is a subset of A2
]]></artwork>
        <t>This is a partial order. For example, <tt>(execution, {PROV})</tt> and <tt>(execution, {IV})</tt> are incomparable, as are <tt>(invocation, {IV})</tt> and <tt>(execution, {})</tt>.</t>
        <t>The structural order is used for the Boundary Ceiling comparison, maximal supported alternatives, support relations, and declared display projections. It <bcp14>MUST NOT</bcp14> be used as an exact-support predicate. In particular, support for execution does not accept an intent claim unless the exact intent predicate also passes.</t>
      </section>

      <section anchor="notation">
        <name>Notation and Legacy Display Labels</name>
        <t>This document writes a typed claim using the base name followed by its qualifier set. The following WL labels are retained only as a familiar, lossy display convention:</t>
        <table>
          <name>Legacy WL Display Labels</name>
          <thead><tr><th>Display label</th><th>Typed claim</th></tr></thead>
          <tbody>
            <tr><td>WL0</td><td><tt>(observation, {})</tt></td></tr>
            <tr><td>WL1</td><td><tt>(intent, {})</tt></td></tr>
            <tr><td>WL2</td><td><tt>(invocation, {})</tt></td></tr>
            <tr><td>WL3</td><td><tt>(execution, {})</tt></td></tr>
            <tr><td>WL4</td><td><tt>(execution, {PROV})</tt></td></tr>
            <tr><td>WL5</td><td><tt>(execution, {IV})</tt></td></tr>
          </tbody>
        </table>
        <t>Other admissible claims have no bare legacy label. A display projection is not a protocol primitive, an ordering function, or a complete appraisal. A conforming implementation <bcp14>MUST NOT</bcp14> compare, bound, compose, or accept claims by numeric WL labels.</t>
      </section>
    </section>

    <section anchor="presentation">
      <name>Presentation and Display Projection</name>
      <t>The authoritative form of a claim in this document is its typed state: the pair
      of a content base and a set of evidence qualifiers, written in the tuple
      notation of <xref target="claim-model"/>, with parentheses around the pair
      and braces around the qualifier set. This is the canonical form for showing
      qualified states.</t>
      <t>A carrier that also exposes a single bare display label <bcp14>MUST NOT</bcp14>
      emit a record in a qualified state without carrying that record's authoritative
      typed state alongside the label. A bare display label is a projection of the typed
      state; it is never the authority for it, and it is never a sort key.</t>
      <t>Where a display label is produced, it <bcp14>MUST</bcp14> be produced by a
      declared projection with the following properties. The projection is
      profile-defined and justified: this document presumes no total order over typed
      states, and any projection into one requires justification by the profile that
      declares it. The projection is version-identifiable: a reader of a display value
      can determine which revision of which projection produced it. The projection never
      exceeds the typed state: the label denotes a maximal eligible bare label that is
      less than or equal to the typed state. When there is more than one such label,
      the ambiguity is resolved as specified below.</t>
      <t>Where the declared projection is ambiguous for the state consisting of the
      execution base with both the provenance and independent-verification qualifiers,
      the label denotes <tt>WL4</tt>. Both <tt>WL4</tt> and <tt>WL5</tt> are maximal
      bare labels below that state and neither exceeds the other, so the projection alone
      does not determine the value; this resolution is fixed by this document and is not
      left to the projection.</t>
      <t>A display label <bcp14>MUST</bcp14> equal the value of the declared projection
      applied to the authoritative typed state. Consistency is defined against the
      projection, not against any tabular image of it. A divergence between a display
      label and the authoritative typed state is a fatal defect of the carrier
      representation. The carrier profile rejects that representation and reports
      its own diagnostic. When the failure prevents construction of a complete
      <tt>AppraisalInput</tt>, no Core appraisal is produced. Any Core rejection
      follows the ordered checks in
      <xref target="input-validity"/>; a carrier diagnostic is not by itself a
      Core rejection or a Core reason token.</t>
      <t>A conforming reader is cautioned that a schema-valid record is not thereby a
      correctly projected record: schema validity concerns conformance to representation constraints,
      while a projection concerns semantic continuity between the label and the state.
      A reader of an earlier revision of this protocol should not assume that a bare
      label carried there denotes the same state under the projection declared here.</t>
    </section>

    <section anchor="normalized-input">
      <name>Normalized Appraisal Input</name>
      <t>The set of inputs this document requires is exhaustive for WEXP Core: for each
      claimed state it is the complete set of Core-required inputs. A profile
      <bcp14>MAY</bcp14> require more; Core does not. Requirements are keyed on the
      authoritative typed state of <xref target="presentation"/>, never on a display
      label.</t>
      <t>Core does not require a commitment to the action's input arguments at the execution level; a claim
      at the execution level therefore binds the execution, not those arguments. A profile that
      needs the action's input arguments bound at that level <bcp14>MUST</bcp14> require it. Such a
      requirement adds a profile-specific input-binding obligation; field presence
      alone does not satisfy it or change the content base.</t>
      <t>A mapping profile supplies the following logical input. This is an abstract contract, not a wire schema.</t>
      <sourcecode type="text"><![CDATA[
AppraisalInput = {
  semantics_version,       ; "wexp-core-2"
  target,
  asserted_claim,
  evaluation_context: {
    id,
    evaluated_at,
    trust_configuration,
    profile_identifiers[]  ; immutable profile revisions;
                           ; bind applicable registries
  },

  boundary_finding: {
    target,
    evaluation_context_ref,
    ? ceiling_base,         ; REQUIRED when status is supported;
                             ; ignored otherwise
    status,                 ; supported | unsupported | not-evaluated
    target_binding,         ; supported | unsupported | not-evaluated
    grounding,              ; asserted-only | attributed | attested |
                             ; not-evaluated
    basis_refs[],
    reasons[],
    limitations[]
  },

  base_findings[]: {
    target,
    evaluation_context_ref,
    base,
    target_binding,         ; supported | unsupported | not-evaluated
    semantic_validation,    ; supported | unsupported | not-evaluated
    basis_refs[],
    reasons[],
    limitations[]
  },

  qualifier_findings[]: {
    target,
    evaluation_context_ref,
    qualifier,              ; PROV | IV
    qualified_base,
    target_binding,
    semantic_validation,
    independence_validation, ; supported | unsupported |
                             ; not-evaluated | not-applicable
    basis_refs[],
    reasons[],
    limitations[]
  },

  recorder_relations[]: {
    profile_identifier,
    relation_token,
    subject_ref,
    object_ref,
    basis_refs[],
    limitations[]
  },
  counter_evidence[]: {
    status,                 ; not-supplied | not-evaluated |
                             ; resolved-no-defeat |
                             ; unresolved-material | defeating
    affected_claims[],      ; or all-admissible-claims
    basis_refs[],
    reasons[],              ; substantive-category profile tokens
    limitations[]
  },
  evaluation_scope,         ; initial-capability-name or
                             ; (profile_identifier, local_name) ->
                             ; evaluated | not-evaluated
  profile_evaluation_gaps[]: {
    target,
    evaluation_context_ref,
    token,
    ? current_scope_capability, ; authenticity | composition;
                                ; absent for inherited gaps
    affected_claims[],      ; or all-admissible-claims
    basis_refs[],
    limitations[]
  },
  inherited_limitations[],
  fatal_conditions[]
}
]]></sourcecode>
      <t>Every displayed top-level component is <bcp14>REQUIRED</bcp14>. The only semantics version defined by this document is <tt>wexp-core-2</tt>. Any other text-atom value is fatal and produces <tt>E_UNSUPPORTED_SEMANTICS_VERSION</tt>. An absent or non-text value is malformed under <xref target="input-validity"/>.</t>
      <t>The mapping process <bcp14>MUST</bcp14> be claim-independent: it evaluates every available base material and every evidence role, not only the asserted base or asserted qualifiers. This permits an appraisal to report an incomparable supported alternative, such as PROV-supported execution when IV-supported execution was asserted.</t>
      <t>A passing base or qualifier finding <bcp14>MUST</bcp14> state that the evidence was semantically validated, accepted under the evaluation context, and bound to the exact target and exact base named by the finding. Presence of a reference, a valid digest, a signature, or an artifact whose media type suggests provenance or attestation is insufficient.</t>
      <t>A profile <bcp14>MUST</bcp14> distinguish <tt>unsupported</tt>, meaning the relevant assessment ran and failed, from <tt>not-evaluated</tt>, meaning the assessment was unavailable or outside the evaluation scope. It <bcp14>MUST</bcp14> preserve all applicable limitations and evaluation gaps.</t>
      <t>All findings are explicitly scoped. The boundary finding, every base and qualifier aggregate, and every profile-gap entry have a <tt>target</tt> equal to the top-level target and an <tt>evaluation_context_ref</tt> equal to the top-level evaluation-context identifier. A foreign-scoped aggregate is not negative evidence for this appraisal; it violates the normalized-input cross-field contract and produces <tt>E_PROFILE_MAPPING_INVALID</tt>. Evidence that was safely evaluated but covers or binds a different target or base is represented by a correctly scoped aggregate with a non-passing status and, when applicable, <tt>E_EVIDENCE_COVERAGE_MISMATCH</tt> or <tt>E_EVIDENCE_NOT_BOUND</tt>. The boundary finding additionally requires supported target binding before its ceiling can be used.</t>
      <t>A normalized input contains exactly one aggregated boundary finding, at most one aggregated base finding for each <tt>(target, base, evaluation_context)</tt> key, and at most one aggregated qualifier finding for each <tt>(target, qualifier, qualified_base, evaluation_context)</tt> key. A mapping profile combines multiple raw artifacts into that aggregate and preserves all basis references and limitations. Duplicate or conflicting aggregate findings are fatal and produce <tt>E_PROFILE_MAPPING_INVALID</tt>.</t>
      <t>A boundary finding with <tt>status = supported</tt> <bcp14>MUST</bcp14> contain <tt>ceiling_base</tt>. Its absence is a profile-mapping failure and produces <tt>E_PROFILE_MAPPING_INVALID</tt>. A supported boundary has a grounding value of <tt>asserted-only</tt>, <tt>attributed</tt>, or <tt>attested</tt> that the evaluation context accepts. <tt>grounding = not-evaluated</tt> is valid only with <tt>status = not-evaluated</tt>; either field paired differently produces <tt>E_PROFILE_MAPPING_INVALID</tt>. When boundary status is <tt>unsupported</tt> or <tt>not-evaluated</tt>, a present <tt>ceiling_base</tt> is diagnostic carrier metadata only and is ignored by the Core algorithm.</t>
      <t>A PROV aggregate is valid only when <tt>qualified_base = execution</tt> and <tt>independence_validation = not-applicable</tt>. An IV aggregate is valid only when <tt>qualified_base</tt> is one of the four content bases and <tt>independence_validation</tt> is <tt>supported</tt>, <tt>unsupported</tt>, or <tt>not-evaluated</tt>. PROV on another base, IV with <tt>not-applicable</tt>, or another recognized but disallowed qualifier-field combination produces <tt>E_PROFILE_MAPPING_INVALID</tt>. An unknown closed-enum member or wrong logical type is malformed. A mapper does not delete or repair an invalid qualifier aggregate. A valid qualifier contributes support only when its exact qualified base is independently in <tt>B</tt>.</t>
      <t><tt>counter_evidence</tt> is an entry set, not a single strongest status. When no counter-evidence was supplied it contains exactly one <tt>not-supplied</tt> entry with empty affected claims, basis references, reasons, and limitations. Otherwise <tt>not-supplied</tt> is absent and every entry names at least one admissible affected claim or <tt>all-admissible-claims</tt>. <tt>not-evaluated</tt> means supplied counter-evidence could not be assessed; <tt>resolved-no-defeat</tt> means it was assessed and does not defeat the named claims; <tt>unresolved-material</tt> means it is material but unresolved; and <tt>defeating</tt> means it affirmatively defeats the named claims. When the affected claims cannot be narrowed safely, <tt>affected_claims</tt> is <tt>all-admissible-claims</tt>. Entries with different affected-claim sets or statuses <bcp14>MUST NOT</bcp14> be collapsed into one status.</t>
      <t>A challenge process defined outside this document can supply a counter-evidence entry when the applicable profile admits the challenge and binds it to affected claims for this exact target and context. A challenge to the eligibility of a profile or evaluation context is not automatically an action-level counter entry; it can instead require a new context or a new mapping assessment. Core defines neither the challenge process nor its admission policy.</t>
      <t>Every member of a counter entry's <tt>reasons</tt> set <bcp14>MUST</bcp14> be a token registered in the <tt>substantive</tt> category by a registry applicable to the mapping profile and <bcp14>MUST</bcp14> apply to that entry's affected claims. Fatal tokens are carried in <tt>fatal_conditions</tt>, and evaluation-gap tokens are carried in <tt>profile_evaluation_gaps</tt>; they <bcp14>MUST NOT</bcp14> appear in <tt>counter_evidence[].reasons</tt>. A non-Core token resolves uniquely, including category, through exactly one immutable registry revision identified by an applied <tt>profile_identifier</tt>; absence, ambiguity, or category disagreement produces <tt>E_PROFILE_MAPPING_INVALID</tt>. Entry reasons are explanatory and do not change the entry status or block a claim by themselves. Core-derived counter-status tokens are emitted in addition to, not instead of, applicable entry reasons.</t>
      <t>Likewise, every token in <tt>reasons[]</tt> on a boundary, base, or qualifier finding <bcp14>MUST</bcp14> be registered in the <tt>substantive</tt> category and apply to that finding. A non-Core token resolves uniquely through an immutable registry revision identified by an applied <tt>profile_identifier</tt>. Fatal tokens belong in <tt>fatal_conditions</tt>, and evaluation-gap tokens belong in <tt>profile_evaluation_gaps</tt>. An absent, ambiguous, unregistered, or miscategorized finding reason is a profile-mapping failure and produces <tt>E_PROFILE_MAPPING_INVALID</tt>.</t>
      <t>Every member of <tt>fatal_conditions</tt> <bcp14>MUST</bcp14> be a token registered in the <tt>fatal</tt> category by the Core registry or a registry applicable to the mapping profile. Core tokens are bound to the <tt>semantics_version</tt>; every non-Core token resolves uniquely through an immutable registry revision identified by an applied <tt>profile_identifier</tt>. An absent, ambiguous, unregistered, or miscategorized member is a profile-mapping failure; the appraiser returns <tt>E_PROFILE_MAPPING_INVALID</tt> instead of treating that member as fatal.</t>
      <t><tt>profile_evaluation_gaps</tt> carries structured gaps supplied by a mapping or composition profile that are not otherwise recoverable from a Core finding status. Every entry is scoped to the exact target and evaluation context and contains a token registered in the <tt>evaluation-gap</tt> category, at least one admissible affected claim or <tt>all-admissible-claims</tt>, basis references, and limitations. A non-Core token resolves uniquely through an immutable registry revision identified by an applied <tt>profile_identifier</tt>. The optional <tt>current_scope_capability</tt> is present only when the entry represents the current appraiser's unperformed <tt>authenticity</tt> or <tt>composition</tt> assessment; it names exactly that initial capability. The token registration also identifies that same capability: <tt>E_COMPOSITION_NOT_EVALUATED</tt> is initially registered for <tt>composition</tt>, while <tt>authenticity</tt> requires an exact profile token registered for authenticity assessment. A profile can register another evaluation-gap token for either capability. A marker-token capability mismatch produces <tt>E_PROFILE_MAPPING_INVALID</tt>. Absence of the marker means that the entry is inherited or otherwise diagnostic and does not determine a current capability status. A composition profile uses this field to preserve applicable upstream gaps after remapping them to the exact chain target. The ordered classification in <xref target="input-validity"/> applies to these entries. A missing member, a wrong logical type, or a malformed atom or set member produces <tt>E_MALFORMED_NORMALIZED_INPUT</tt> at the structural check. For a structurally valid entry, an empty affected-claim set, an absent, ambiguous, unregistered, or non-evaluation-gap token binding, an incorrect target or evaluation-context scope, a disallowed or mismatched current-scope marker, or an unbound profile-scoped atom produces <tt>E_PROFILE_MAPPING_INVALID</tt> at the cross-field check. A valid entry is unrelated to this appraisal and is not projected only when its affected claims include none of the asserted claim, a member of <tt>SupportedClaims</tt>, or <tt>all-admissible-claims</tt>.</t>

      <section anchor="logical-values">
        <name>Logical Types, Identity, and Equality</name>
        <t>The abstract contract uses logical values, not carrier encodings. Content bases, qualifiers, statuses, grounding classes, verdicts, and the initial evaluation-scope names are closed enumerations whose members compare by the exact names defined in this document. A typed claim compares as the ordered pair of its base and its mathematical qualifier set.</t>
        <t>The target, evaluation-context identifier, evaluation time, and trust configuration are opaque logical atoms. An applied <tt>profile_identifier</tt> is an immutable specification-and-revision identity, not a floating profile name. It identifies the profile-defined equality rules and the exact reason-registry revisions used by that profile. A basis reference or limitation is a profile-scoped atom logically equivalent to the pair <tt>(profile_identifier, local_value)</tt>. Before invoking Core, the mapper normalizes every profile-defined atom into the stable comparison value defined by that immutable profile revision. Core does not interpret an opaque atom; it only compares, copies, and set-unions it using that equality.</t>
        <t>Every collection described as a set, including qualifier, profile-identifier, basis-reference, reason, limitation, fatal-condition, affected-claim, supported-claim, and maximal-claim collections, is an unordered mathematical set. Equal members occur once. A carrier representation either normalizes repeated representations of an equal set member before Core invocation or rejects them under its own mapping rules. The aggregate and entry collections are unordered sets keyed by the complete keys defined in this document. Two aggregate entries with the same aggregate key are the duplicate condition in this section, even if every field is byte-identical.</t>
        <t>A recorder relation is the logical record shown in <xref target="normalized-input"/>. Its <tt>profile_identifier</tt> binds the immutable relation vocabulary; <tt>relation_token</tt> names one member of that vocabulary; <tt>subject_ref</tt> and <tt>object_ref</tt> are profile-scoped atoms; and its basis references and limitations use the equality above. Recorder relations are descriptive carried facts. Their presence does not create a content-base or qualifier finding. Two recorder relations are equal only when all six logical components are equal, and composition unions them under that equality.</t>
        <t>These equality rules govern aggregate uniqueness, structural comparison, support-entry premise unions, inherited-limitations unions, composition, and Core equivalence. A profile cannot substitute serialization equality, display equality, or byte equality for the bound logical equality unless its immutable revision explicitly defines those values to be identical.</t>
      </section>

      <section anchor="input-validity">
        <name>Core Ingress, Validity Classes, and Fatal Precedence</name>
        <t>Core receives one complete logical <tt>AppraisalInput</tt>. Carrier parsing, carrier authentication, carrier critical-extension processing, and construction of the logical input occur upstream. When an upstream failure prevents construction of a complete input, there is no Core result. A carrier or profile can report its own diagnostic alongside that outcome, but it does not synthesize a partial Core appraisal or translate a carrier error into a Core reason token.</t>
        <t>The Core rejection checks are ordered and mutually classified as follows:</t>
        <ol>
          <li><t>If the outer value is not an input record, or <tt>semantics_version</tt> is absent or is not a text atom, Core returns <tt>E_MALFORMED_NORMALIZED_INPUT</tt>.</t></li>
          <li><t>If that readable value is not <tt>wexp-core-2</tt>, Core returns <tt>E_UNSUPPORTED_SEMANTICS_VERSION</tt> without applying the version-specific member rules below.</t></li>
          <li><t>For <tt>wexp-core-2</tt>, a missing required member, unknown member, wrong logical type, unknown closed-enum value, or malformed set, entry, claim, token, or recorder relation returns <tt>E_MALFORMED_NORMALIZED_INPUT</tt>.</t></li>
          <li><t>A well-typed <tt>wexp-core-2</tt> input that violates a cross-field invariant returns <tt>E_PROFILE_MAPPING_INVALID</tt>. Cross-field invariants include aggregate cardinality and keys, exact target and context scope, the counter-evidence sentinel, qualifier combinations, conditional <tt>ceiling_base</tt>, evaluation-scope consistency and extension-key binding, and profile or registry identity and token category.</t></li>
          <li><t>If the structurally usable input has a non-empty valid <tt>fatal_conditions</tt> set, Core returns that complete set through the fixed rejection projection.</t></li>
          <li><t>Otherwise an inadmissible asserted claim returns <tt>E_CLAIM_OUT_OF_DOMAIN</tt>.</t></li>
        </ol>
        <t><tt>E_MALFORMED_NORMALIZED_INPUT</tt>, <tt>E_UNSUPPORTED_SEMANTICS_VERSION</tt>, <tt>E_PROFILE_MAPPING_INVALID</tt>, and <tt>E_CLAIM_OUT_OF_DOMAIN</tt> are derived only by the ordered Core checks and are invalid as supplied members of <tt>fatal_conditions</tt>. The Core-defined supplied fatal members are <tt>E_UNKNOWN_CRITICAL_SEMANTIC</tt>, <tt>E_INTEGRITY_INVALID</tt>, <tt>E_BINDING_MISMATCH</tt>, and <tt>E_CHAIN_DESCRIPTION_INVALID</tt>. An immutable applied profile can additionally register supplied fatal tokens. If any supplied member is appraiser-derived, unbound, ambiguous, or in the wrong category, the cross-field check returns only <tt>E_PROFILE_MAPPING_INVALID</tt>.</t>
        <t>A supplied <tt>E_INTEGRITY_INVALID</tt> means that an integrity or authentication failure affecting normalized interpretation was identified while enough structurally usable logical input remains to report that Core condition. A supplied <tt>E_BINDING_MISMATCH</tt> means protected fields or mandatory mapping bindings are internally contradictory while the same minimum remains available. Ordinary negative or unevaluated exact-target binding is represented by a correctly scoped aggregate and is non-fatal. A supplied <tt>E_UNKNOWN_CRITICAL_SEMANTIC</tt> means an unrecognized critical Core or applied mapping-profile semantic can affect normalized interpretation and cannot safely be ignored. It does not mean an unknown carrier extension, and it is not an alias for a carrier-specific error. <tt>E_CHAIN_DESCRIPTION_INVALID</tt> has the analogous meaning for a structurally usable input produced by an applied composition profile.</t>
        <t>Multiple valid supplied fatal members are returned together as a set. No later check or diagnostic is added after any earlier rejection branch wins. The fixed projection in <xref target="algorithm"/> is the only Core result for every rejection branch.</t>
      </section>
    </section>

    <section anchor="boundary-ceiling">
      <name>Boundary Ceiling</name>
      <t>For every supported claim <tt>(b, A)</tt>, <tt>b</tt> <bcp14>MUST NOT</bcp14> exceed the accepted <tt>boundary_finding.ceiling_base</tt>. Qualifiers do not alter this comparison.</t>
      <artwork><![CDATA[
supported_content_base <= accepted_boundary_ceiling
]]></artwork>
      <t>The Boundary Ceiling is an exclusion rule, not an evidence source. A boundary finding can prevent a base from being supported; it <bcp14>MUST NOT</bcp14> create a positive base finding. Observation itself requires a positive exact observation finding.</t>
      <t>An <tt>accept</tt> or <tt>downgrade</tt> result <bcp14>MUST</bcp14> preserve the boundary grounding status and its limitations. A <tt>reject</tt> result instead uses the fixed projection in <xref target="algorithm"/>. A string or structural descriptor asserted by a producer is at most <tt>asserted-only</tt>; a valid signature associated with an accepted identity can make it <tt>attributed</tt>; and an applicable boundary-grounding profile can make it <tt>attested</tt>. Attribution is not proof of actual boundary control.</t>
      <t><tt>boundary_finding.status = supported</tt> means that the boundary predicate required by the named evaluation context passed. The evaluation context <bcp14>MUST</bcp14> identify the minimum acceptable grounding. A profile <bcp14>MUST NOT</bcp14> mark a boundary supported merely because a boundary name or descriptor is present. An <tt>asserted-only</tt> or <tt>attributed</tt> finding can be supported only when the evaluation context explicitly accepts that grounding class; the result still reports the weaker grounding and its limitations.</t>
      <t>The boundary status has deterministic precedence. When <tt>status = not-evaluated</tt>, no base is added and the appraiser records <tt>E_BOUNDARY_NOT_EVALUATED</tt>. When <tt>status = unsupported</tt>, no base is added and it records <tt>E_BOUNDARY_NOT_SUPPORTED</tt>. Only <tt>status = supported</tt> with <tt>target_binding = supported</tt> and matching target and context makes <tt>ceiling_base</tt> usable. A failed target binding prevents use of the ceiling and adds the Core substantive reason <tt>E_EVIDENCE_NOT_BOUND</tt>; an unevaluated target binding prevents use of the ceiling and adds the Core gap <tt>E_BOUNDARY_NOT_EVALUATED</tt>, as specified by <xref target="reasons"/>.</t>
    </section>

    <section anchor="appraisal">
      <name>Appraisal Procedure</name>

      <section anchor="supported-claims">
        <name>Supported Claim Set</name>
        <t>Let <tt>B</tt> be the set of exact supported bases. A base <tt>b</tt> is in <tt>B</tt> if and only if all of the following hold:</t>
        <ol>
          <li><t>the unique aggregate base finding for <tt>b</tt> has supported target binding and supported semantic validation;</t></li>
          <li><t>the finding names the same target and evaluation context as the appraisal input;</t></li>
          <li><t>the boundary finding is supported, target-bound, and scoped to that same target and context; and</t></li>
          <li><t>the accepted Boundary Ceiling is at least <tt>b</tt>.</t></li>
        </ol>
        <t>For each <tt>b</tt> in <tt>B</tt>, let <tt>Q(b)</tt> contain:</t>
        <ul>
          <li><t>PROV only when <tt>b</tt> is execution and a PROV finding for execution has <tt>target_binding = supported</tt> and <tt>semantic_validation = supported</tt> for the exact target and evaluation context; and</t></li>
          <li><t>IV only when an IV finding for <tt>b</tt> has <tt>target_binding = supported</tt>, <tt>semantic_validation = supported</tt>, and <tt>independence_validation = supported</tt> for the exact target and evaluation context.</t></li>
        </ul>
        <t>The supported claim set is:</t>
        <artwork><![CDATA[
SupportedClaims = {
  (b, A) | b is in B, A is a subset of Q(b),
           and (PROV in A implies b == execution)
}
]]></artwork>
        <t>The procedure evaluates all findings independently of the asserted claim. It does not restrict <tt>B</tt> or <tt>Q(b)</tt> to the asserted base or qualifiers.</t>
        <t><tt>MaximalSupportedClaims</tt> is the set of members of <tt>SupportedClaims</tt> that are not structurally dominated by another member under <xref target="structural-order"/>. The complete supported set remains authoritative because maximal claims do not encode exact support for bases they structurally dominate.</t>
        <t>For every member of <tt>SupportedClaims</tt>, the appraiser also produces a support entry containing the exact claim, the union of basis references used for its base, boundary, and qualifiers, and the limitations attached to those same premises. Limitations from failed or unrelated findings are not attached to that support entry, but remain available as evaluation diagnostics where applicable.</t>
        <t>The result's <tt>inherited_limitations</tt> is the set union of the input's inherited limitations; limitations from each counter-evidence or profile-gap entry whose affected claims include the asserted claim, a member of <tt>SupportedClaims</tt>, or <tt>all-admissible-claims</tt>; boundary limitations; every support-entry limitation; and limitations attached to findings that determine a reason or gap for the asserted claim. Limitations on unrelated failed findings are excluded. This rule, not implementation policy, determines which limitations are applicable.</t>
      </section>

      <section anchor="verdict">
        <name>Verdict</name>
        <t>A conforming Core appraiser <bcp14>MUST</bcp14> return exactly one of <tt>accept</tt>, <tt>downgrade</tt>, or <tt>reject</tt>.</t>
        <dl>
          <dt>reject</dt>
          <dd><t>The normalized input cannot be safely interpreted, a fatal condition is present, unknown critical semantics affect the result, or the asserted claim is outside the admissible domain.</t></dd>
          <dt>accept</dt>
          <dd><t>The asserted claim is an exact member of <tt>SupportedClaims</tt> and counter-evidence does not block that exact claim.</t></dd>
          <dt>downgrade</dt>
          <dd><t>The input is safely interpretable and the asserted claim is admissible, but it is not exactly supported, or counter-evidence blocks acceptance.</t></dd>
        </dl>
        <t><tt>downgrade</tt> means that an admissible assertion is not accepted on this safely interpretable input. The assertion can lack exact positive support, or it can have exact positive support while applicable counter-evidence blocks acceptance. In the latter case <tt>asserted_claim_supported</tt> remains true. The verdict does not imply that every supported alternative is structurally below the assertion; an alternative can be below, above, or incomparable.</t>
        <t>Counter-evidence blocks a claim when at least one entry has status <tt>not-evaluated</tt>, <tt>unresolved-material</tt>, or <tt>defeating</tt> and that entry's <tt>affected_claims</tt> contains the claim or <tt>all-admissible-claims</tt>. <tt>not-supplied</tt> and <tt>resolved-no-defeat</tt> entries do not block by themselves. The reason token is derived from each applicable blocking entry; a <tt>defeating</tt> entry for one claim never changes the status of a separate <tt>not-evaluated</tt> entry for another claim.</t>
      </section>

      <section anchor="support-relation">
        <name>Support Relation</name>
        <t>For each maximal supported claim, the appraisal reports a pair <tt>{supported_claim, relation}</tt>, where <tt>relation</tt> is one of <tt>equal</tt>, <tt>support-below-claim</tt>, <tt>support-above-claim</tt>, or <tt>incomparable</tt>. If no claim is supported, the relation array is empty.</t>
        <t>The support relation compares typed claims structurally. It does not summarize whether counter-evidence was assessed or whether acceptance was blocked; those facts remain in their separate result components.</t>
      <t>The separate Boolean <tt>asserted_claim_supported</tt> reports exact membership in <tt>SupportedClaims</tt>. It remains true when the exact asserted claim is supported but a structurally deeper alternative causes the asserted claim not to appear in <tt>MaximalSupportedClaims</tt>.</t>
        <t>The relation is explanatory. It <bcp14>MUST NOT</bcp14> replace the exact membership test used for <tt>accept</tt>.</t>
      </section>

      <section anchor="algorithm">
        <name>Normative Algorithm</name>
        <sourcecode type="pseudocode"><![CDATA[
appraise(input):
  if input is not a logical record or
     semantics_version is absent or not a text atom:
      return rejected_result(E_MALFORMED_NORMALIZED_INPUT)
  if input.semantics_version != "wexp-core-2":
      return rejected_result(E_UNSUPPORTED_SEMANTICS_VERSION)
  if any required wexp-core-2 member, closed enum, logical type,
     set, entry, claim, token, or recorder relation is malformed:
      return rejected_result(E_MALFORMED_NORMALIZED_INPUT)
  if any cross-field invariant enumerated in Section 6.2 fails:
      return rejected_result(E_PROFILE_MAPPING_INVALID)
  if input.fatal_conditions is not empty:
      return rejected_result(input.fatal_conditions)
  if input.asserted_claim is outside the admissible domain:
      return rejected_result(E_CLAIM_OUT_OF_DOMAIN)

  B = {}
  SupportEntries = {}
  for every base finding f, independently of the asserted claim:
      if f.target == input.target and
         f.evaluation_context_ref == input.evaluation_context.id and
         f.target_binding == supported and
         f.semantic_validation == supported and
         input.boundary_finding.status == supported and
         input.boundary_finding.target == input.target and
         input.boundary_finding.evaluation_context_ref ==
             input.evaluation_context.id and
         input.boundary_finding.target_binding == supported and
         f.base <= input.boundary_finding.ceiling_base:
          add f.base to B

  SupportedClaims = {}
  for b in B:
      Q = {}
      if b == execution and
         valid_PROV_finding(input.target, b,
                            input.evaluation_context.id):
          add PROV to Q
      if valid_IV_finding(input.target, b,
                          input.evaluation_context.id):
          add IV to Q
      for every admissible (b, A), A subset of Q:
          add (b, A) to SupportedClaims
          add support_entry((b, A), exact premises, basis,
                            limitations)
              to SupportEntries

  MaximalSupportedClaims = maximal members of SupportedClaims
  asserted_claim_supported = input.asserted_claim in SupportedClaims
  fatal_reasons = {}
  reasons = {}
  GapEntries = {}

  for every non-counter row of the claim-required diagnostic matrix:
      if that row's exact predicate is true:
          if the row is substantive:
              add its token to reasons
          else:
              add its exact Core gap entry to GapEntries

  for every boundary, base, or qualifier finding that is the
      asserted role or an exact premise of a SupportEntry:
      add its registered substantive reasons to reasons

  for every profile gap entry whose affected claims include
      the asserted claim, a member of SupportedClaims, or
      all-admissible-claims:
      add that exact entry to GapEntries

  for c in applicable_counter_entries(input.counter_evidence,
                                       input.asserted_claim):
      reasons = reasons union c.reasons
      if c.status == not-evaluated:
          add gap_entry(E_COUNTER_EVIDENCE_NOT_EVALUATED,
                        input.target, input.evaluation_context.id,
                        c.affected_claims,
                        c.basis_refs, c.limitations)
              to GapEntries
      if c.status == unresolved-material:
          add E_COUNTER_EVIDENCE_UNRESOLVED to reasons
      if c.status == defeating:
          add E_COUNTER_EVIDENCE_DEFEATING to reasons

  gaps = token projection of GapEntries
  limitations = the applicable union defined in Section 8.1

  if asserted_claim_supported and not counter_blocks(
         input.counter_evidence, input.asserted_claim):
      verdict = accept
  else:
      verdict = downgrade

  return Appraisal with every required component

rejected_result(fatal_tokens):
  return Appraisal with verdict = reject,
         semantics_version = "wexp-core-2",
         fatal_reasons = fatal_tokens,
         substantive_reasons = {}, evaluation_gaps = {},
         evaluation_gap_entries = {},
         supported_claims = {}, maximal_supported_claims = {},
         support_entries = {}, support_relations = {},
         asserted_claim_supported = false,
         boundary_ceiling = unavailable,
         boundary_grounding = unavailable,
         target = unavailable, asserted_claim = unavailable,
         recorder_relations = unavailable,
         counter_evidence = unavailable,
         inherited_limitations = unavailable,
         evaluation_context = unavailable,
         evaluation_scope = unavailable
]]></sourcecode>
        <t><tt>valid_PROV_finding</tt> requires the exact PROV conditions in <xref target="supported-claims"/>. <tt>valid_IV_finding</tt> requires the exact IV conditions there, including supported independence validation. <tt>counter_blocks</tt> applies the per-entry predicate in <xref target="verdict"/>. <tt>applicable_counter_entries</tt> returns only entries whose affected claims include the asserted claim or <tt>all-admissible-claims</tt> and whose status blocks that claim under the same predicate; it preserves per-entry scope. For every such entry, all registered substantive tokens in <tt>c.reasons</tt> are added to <tt>substantive_reasons</tt>; those tokens do not independently alter <tt>counter_blocks</tt> or the verdict. The first diagnostic loop processes only the finding and boundary rows of the claim-required diagnostic matrix in <xref target="reasons"/>. The three counter-status rows are processed only by the subsequent counter-entry loop, which retains each entry's exact affected claims. The matrix is exhaustive: Core emits no other status-derived substantive token or Core gap entry. Profile gap entries are already validated by the cross-field check and are copied exactly only under the affected-claim predicate shown above. A composition profile remaps inherited premise gaps to affected exact chain claims before invoking Core; there is no unscoped inheritance exception.</t>
        <t>Every Core-derived finding gap entry has the row's token, the input target and evaluation-context identifier, <tt>affected_claims={input.asserted_claim}</tt>, and the basis-reference and limitation sets of the aggregate that made the row true. If the row concerns an absent aggregate, those two sets are empty. A counter-derived gap entry instead retains that counter entry's exact affected claims, basis references, and limitations. Two equal gap entries collapse under the logical equality in <xref target="logical-values"/>; entries that differ in any component remain separate. Substantive reason tokens are a set, so simultaneous causes of the same token produce one token without suppressing any distinct token.</t>
        <t>This token projection is deliberately a compact diagnostic summary. It does not distinguish multiple causes of the same substantive token, such as different findings producing <tt>E_EVIDENCE_NOT_BOUND</tt>. Structured gap entries instead retain scope and basis references for inheritance and current-capability interpretation. Per-cause explanation of a substantive token requires the corresponding normalized input and profile evidence to be retained and made available under the applicable policy; the Core result alone does not guarantee that availability. This revision defines no <tt>substantive_reason_entries</tt> component. Adding one requires an explicitly versioned result contract rather than silently changing the twenty-component result.</t>
        <t>All twenty result components are present even in the fixed rejection projection. The logical value <tt>unavailable</tt> is distinct from an omitted component; its encoding is defined by a result carrier. Set and token ordering in a serialized result is defined by the result carrier. The logical sets produced by Core are order-independent. Given identical normalized input, a conforming implementation <bcp14>MUST</bcp14> produce identical values for every required logical result component, including support and gap entries, verdict, reasons, counter-evidence entries, and inherited limitations.</t>
      </section>

      <section anchor="appraisal-result">
        <name>Required Appraisal Result</name>
        <sourcecode type="text"><![CDATA[
Appraisal = {
  semantics_version,
  verdict,
  fatal_reasons[],
  target,
  asserted_claim,
  asserted_claim_supported,
  support_entries[],
  supported_claims,
  maximal_supported_claims,
  support_relations,
  boundary_ceiling,
  boundary_grounding,
  recorder_relations[],
  substantive_reasons[],
  evaluation_gaps[],
  evaluation_gap_entries[],
  counter_evidence[],
  inherited_limitations[],
  evaluation_context,
  evaluation_scope
}
]]></sourcecode>
        <t>Every component shown above is <bcp14>REQUIRED</bcp14>; arrays and sets are empty when they have no members. <tt>fatal_reasons</tt> is non-empty if and only if the verdict is <tt>reject</tt>. Each support entry contains <tt>claim</tt>, <tt>basis_refs[]</tt>, and <tt>limitations[]</tt>. Each support relation contains <tt>supported_claim</tt> and <tt>relation</tt>. Each evaluation-gap entry contains <tt>token</tt>, target and context scope, affected claims, basis references, limitations, and the optional <tt>current_scope_capability</tt> supplied on a profile gap; <tt>evaluation_gaps</tt> is its set-valued token projection. <tt>counter_evidence</tt> preserves every status, affected-claim set, basis-reference set, reason set, and limitation set from the normalized input without cross-claim status or reason collapse. There is no normative singular <tt>verified_state</tt>. A presentation profile can select a display state, but that projection <bcp14>MUST NOT</bcp14> replace the supported claim set.</t>
        <t>For an <tt>accept</tt> or <tt>downgrade</tt> result, <tt>boundary_ceiling</tt> is the accepted ceiling only when the boundary finding, its target binding, target, and context all pass; otherwise it is <tt>unavailable</tt>. <tt>boundary_grounding</tt> preserves the input grounding even when the boundary is unsupported.</t>
        <t>A <tt>reject</tt> result uses the fixed projection in <xref target="algorithm"/>. Its <tt>semantics_version</tt> identifies this result contract; all input-derived appraisal components are <tt>unavailable</tt>, and all derived support, relation, substantive-reason, and gap sets are empty. Carrier or profile diagnostics can be reported alongside the Core result, but <bcp14>MUST NOT</bcp14> be inserted as a partial appraisal. This fixed projection prevents two implementations from exposing different subsets of an input that Core rejected.</t>
      </section>

      <section anchor="reasons">
        <name>Substantive Reasons and Evaluation Gaps</name>
        <t>Substantive reasons describe why evidence does not support the asserted claim. Evaluation gaps describe assessments that were not performed. The two categories <bcp14>MUST</bcp14> remain distinguishable.</t>
        <t>The ordered rejection checks and supplied-fatal meanings are defined in <xref target="input-validity"/>. They run before this section. A safely interpreted artifact whose evaluated semantics merely do not bind or cover the asserted target or base uses a correctly scoped non-passing aggregate and <tt>E_EVIDENCE_NOT_BOUND</tt> or <tt>E_EVIDENCE_COVERAGE_MISMATCH</tt>; it remains non-fatal. A profile <bcp14>MUST NOT</bcp14> turn ordinary lack of exact support into a fatal error.</t>
        <t>The following claim-required matrix is exhaustive for Core-derived non-fatal diagnostics. After the rejection checks, every applicable row is evaluated independently exactly once: finding and boundary rows use the first diagnostic loop, while the three counter-status rows use only the counter-entry loop in <xref target="algorithm"/>. An absent aggregate triggers only its absence row; status rows require that aggregate to be present. A present non-passing aggregate <bcp14>MUST NOT</bcp14> be reported as missing evidence merely because it contributes no supported claim. No catch-all fallback adds <tt>E_MISSING_REQUIRED_EVIDENCE</tt> or <tt>E_EXACT_CLAIM_NOT_SUPPORTED</tt> beyond their stated row predicates. A boundary-exceeded row requires a usable boundary and a present asserted-base aggregate whose base is deeper than the ceiling. Consequently a present supported base excluded by the ceiling produces <tt>E_BASE_EXCEEDS_BOUNDARY</tt>, not <tt>E_MISSING_REQUIRED_EVIDENCE</tt>. All simultaneously applicable distinct tokens are emitted. No condition outside this matrix creates a Core-derived non-fatal token.</t>
        <dl newline="false" spacing="compact">
          <dt><tt>E_BOUNDARY_NOT_SUPPORTED</tt> (substantive)</dt>
          <dd>Boundary <tt>status = unsupported</tt>; source: boundary finding.</dd>
          <dt><tt>E_BOUNDARY_NOT_EVALUATED</tt> (gap)</dt>
          <dd>Boundary <tt>status = not-evaluated</tt>; source: boundary finding.</dd>
          <dt><tt>E_EVIDENCE_NOT_BOUND</tt> (substantive)</dt>
          <dd>Boundary <tt>target_binding = unsupported</tt>; source: boundary finding.</dd>
          <dt><tt>E_BOUNDARY_NOT_EVALUATED</tt> (gap)</dt>
          <dd>Boundary <tt>target_binding = not-evaluated</tt>; source: boundary finding.</dd>
          <dt><tt>E_BASE_EXCEEDS_BOUNDARY</tt> (substantive)</dt>
          <dd>Usable boundary with asserted base deeper than its ceiling; sources: boundary and asserted-base findings.</dd>
          <dt><tt>E_MISSING_REQUIRED_EVIDENCE</tt> (substantive)</dt>
          <dd>Asserted-base aggregate absent; source: none.</dd>
          <dt><tt>E_EVIDENCE_NOT_BOUND</tt> (substantive)</dt>
          <dd>Asserted-base <tt>target_binding = unsupported</tt>; source: asserted-base finding.</dd>
          <dt><tt>E_BASE_NOT_EVALUATED</tt> (gap)</dt>
          <dd>Asserted-base <tt>target_binding = not-evaluated</tt>; source: asserted-base finding.</dd>
          <dt><tt>E_EXACT_CLAIM_NOT_SUPPORTED</tt> (substantive)</dt>
          <dd>Asserted-base <tt>semantic_validation = unsupported</tt>; source: asserted-base finding.</dd>
          <dt><tt>E_BASE_NOT_EVALUATED</tt> (gap)</dt>
          <dd>Asserted-base <tt>semantic_validation = not-evaluated</tt>; source: asserted-base finding.</dd>
          <dt><tt>E_MISSING_REQUIRED_EVIDENCE</tt> (substantive)</dt>
          <dd>Asserted PROV aggregate absent; source: none.</dd>
          <dt><tt>E_EVIDENCE_NOT_BOUND</tt> (substantive)</dt>
          <dd>Asserted PROV <tt>target_binding = unsupported</tt>; source: PROV finding.</dd>
          <dt><tt>E_PROV_NOT_EVALUATED</tt> (gap)</dt>
          <dd>Asserted PROV target-binding or semantic assessment <tt>not-evaluated</tt>; source: PROV finding.</dd>
          <dt><tt>E_PROV_NOT_SUPPORTED</tt> (substantive)</dt>
          <dd>Asserted PROV <tt>semantic_validation = unsupported</tt>; source: PROV finding.</dd>
          <dt><tt>E_MISSING_REQUIRED_EVIDENCE</tt> (substantive)</dt>
          <dd>Asserted IV aggregate absent; source: none.</dd>
          <dt><tt>E_EVIDENCE_NOT_BOUND</tt> (substantive)</dt>
          <dd>Asserted IV <tt>target_binding = unsupported</tt>; source: IV finding.</dd>
          <dt><tt>E_IV_NOT_EVALUATED</tt> (gap)</dt>
          <dd>Asserted IV target-binding, semantic, or independence assessment <tt>not-evaluated</tt>; source: IV finding.</dd>
          <dt><tt>E_IV_NOT_SUPPORTED</tt> (substantive)</dt>
          <dd>Asserted IV <tt>semantic_validation = unsupported</tt>; source: IV finding.</dd>
          <dt><tt>E_INDEPENDENCE_NOT_ESTABLISHED</tt> (substantive)</dt>
          <dd>Asserted IV <tt>independence_validation = unsupported</tt>; source: IV finding.</dd>
          <dt><tt>E_COUNTER_EVIDENCE_NOT_EVALUATED</tt> (gap)</dt>
          <dd>Applicable counter entry <tt>status = not-evaluated</tt>; source: that counter entry.</dd>
          <dt><tt>E_COUNTER_EVIDENCE_UNRESOLVED</tt> (substantive)</dt>
          <dd>Applicable counter entry <tt>status = unresolved-material</tt>; source: that counter entry.</dd>
          <dt><tt>E_COUNTER_EVIDENCE_DEFEATING</tt> (substantive)</dt>
          <dd>Applicable counter entry <tt>status = defeating</tt>; source: that counter entry.</dd>
        </dl>
        <t>For every blocking counter-evidence entry applicable to the asserted claim, the appraiser <bcp14>MUST</bcp14> add every token in that entry's <tt>reasons</tt> set to <tt>substantive_reasons</tt>, in addition to the Core token determined by the entry status. Reasons on entries that do not affect the asserted claim do not enter that projection but remain preserved in the result entry.</t>
        <t>A profile can add more specific registered tokens. It <bcp14>MUST NOT</bcp14> suppress a Core-required token. A finding reason is projected only from the boundary when it determines the asserted claim or a reported support entry, from an asserted-base or asserted-qualifier finding, or from a finding that is an exact premise of a reported support entry. <tt>E_EVIDENCE_COVERAGE_MISMATCH</tt>, <tt>E_CHAIN_UNBOUND</tt>, <tt>E_COMPOSITION_WARRANT_MISSING</tt>, and <tt>E_SHARED_VERIFICATION_ROOT</tt> use this profile-reason path on a correctly scoped exact-role aggregate. Profile-supplied gap entries, including <tt>E_COMPOSITION_NOT_EVALUATED</tt>, are included only when their affected claims contain the asserted claim, a member of <tt>SupportedClaims</tt>, or <tt>all-admissible-claims</tt>. A supplied profile gap does not by itself block acceptance. A composition profile remaps inherited premise diagnostics to affected exact chain claims before Core invocation; unrelated diagnostics do not change the logical reason or gap set. For counter-evidence entry reasons, the stricter blocking-and-asserted-claim projection rule in the preceding paragraph applies.</t>
      </section>
    </section>

    <section anchor="composition">
      <name>Composition</name>
      <t>Composition-profile mapping and Core appraisal are separate conformance surfaces. Core consumes only an ordinary normalized input for the exact chain target; it does not consume raw segments, adjacency records, or warrants and does not infer a chain finding. A Core appraiser can implement the complete Core procedure without implementing a composition profile. An implementation that separately claims composition-profile conformance identifies the immutable composition-profile revision and satisfies the additional mapping obligations in this section.</t>
      <t>A chain claim <bcp14>MUST NOT</bcp14> be derived by numeric minimum, by a display label, or by a meet of segment states alone. A composition profile <bcp14>MUST</bcp14> identify:</t>
      <ul>
        <li><t>the exact chain target;</t></li>
        <li><t>the exact segment claims used as premises;</t></li>
        <li><t>the validated adjacency bindings;</t></li>
        <li><t>the composition warrant mapping those premises to the chain claim;</t></li>
        <li><t>the evaluation context shared by the premises; and</t></li>
        <li><t>the independence of the independent-verification roots relied on by the
        premises.</t></li>
      </ul>
      <t>The identified composition-profile revision defines the logical types and predicates for premises, adjacency bindings, warrants, their exact identity, and their target and context equality. The profile evaluates those values and emits ordinary normalized base and qualifier findings for the exact chain target. The ordinary Core algorithm then appraises those findings; composition is not a second Core appraisal algorithm.</t>
      <t>A chain base finding is supported only if every named premise is exactly supported and every required binding and warrant evaluates to supported under that immutable profile. An absent or unsupported required adjacency binding produces no positive chain finding; the profile places substantive <tt>E_CHAIN_UNBOUND</tt> on the correctly scoped non-passing chain-role aggregate. It does the same with <tt>E_COMPOSITION_WARRANT_MISSING</tt> for an absent or unsupported warrant.
      Where two premises rely on the same independent-verification root, that root is not
      independent for the purposes of this warrant, and the profile places substantive
      <tt>E_SHARED_VERIFICATION_ROOT</tt> on the correctly scoped non-passing chain-role
      aggregate. Correctness of the composition operator is not itself a warrant; the
      warrant consists of the binding, the coverage of the inter-segment link, and the
      independence of the verification roots. A required assessment that was not performed is represented by a structured <tt>E_COMPOSITION_NOT_EVALUATED</tt> profile-gap entry affecting the exact chain claim. These are safely interpretable support failures and lead to <tt>downgrade</tt> when the chain claim is not otherwise supported. If a malformed or internally contradictory chain description still permits a structurally usable Core input, the profile supplies fatal <tt>E_CHAIN_DESCRIPTION_INVALID</tt>; otherwise the upstream failure produces no Core appraisal under <xref target="input-validity"/>. Individual segment appraisals are unaffected.</t>
      <t>For this warrant, an independent-verification root is the profile-identified evidentiary source or control dependency whose independence is relied on. It is not merely a public authentication trust anchor. Two premises that repeat one verifier's assessment share an evidentiary root even if they carry different signatures. Conversely, two separately produced assessments do not share an evidentiary root merely because their records authenticate through the same public certification authority; the profile still evaluates their actual observation and control dependencies. A common authentication anchor alone neither establishes nor refutes the independence required by the warrant.</t>
      <t>For the chain-base warrant described above, an assessed absence or failure of required adjacency, of the warrant, or of the required verification-root independence sets <tt>semantic_validation = unsupported</tt> on the exact chain-base aggregate and adds the corresponding reason from the preceding paragraphs. The aggregate's <tt>target_binding</tt> retains the independently assessed binding of the evidence to the exact chain target. A failed inter-segment adjacency is a failed premise of the chain warrant; it is not by itself a failed association with that target. Thus <tt>E_CHAIN_UNBOUND</tt> does not by itself set <tt>target_binding = unsupported</tt>. If exact-target binding also fails, that field is independently <tt>unsupported</tt>. All applicable matrix diagnostics in <xref target="reasons"/> are then emitted: for example, an otherwise supported asserted chain base with failed adjacency produces both <tt>E_CHAIN_UNBOUND</tt> and <tt>E_EXACT_CLAIM_NOT_SUPPORTED</tt>; it adds <tt>E_EVIDENCE_NOT_BOUND</tt> only when the separate exact-target-binding predicate fails.</t>
      <t>For a separately evaluated chain qualifier, the immutable composition profile identifies the exact affected qualifier role and the predicate-to-field mapping. An assessed failure of that qualifier's semantic warrant sets its <tt>semantic_validation</tt> to <tt>unsupported</tt>; an assessed failure of IV independence sets the IV aggregate's <tt>independence_validation</tt> to <tt>unsupported</tt>. Other fields retain their actual assessment results. An unperformed assessment sets its governed field to <tt>not-evaluated</tt>, with consistent evaluation scope and the applicable structured composition gap. Multiple failed or unperformed predicates retain all their field values, reasons, and applicable gaps. These are obligations of the composition profile; Core does not infer or rewrite a field from a supplied reason token. A qualifier failure does not change an independently supported chain base unless that failed predicate is also required by the base's own warrant.</t>
      <t>An inherited PROV qualifier requires exact PROV support for every required segment plus provenance coverage of every required inter-segment binding. An inherited IV qualifier requires exact IV support at the relevant base for every required segment, covered chain bindings, and a passing chain independence assessment. Alternatively, a profile can establish a new chain-level PROV or IV qualifier from a separate exact chain-level finding and explicit warrant; that finding is evaluated by the ordinary qualifier rules and cannot be inferred from segment depth alone.</t>
      <t>A composed input <bcp14>MUST</bcp14> inherit the set union of recorder relations and of unresolved limitations, freshness and revocation limits, coverage limits, and trust-context restrictions of its premises unless a named warrant explicitly resolves a specific item. Applicable upstream evaluation gaps are remapped to the exact chain target and affected chain claims and carried as structured <tt>profile_evaluation_gaps</tt> entries with their original basis references and limitations. A warrant that resolves a gap names the exact entry and records the resolving basis; it cannot silently delete all gaps of the same token.</t>
      <t>Counter-evidence entries from all premises and chain-level findings are retained separately. Entries can be coalesced only when status and affected-claim set are identical; their basis references, reasons, and limitations are then set-unioned. Statuses, affected-claim sets, or reason sets across different scopes <bcp14>MUST NOT</bcp14> be collapsed or promoted by precedence. If any evaluator cannot narrow affected claims safely, that entry uses <tt>all-admissible-claims</tt>. The composed set contains one <tt>not-supplied</tt> entry only when every premise and chain-level input reports <tt>not-supplied</tt>; otherwise all such sentinel entries are omitted.</t>
      <t>A chain claim and a terminal-action claim are distinct. Support for a chain does not establish completion, terminal effect, or goal satisfaction. A terminal-action claim uses the terminal segment's exact support plus a validated binding to the selected terminal action.</t>
      <t>The Core conformance evidence in <xref target="conformance"/> covers only the appraisal of normalized composition outputs unless a separate composition-profile claim is declared. The C11 and C12 fixtures in <xref target="vectors"/> assume that an identified external composition profile has already emitted the stated ordinary finding. They test Core support construction and limitation carry-through, not premise discovery, adjacency validation, warrant evaluation, or composition-profile conformance.</t>
    </section>

    <section anchor="non-inference">
      <name>Non-Inference and Coverage Rules</name>
      <t>The limits in this section are an application of an invariant this protocol
      inherits rather than states. Quoting Witnessability Conceptual Core 1.0 <xref target="WCC-CORE"/>, Section 4, W-I7:
      "No transition, inference, transformation, aggregation, or composition may increase
      the Support Envelope without an explicit warrant and any additional premises or
      basis required by that warrant." Every downstream result inherits the relevant
      limitations of upstream materials and arguments unless those limitations are
      explicitly resolved. This document does not introduce that invariant and claims no novelty for it. The scoped operational requirements below apply it to the objects defined here.
      The composition warrant of <xref target="composition"/> is this document's
      operational form of the warrant named in the quoted invariant.</t>
      <t>The corresponding rule of this document is stated over claim strength: no
      transition, inference, transformation, aggregation, or composition may increase the
      strength of a supported claim without an explicit warrant and the premises that
      warrant requires. This document inherits the quoted invariant by intent and not by
      identity of objects; <tt>Support Envelope</tt> is not defined here, and remains the
      object of <xref target="WCC-CORE"/>.</t>
      <t>This application includes the invariant's Preserved Incomparability clause.
      It does not presume a total order over typed states; a profile that projects
      them into one supplies the justification for that projection. A single maximum
      among supported states is not guaranteed, and monotonicity is not presumed.</t>
      <t>This correspondence has two limits. It does not change the Boundary Ceiling
      rule in <xref target="boundary-ceiling"/> or provide an additional proof of that
      rule. It also does not combine the separate prohibition on raising a captured
      content base through verification with the warrant requirement above.</t>
      <t>The following limits are normative:</t>
      <ul>
        <li><t>observation does not imply intent, invocation, or execution;</t></li>
        <li><t>intent does not imply authority, authorization validity, invocation, or execution;</t></li>
        <li><t>invocation does not imply execution, completion, or effect;</t></li>
        <li><t>execution does not imply completion of a larger process, durable external effect, goal satisfaction, correctness, safety, or policy compliance;</t></li>
        <li><t>a provenance artifact by itself does not establish runtime occurrence; a PROV-qualified WEXP claim presupposes separately established exact execution support, and IV does not imply PROV;</t></li>
        <li><t>a signature authenticates bytes under a key; it does not establish content truth or boundary control;</t></li>
        <li><t>a transparency receipt supports only the exact predicate established by its verification under the applicable profile; a promise of inclusion is not proof of inclusion, and neither by itself establishes continuing custody, PROV, IV, or execution;</t></li>
        <li><t>presence of records does not establish completeness of coverage;</t></li>
        <li><t>absence of a record does not establish nonoccurrence;</t></li>
        <li><t>a sole <tt>counter_evidence</tt> entry with <tt>status = not-supplied</tt> does not establish absence of counter-evidence; and</t></li>
        <li><t>aggregation and transformation do not remove upstream limitations unless an explicit warrant resolves them.</t></li>
      </ul>
    </section>

    <section anchor="cross-carrier">
      <name>Cross-Carrier Equivalence</name>
      <t>Two carrier inputs are Core-equivalent when, under the same semantics version and evaluation context, they normalize under <xref target="logical-values"/> to equal algorithm-relevant targets, asserted claims, finding statuses, scopes, and reason sets, boundary ceilings and grounding, recorder relations, basis references, profile-gap entries, evaluation scope, limitations, and fatal conditions. Counter-evidence equivalence includes every entry's status, affected claims, reasons, basis references, and limitations. Applied profile identifiers and their immutable revisions are part of that equality.</t>
      <t>A conforming Core appraiser <bcp14>MUST</bcp14> return the same complete logical appraisal for Core-equivalent inputs. Carrier-specific parse, authentication, and transport metadata can differ without affecting Core equivalence only when they do not change a normalized component. Inputs that differ only in opaque basis-reference identifiers are not completely Core-equivalent; when all other normalized components are equal, their appraisals <bcp14>MUST</bcp14> nevertheless be identical except for those carried basis references and any carrier metadata that the result profile explicitly preserves.</t>
    </section>

    <section anchor="conformance">
      <name>Core Conformance and Evaluation Scope</name>
      <t>A full Core-appraiser conformance claim is binary only for an exact declared revision and scope. The claim record identifies the Core document name and immutable source digest, <tt>semantics_version</tt>, reviewed Requirements Registry identifier and digest, required vector-package identifier and manifest digest, implementation and runner revisions, and the complete requirement and vector identifier sets in scope. These identities let a recipient check whether the evidence concerns the declared source and package bytes; they do not by themselves establish that the run occurred or prevent a misleading presentation.</t>
      <t>A <em>Requirements Registry</em> in this section is a versioned conformance artifact supplied by the claimant, not an IANA registry or an unstated external document. It enumerates the normative Core-appraiser obligations for the exact source revision, including obligations not expressed with BCP 14 keywords. Each entry has a unique requirement identifier, an exact source locator, the obligation and its applicability, and a documented review disposition. The artifact identifies its reviewer, review date, and included and omitted scope. A claim of full conformance requires a reviewed complete inventory for that surface; mechanical keyword extraction alone does not establish completeness.</t>
      <t>A <em>vector package</em> is an executable representation of the normative logical fixtures in <xref target="vectors"/> together with any additional vectors declared in the conformance scope. Its manifest identifies the exact Core source revision, every vector and its input and complete expected logical appraisal, the fixture-profile revision, encoding and comparison rules, and the harness revision. It binds the package files by their names and digests. The expected appraisals are fixed independently of the implementation outputs before the comparison run. A package cannot replace or contradict the logical expectations in this document.</t>
      <t>The conformance record <bcp14>MUST</bcp14> provide immutable identifiers and retrieval locations for the reviewed Requirements Registry and vector-package manifest, together with the digest algorithms, the exact bytes hashed, and their digests. The claimant <bcp14>MUST</bcp14> make those bound artifacts retrievable by the recipient to check the claimed scope. These artifacts and their publication or access arrangements are supplied with the claim; no private project registry or unavailable package is an implicit normative dependency of this specification.</t>
      <t>For that exact scope, <tt>PASS</tt> means that the implementation satisfies every bound reviewed requirement, every required frozen vector was parsed under its identified non-normative harness, every complete logical appraisal equaled the independently frozen expected appraisal, and the execution recorded zero mismatch, not-run, and blocked cases. The normative authority remains this specification and its reviewed requirements; vector comparison is evidence, not the source of an expectation.</t>
      <t>A full conformance record enumerates all reviewed Core-appraiser requirements and all required vectors for the identified revision. An implementation that supports a smaller surface lists the exact included and omitted requirement and vector identifiers and labels the result <tt>PARTIAL</tt>; it does not claim full Core conformance. Mapping-profile conformance, composition-profile conformance, carrier conformance, and result-carrier conformance are separate claims with separate immutable profile identities. A Core-appraiser record does not establish that raw evidence was correctly authenticated, interpreted, or normalized by an untested upstream profile.</t>
      <t><tt>PASS</tt> is not certification, proof of correctness or completeness, proof of security, evidence of interoperability with an untested implementation or carrier, IETF acceptance, or authority to make policy decisions. No conformance record changes the specification-to-requirements-to-vectors-to-implementation authority direction.</t>
      <t><tt>evaluation_scope</tt> is an unordered map from capability names to exactly one of <tt>evaluated</tt> or <tt>not-evaluated</tt>. The following initial names are closed for <tt>wexp-core-2</tt>:</t>
      <ul>
        <li><t><tt>carrier-mapping</tt>;</t></li>
        <li><t><tt>authenticity</tt>;</t></li>
        <li><t><tt>target-binding</tt>;</t></li>
        <li><t><tt>boundary-grounding</tt>;</t></li>
        <li><t><tt>observation-support</tt>;</t></li>
        <li><t><tt>intent-support</tt>;</t></li>
        <li><t><tt>invocation-support</tt>;</t></li>
        <li><t><tt>execution-support</tt>;</t></li>
        <li><t><tt>provenance-support</tt>;</t></li>
        <li><t><tt>independent-verification</tt>;</t></li>
        <li><t><tt>composition</tt>; and</t></li>
        <li><t><tt>counter-evidence</tt>.</t></li>
      </ul>
      <t>Every initial name <bcp14>MUST</bcp14> appear exactly once. An extension key is the logical pair <tt>(profile_identifier, local_name)</tt> of two non-empty text atoms, where the immutable applied profile identifier occurs in <tt>evaluation_context.profile_identifiers</tt> and <tt>local_name</tt> names an extension in that revision. The pair is its identity. Core ignores an extension status for support and gap derivation but preserves the exact pair and status in the result. A malformed pair or a missing, empty, or non-text atom produces <tt>E_MALFORMED_NORMALIZED_INPUT</tt> at the structural check in <xref target="input-validity"/>. For a structurally valid key, an unbound or ambiguous profile or local-name binding, or a duplicate key in the scope map, produces <tt>E_PROFILE_MAPPING_INVALID</tt> at the following cross-field check.</t>
      <t>The scope map summarizes assessments represented by the normalized input under the applied profiles and evaluation context. Discovery refers only to the material domain declared by those profiles and that context; it does not establish complete capture or discovery in the world. <tt>carrier-mapping</tt> is <tt>evaluated</tt> for every complete Core input. A structurally valid input with <tt>carrier-mapping = not-evaluated</tt> violates this cross-field invariant and produces <tt>E_PROFILE_MAPPING_INVALID</tt>. Retaining this capability in the uniform scope map makes the completed normalization prerequisite explicit to a result consumer. It is not a claim that Core parsed or authenticated a carrier. Failure to complete that upstream prerequisite produces no Core input or appraisal under <xref target="architecture"/>, rather than a Core result with this capability unperformed.</t>
      <t>For finding-backed capabilities, <tt>evaluated</tt> means discovery of applicable material in that declared domain completed and every supplied assessment governed by the capability has a status other than <tt>not-evaluated</tt>. Absence of an aggregate under that value means the discovery found no candidate for that role. <tt>not-evaluated</tt> records an applicable unperformed assessment or an unexercised role. If the asserted claim requires an unevaluated base or qualifier role, its exact aggregate is present; a base or PROV aggregate has a governed <tt>not-evaluated</tt> field. The shared-role rule below determines which IV or binding assessments were not performed.</t>
      <t>For <tt>counter-evidence</tt>, <tt>evaluated</tt> means the current capability-level procedure completed its assessment of the supplied entry set under the declared profile domain, including recording any entry it could not resolve. <tt>not-evaluated</tt> means that procedure was not completed. Neither value asserts discovery of all counter-evidence. Individual entries retain their own assessment statuses, including previously assessed entries preserved when the current procedure is not completed. An <tt>evaluated</tt> capability can therefore contain a <tt>not-evaluated</tt> entry. Core <bcp14>MUST NOT</bcp14> replace an entry status with the capability value. The capability value alone <bcp14>MUST NOT</bcp14> create an ingress rejection, substantive finding, or evaluation gap for counter-evidence. The entry's status and affected claims govern its effect under <xref target="reasons"/>.</t>
      <t>For each base-support capability and for <tt>provenance-support</tt>, if the corresponding aggregate is present and the capability is <tt>not-evaluated</tt>, at least one governed status field in that aggregate <bcp14>MUST</bcp14> be <tt>not-evaluated</tt>, independently of whether the role is asserted. A present wholly assessed single-role aggregate paired with <tt>not-evaluated</tt> violates the cross-field contract and produces <tt>E_PROFILE_MAPPING_INVALID</tt>. An absent unasserted aggregate can represent an unexercised capability without creating a claim-specific gap.</t>
      <t><tt>target-binding</tt> and <tt>independent-verification</tt> are shared across exact roles. Their <tt>not-evaluated</tt> summary does not replace a passing assessment for a different exact role. An unexercised or unperformed unrelated role can be unrepresented, as in C12; a supplied aggregate retains each actual assessment status. A claim-required IV aggregate is present when the shared IV capability is <tt>not-evaluated</tt>, but its passing statuses need not be changed merely because another role was not assessed. Claim-specific gaps are derived from the exact required aggregate, not from the shared summary alone.</t>
      <t>The external <tt>authenticity</tt> and <tt>composition</tt> capabilities use a fully syntactic rule: their scope value is <tt>not-evaluated</tt> if and only if at least one profile-gap entry names that capability in <tt>current_scope_capability</tt>, and is <tt>evaluated</tt> if and only if no entry names it. A marked entry can affect any exact admissible claim; its projection into the result remains governed separately by the affected-claim rule. Core does not decide from profile-defined trust data whether an external assessment was required.</t>
      <t>The governed status fields are: every finding's <tt>target_binding</tt> for <tt>target-binding</tt>; boundary status, binding, and grounding for <tt>boundary-grounding</tt>; the corresponding base aggregate's binding and semantic status for each base-support capability; PROV binding and semantic status for <tt>provenance-support</tt>; IV binding, semantic, and independence status for <tt>independent-verification</tt>. Counter-entry statuses are excluded from this governed-field test and follow the separate counter-evidence rule above. A scope value of <tt>evaluated</tt> with a governed <tt>not-evaluated</tt> status, a claim-required finding-backed <tt>not-evaluated</tt> capability without its aggregate, a current-scope marker whose capability is not <tt>not-evaluated</tt>, or an external capability value without the required marker presence or absence violates the cross-field contract and produces <tt>E_PROFILE_MAPPING_INVALID</tt>.</t>
      <t>A <tt>profile_evaluation_gaps</tt> entry without <tt>current_scope_capability</tt> can preserve a gap from an upstream or composed premise under its own exact scope. Its presence does not change the current appraiser's capability status. Core determines current-scope consistency only from the explicit optional field and never interprets opaque basis references for that purpose.</t>
      <t>An evaluation capability <bcp14>MUST NOT</bcp14> be used as evidence and <bcp14>MUST NOT</bcp14> create or structurally cap a claim. A role-specific Core gap entry is emitted only by the claim-required matrix when its aggregate is required by the asserted claim. A valid profile-gap entry is projected under its affected-claim rule. Otherwise the scope map alone records the unexercised capability and does not become a reason, gap, or substantive finding.</t>
      <t>Re-appraisal under a different evaluation context produces a new scoped result. It does not automatically invalidate a historical appraisal or establish that the historical result applies in the new context.</t>
    </section>

    <section anchor="vectors">
      <name>Normative Semantic Test Vectors</name>
      <t>C01 through C16 are normative logical cases, not a wire format. A conformance record binds an executable representation through an exact manifest that identifies the source revision, reviewed requirement and case identifiers, non-normative harness schema, fixture bytes, and frozen expected logical appraisals. The representation and comparison procedure do not add a Core serialization requirement. A representation passes a case only when its complete decoded logical input and complete observed appraisal equal the normative input and expectation stated here.</t>
      <t>The logical fixtures below are normative. Common input values are: <tt>semantics_version=wexp-core-2</tt>; target <tt>T</tt>; evaluation-context identifier <tt>C</tt>; evaluation time <tt>2026-10-12T00:00:00Z</tt>; trust-configuration atom <tt>core02-fixture-trust-1</tt>, which accepts attributed boundary grounding; the singleton applied-profile set containing the immutable fixture identity defined below; a supported, target-bound, attributed boundary finding for <tt>T</tt> and <tt>C</tt> with basis <tt>bd</tt> and the stated ceiling; empty recorder relations, profile evaluation gaps, inherited limitations, and fatal conditions; counter-evidence consisting of one entry whose status is <tt>not-supplied</tt> and whose affected-claim, basis-reference, reason, and limitation sets are empty; and every initial evaluation-scope capability set to <tt>evaluated</tt>. Every supported base or qualifier finding has target <tt>T</tt>, context <tt>C</tt>, supported target binding and semantic validation, empty reasons and limitations, and the exact basis-reference set defined below. Supported IV additionally has supported independence validation; PROV uses <tt>not-applicable</tt>. A finding not stated in a row is absent. For C09, the otherwise unstated boundary ceiling is execution; the fixed rejection projection makes this input field unavailable in the result.</t>
      <t>Unless a row explicitly states otherwise, the boundary finding has empty <tt>reasons</tt> and <tt>limitations</tt>. Each counter entry introduced by a row has empty <tt>basis_refs</tt>, <tt>reasons</tt>, and <tt>limitations</tt> except for values explicitly stated in that row. A row that introduces counter entries replaces the common <tt>not-supplied</tt> entry. Profile-gap entries have no <tt>current_scope_capability</tt> unless explicitly stated. In C12, the composed execution finding carries <tt>L-boundary</tt> inherited from the stated premise.</t>
      <t>Unless a row explicitly overrides its basis-reference set, each base finding has a singleton basis-reference set whose local name is <tt>O</tt> for observation, <tt>I</tt> for intent, <tt>N</tt> for invocation, and <tt>E</tt> for execution. The PROV(execution) finding uses <tt>P(E)</tt>. IV findings for observation, intent, invocation, and execution use <tt>V(O)</tt>, <tt>V(I)</tt>, <tt>V(N)</tt>, and <tt>V(E)</tt>, respectively. Each local name denotes the profile-scoped atom under the fixture profile defined below. These are exact basis-reference names, not aliases of the full base or qualifier names. C11 and C12 instead use their explicitly stated execution basis-reference set <tt>{s1,s2,adj,w}</tt>.</t>
      <t>The immutable fixture profile identity is the following exact text atom:</t>
      <artwork>draft-sergeev-wexp-core-02/fixture-1</artwork>
      <t>This local fixture identity is not an IANA registration or a network locator. This paragraph completely defines its revision: <tt>P_COUNTER_FAIL</tt> is registered in the <tt>substantive</tt> category, is applicable to C15's counter entry, and means that the fixture's assessment found the stated material counter-evidence unresolved. It adds no status, evidence, or independent acceptance condition. The profile defines no recorder-relation tokens or scope-extension names. Opaque fixture atoms compare by exact Unicode scalar text; a displayed basis reference or limitation denotes the ordered pair of this profile identity and its displayed local name. No URI, case, or Unicode normalization is implicit. A harness <bcp14>MUST NOT</bcp14> infer an applied profile solely from a token or basis reference. An executable representation pins these profile contents and its own encoding rules in its manifest.</t>
      <t>In the table, <tt>O</tt>, <tt>I</tt>, <tt>N</tt>, and <tt>E</tt> mean unqualified observation, intent, invocation, and execution. <tt>+P</tt> and <tt>+V</tt> mean PROV and IV. <tt>S</tt> is <tt>supported_claims</tt>, <tt>M</tt> is <tt>maximal_supported_claims</tt>, and <tt>A</tt> is <tt>asserted_claim_supported</tt>. For each member of <tt>S</tt>, <tt>support_entries</tt> contains exactly one entry whose basis-reference set is the union of <tt>bd</tt>, its base finding's basis references, and any qualifier findings' basis references; its limitations are the union of those premises. <tt>support_relations</tt> contains the displayed relation for each member of <tt>M</tt>. <tt>gaps={}</tt> also means <tt>evaluation_gap_entries={}</tt>. For <tt>accept</tt> and <tt>downgrade</tt> rows, fields not varied by a row equal the common input values and carry through to the output. A <tt>reject</tt> row instead uses the complete fixed projection in <xref target="algorithm"/>.</t>
      <table>
          <name>Normative Logical Appraisal Fixtures</name>
        <thead>
          <tr><th>ID</th><th>Input override</th><th>Complete varying output</th></tr>
        </thead>
        <tbody>
          <tr>
            <td>C01</td>
            <td>Assert <tt>I</tt>; intent finding supported; ceiling intent.</td>
            <td><tt>S=M={I}; A=true; relations={I:equal}; accept; fatal/reasons/gaps={}</tt>.</td>
          </tr>
          <tr>
            <td>C02</td>
            <td>Assert <tt>I</tt>; only execution finding supported; ceiling execution.</td>
            <td><tt>S=M={E}; A=false; relations={E:support-above-claim}; downgrade; reasons={E_MISSING_REQUIRED_EVIDENCE}; fatal/gaps={}</tt>.</td>
          </tr>
          <tr>
            <td>C03</td>
            <td>Assert <tt>E+V</tt>; execution and PROV findings supported; no IV finding; ceiling execution.</td>
            <td><tt>S={E,E+P}; M={E+P}; A=false; relations={E+P:incomparable}; downgrade; reasons={E_MISSING_REQUIRED_EVIDENCE}; fatal/gaps={}</tt>.</td>
          </tr>
          <tr>
            <td>C04</td>
            <td>Assert <tt>E+P</tt>; execution and IV(execution) findings supported; no PROV finding; ceiling execution.</td>
            <td><tt>S={E,E+V}; M={E+V}; A=false; relations={E+V:incomparable}; downgrade; reasons={E_MISSING_REQUIRED_EVIDENCE}; fatal/gaps={}</tt>.</td>
          </tr>
          <tr>
            <td>C05</td>
            <td>Assert <tt>N+V</tt>; invocation and IV(invocation) findings supported; ceiling invocation.</td>
            <td><tt>S={N,N+V}; M={N+V}; A=true; relations={N+V:equal}; accept; fatal/reasons/gaps={}</tt>.</td>
          </tr>
          <tr>
            <td>C06</td>
            <td>Assert <tt>E+V</tt>; invocation, IV(invocation), and execution findings supported; no IV(execution); ceiling execution.</td>
            <td><tt>S={N,N+V,E}; M={N+V,E}; A=false; relations={N+V:support-below-claim,E:support-below-claim}; downgrade; reasons={E_MISSING_REQUIRED_EVIDENCE}; fatal/gaps={}</tt>.</td>
          </tr>
          <tr>
            <td>C07</td>
            <td>Assert <tt>E</tt>; execution finding supported; ceiling invocation.</td>
            <td><tt>S=M={}; A=false; relations={}; downgrade; reasons={E_BASE_EXCEEDS_BOUNDARY}; fatal/gaps={}</tt>.</td>
          </tr>
          <tr>
            <td>C08</td>
            <td>Assert <tt>O</tt>; no base findings; ceiling observation.</td>
            <td><tt>S=M={}; A=false; relations={}; downgrade; reasons={E_MISSING_REQUIRED_EVIDENCE}; fatal/gaps={}</tt>.</td>
          </tr>
          <tr>
            <td>C09</td>
            <td>Assert inadmissible intent+PROV.</td>
            <td><tt>reject; semantics_version=wexp-core-2; fatal={E_CLAIM_OUT_OF_DOMAIN}; S=M={}; A=false; support entries/relations/reasons/gaps={}; target/asserted claim/boundary ceiling/boundary grounding/recorder relations/counter evidence/inherited limitations/evaluation context/evaluation scope=unavailable</tt>.</td>
          </tr>
          <tr>
            <td>C10</td>
            <td>Assert <tt>I</tt>; intent supported; ceiling intent; one counter-evidence entry has status <tt>unresolved-material</tt> affecting <tt>I</tt> and empty reasons.</td>
            <td><tt>S=M={I}; A=true; relations={I:equal}; downgrade; reasons={E_COUNTER_EVIDENCE_UNRESOLVED}; fatal/gaps={}</tt>.</td>
          </tr>
          <tr>
            <td>C11</td>
            <td>Target is chain <tt>T</tt>; assert <tt>E</tt>. Exact execution premises <tt>s1</tt> and <tt>s2</tt>, adjacency <tt>adj</tt>, and warrant <tt>w</tt> are supported; the composition profile emits an execution finding with basis references <tt>{s1,s2,adj,w}</tt>; ceiling execution.</td>
            <td><tt>S=M={E}; A=true; relations={E:equal}; accept; fatal/reasons/gaps={}</tt>. The execution support entry basis is <tt>{bd,s1,s2,adj,w}</tt>.</td>
          </tr>
          <tr>
            <td>C12</td>
            <td>Same as C11; boundary and a premise carry <tt>L-boundary</tt>; <tt>independent-verification=not-evaluated</tt>; no warrant resolves either.</td>
            <td><tt>S=M={E}; A=true; relations={E:equal}; accept; gaps={}; inherited_limitations={L-boundary}; fatal/reasons={}</tt>. The support entry also carries <tt>L-boundary</tt>. The unexercised IV capability remains visible in <tt>evaluation_scope</tt> but creates no claim-unrelated gap token.</td>
          </tr>
          <tr>
            <td>C13</td>
            <td>Assert <tt>E</tt>; execution supported; ceiling execution. A profile gap entry for target <tt>T</tt> and context <tt>C</tt> has token <tt>E_IV_NOT_EVALUATED</tt>, affects <tt>E</tt>, basis <tt>u1</tt>, and limitation <tt>L-upstream</tt>.</td>
            <td><tt>S=M={E}; A=true; relations={E:equal}; accept; gaps={E_IV_NOT_EVALUATED}; fatal/reasons={}; inherited_limitations={L-upstream}</tt>. <tt>evaluation_gap_entries</tt> contains exactly the supplied entry.</td>
          </tr>
          <tr>
            <td>C14</td>
            <td>Assert <tt>E</tt>; execution supported; ceiling execution. One counter entry is <tt>defeating</tt> for <tt>I</tt>; a separate entry is <tt>not-evaluated</tt> for <tt>E</tt>; both have empty reasons.</td>
            <td><tt>S=M={E}; A=true; relations={E:equal}; downgrade; reasons={}; gaps={E_COUNTER_EVIDENCE_NOT_EVALUATED}; fatal={}</tt>. The gap entry affects only <tt>E</tt>; both counter entries are preserved and no <tt>E_COUNTER_EVIDENCE_DEFEATING</tt> reason is emitted for <tt>E</tt>.</td>
          </tr>
          <tr>
            <td>C15</td>
            <td>Assert <tt>E</tt>; execution supported; ceiling execution. One counter entry has status <tt>unresolved-material</tt>, affects <tt>E</tt>, has reason <tt>P_COUNTER_FAIL</tt>, basis <tt>p1</tt>, and no limitations.</td>
            <td><tt>S=M={E}; A=true; relations={E:equal}; downgrade; reasons={E_COUNTER_EVIDENCE_UNRESOLVED, P_COUNTER_FAIL}; gaps={}; fatal={}</tt>. The copied counter entry retains its scoped reason.</td>
          </tr>
          <tr>
            <td>C16</td>
            <td>Assert <tt>E</tt>; execution supported; ceiling execution. A profile gap for target <tt>T</tt> and context <tt>C</tt> has token <tt>E_IV_NOT_EVALUATED</tt>, affects only <tt>N+V</tt>, basis <tt>u2</tt>, and limitation <tt>L-unrelated</tt>.</td>
            <td><tt>S=M={E}; A=true; relations={E:equal}; accept; fatal/reasons/gaps={}; inherited_limitations={}</tt>. The unrelated profile gap and its limitation are not projected.</td>
          </tr>
        </tbody>
      </table>
    </section>

    <section anchor="security">
      <name>Security Considerations</name>
      <t>WEXP limits inference; it does not make a dishonest or compromised witness honest. A false boundary assertion, malicious mapping profile, compromised signer, or colluding evidence evaluator can manufacture normalized findings unless the evaluation context independently constrains those actors.</t>
      <t><strong>Authenticity is not truth.</strong> A valid signature establishes that bytes verify under a key. Key-to-identity binding attributes the assertion. Neither establishes that the action occurred, that the signer controlled the claimed boundary, or that the signer was authorized.</t>
      <t><strong>Reference integrity is not semantic support.</strong> A digest can bind an appraisal input to artifact bytes. It does not establish the artifact's type, exact-action coverage, accepted root, or independence. Qualifier support requires the exact profile predicate in <xref target="normalized-input"/>.</t>
      <t><strong>Boundary grounding.</strong> A declared boundary can be false. An <tt>accept</tt> or <tt>downgrade</tt> appraisal preserves whether it was asserted, attributed, attested, or not evaluated. A <tt>reject</tt> appraisal instead uses the fixed projection in <xref target="algorithm"/>, with <tt>boundary_grounding = unavailable</tt>. Result carriers and presentation profiles preserve the reported grounding without promoting it to a stronger class. Relying parties <bcp14>MUST NOT</bcp14> erase this distinction.</t>
      <t><strong>Self-report.</strong> A self-report can support a report about what the actor asserted. It does not provide third-party non-repudiation merely because its content base is deep or its bytes are signed.</t>
      <t><strong>Independent verification.</strong> Independence is profile- and context-relative. Different keys or roots can remain under common administrative control, while a shared public root does not necessarily destroy operational independence. A passing IV finding needs an explicit assessment basis.</t>
      <t><strong>Counter-evidence.</strong> Unresolved material counter-evidence blocks acceptance. No supplied counter-evidence is not proof that none exists.</t>
      <t><strong>Coverage and nonoccurrence.</strong> A set of valid records can be incomplete. A missing record can reflect omission, capture failure, refusal to emit, loss, or an action that never occurred. WEXP Core does not distinguish those cases without positive profile-defined evidence.</t>
      <t><strong>Composition.</strong> Composition is a common inflation point. Exact premises, bindings, warrants, and limitation inheritance are required. A chain appraisal cannot be used as evidence for a terminal effect unless a separate predicate establishes that exact claim.</t>
      <t><strong>Evaluation context.</strong> Trust anchors, profile versions, policies, evaluation time, revocation state, and appraiser capabilities affect findings. An <tt>accept</tt> or <tt>downgrade</tt> appraisal carries the evaluation context so that the result is not detached from those dependencies. A <tt>reject</tt> appraisal instead uses the fixed projection in <xref target="algorithm"/>, with <tt>evaluation_context = unavailable</tt>. A result carrier can retain request provenance alongside a rejection, but that provenance is not the Core evaluation context and does not alter the fixed rejection projection.</t>
      <t><strong>Privacy.</strong> Even opaque targets, basis references, reason codes, and timing information can enable correlation. Carrier and evidence profiles should minimize disclosure and state the confidentiality properties of any commitments they use.</t>
    </section>

    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document requests creation of a "Witnessed Execution Protocol (WEXP)" registry group containing a "WEXP Appraisal Reason Codes" registry. The registration policy is Specification Required as defined by <xref target="RFC8126"/>. Each entry contains a token, category (<tt>fatal</tt>, <tt>substantive</tt>, or <tt>evaluation-gap</tt>), default verdict effect, current-scope capability (<tt>none</tt>, <tt>authenticity</tt>, or <tt>composition</tt>), and reference. Tokens begin with an uppercase ASCII letter and contain only uppercase ASCII letters, digits, and underscores. Token comparison is case-sensitive. No particular prefix, including <tt>E_</tt>, is required. This registration syntax does not prescribe a carrier encoding or limit on artifact size.</t>
      <t>The current-scope capability column is part of the immutable registration semantics resolved under <xref target="normalized-input"/>. Its value is <tt>none</tt> for every fatal or substantive token, and for an evaluation-gap token that is not permitted with <tt>current_scope_capability</tt>. An evaluation-gap registration with value <tt>authenticity</tt> or <tt>composition</tt> permits that marker only for the named capability. The referenced specification defines the exact assessment represented by that binding. Initially, <tt>E_COMPOSITION_NOT_EVALUATED</tt> is bound to <tt>composition</tt>; no other initial token is permitted with that marker. An applicable profile registration supplies any additional binding, including a token for <tt>authenticity</tt>. A marker naming a different capability or a token without such a binding produces <tt>E_PROFILE_MAPPING_INVALID</tt>.</t>
      <t>Initial entries are shown below; the reference for every initial entry is this document. The default effect describes the condition that generates the diagnostic, not a verdict computed from token presence alone. The verdict procedure in <xref target="algorithm"/> is authoritative. In particular, a reason carried by a finding or a profile-supplied evaluation gap can coexist with <tt>accept</tt>; its presence does not negate a passing exact predicate. An unevaluated counter entry affecting the asserted claim blocks acceptance even when its materiality has not been established.</t>
      <table>
          <name>Initial WEXP Appraisal Reason Codes</name>
        <thead><tr><th>Token</th><th>Category</th><th>Default effect</th><th>Current-scope capability</th></tr></thead>
        <tbody>
          <tr><td>E_MALFORMED_NORMALIZED_INPUT</td><td>fatal</td><td>reject</td><td>none</td></tr>
          <tr><td>E_UNSUPPORTED_SEMANTICS_VERSION</td><td>fatal</td><td>reject</td><td>none</td></tr>
          <tr><td>E_CLAIM_OUT_OF_DOMAIN</td><td>fatal</td><td>reject</td><td>none</td></tr>
          <tr><td>E_UNKNOWN_CRITICAL_SEMANTIC</td><td>fatal</td><td>reject</td><td>none</td></tr>
          <tr><td>E_INTEGRITY_INVALID</td><td>fatal</td><td>reject</td><td>none</td></tr>
          <tr><td>E_BINDING_MISMATCH</td><td>fatal</td><td>reject</td><td>none</td></tr>
          <tr><td>E_PROFILE_MAPPING_INVALID</td><td>fatal</td><td>reject</td><td>none</td></tr>
          <tr><td>E_CHAIN_DESCRIPTION_INVALID</td><td>fatal</td><td>reject</td><td>none</td></tr>
          <tr><td>E_CHAIN_UNBOUND</td><td>substantive</td><td>downgrade</td><td>none</td></tr>
          <tr><td>E_SHARED_VERIFICATION_ROOT</td><td>substantive</td><td>downgrade</td><td>none</td></tr>
          <tr><td>E_BASE_EXCEEDS_BOUNDARY</td><td>substantive</td><td>downgrade</td><td>none</td></tr>
          <tr><td>E_BOUNDARY_NOT_SUPPORTED</td><td>substantive</td><td>downgrade</td><td>none</td></tr>
          <tr><td>E_EXACT_CLAIM_NOT_SUPPORTED</td><td>substantive</td><td>downgrade</td><td>none</td></tr>
          <tr><td>E_MISSING_REQUIRED_EVIDENCE</td><td>substantive</td><td>downgrade</td><td>none</td></tr>
          <tr><td>E_EVIDENCE_NOT_BOUND</td><td>substantive</td><td>downgrade</td><td>none</td></tr>
          <tr><td>E_EVIDENCE_COVERAGE_MISMATCH</td><td>substantive</td><td>downgrade</td><td>none</td></tr>
          <tr><td>E_PROV_NOT_SUPPORTED</td><td>substantive</td><td>downgrade</td><td>none</td></tr>
          <tr><td>E_IV_NOT_SUPPORTED</td><td>substantive</td><td>downgrade</td><td>none</td></tr>
          <tr><td>E_COUNTER_EVIDENCE_UNRESOLVED</td><td>substantive</td><td>downgrade</td><td>none</td></tr>
          <tr><td>E_COUNTER_EVIDENCE_DEFEATING</td><td>substantive</td><td>downgrade</td><td>none</td></tr>
          <tr><td>E_COMPOSITION_WARRANT_MISSING</td><td>substantive</td><td>downgrade</td><td>none</td></tr>
          <tr><td>E_INDEPENDENCE_NOT_ESTABLISHED</td><td>substantive</td><td>downgrade</td><td>none</td></tr>
          <tr><td>E_BASE_NOT_EVALUATED</td><td>evaluation-gap</td><td>downgrade if needed by claim</td><td>none</td></tr>
          <tr><td>E_BOUNDARY_NOT_EVALUATED</td><td>evaluation-gap</td><td>downgrade if needed by claim</td><td>none</td></tr>
          <tr><td>E_PROV_NOT_EVALUATED</td><td>evaluation-gap</td><td>downgrade if needed by claim</td><td>none</td></tr>
          <tr><td>E_IV_NOT_EVALUATED</td><td>evaluation-gap</td><td>downgrade if needed by claim</td><td>none</td></tr>
          <tr><td>E_COMPOSITION_NOT_EVALUATED</td><td>evaluation-gap</td><td>downgrade if needed by claim</td><td>composition</td></tr>
          <tr><td>E_COUNTER_EVIDENCE_NOT_EVALUATED</td><td>evaluation-gap</td><td>downgrade when a counter entry is not evaluated and affects the asserted claim</td><td>none</td></tr>
        </tbody>
      </table>
      <t>The appraiser derives <tt>E_MALFORMED_NORMALIZED_INPUT</tt>, <tt>E_UNSUPPORTED_SEMANTICS_VERSION</tt>, <tt>E_PROFILE_MAPPING_INVALID</tt>, and <tt>E_CLAIM_OUT_OF_DOMAIN</tt> through the ordered checks in <xref target="input-validity"/>; they are not valid supplied fatal conditions. The remaining initial fatal tokens can be supplied only under the exact meanings and structurally usable-input rule in that section. Carrier-specific parse or extension errors are outside this Core registry and are neither aliases nor automatic mappings to Core tokens.</t>
      <t>The Designated Expert should verify the token syntax and uniqueness, one unambiguous condition, a deterministic category and default effect, a valid current-scope capability value and its consistency with the category and referenced assessment, and a stable public specification. Changing the meaning, category, or current-scope capability of an existing token requires a new token; an existing registration is not reinterpreted by an incompatible update. A registration that would create claim support from an evaluation capability, display label, boundary name, or artifact presence should be rejected.</t>
    </section>
  </middle>

  <back>
    <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 initials="S." surname="Bradner" fullname="Scott Bradner"/>
          <date month="March" year="1997"/>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </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 initials="B." surname="Leiba" fullname="Barry Leiba"/>
          <date month="May" year="2017"/>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
      <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126">
        <front>
          <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
          <author initials="M." surname="Cotton" fullname="Michelle Cotton"/>
          <author initials="B." surname="Leiba" fullname="Barry Leiba"/>
          <author initials="T." surname="Narten" fullname="Thomas Narten"/>
          <date month="June" year="2017"/>
        </front>
        <seriesInfo name="BCP" value="26"/>
        <seriesInfo name="RFC" value="8126"/>
        <seriesInfo name="DOI" value="10.17487/RFC8126"/>
      </reference>
    </references>

    <references>
      <name>Informative References</name>
      <reference anchor="WITNESSABILITY" target="https://doi.org/10.5281/zenodo.21970802">
        <front>
          <title>Toward a Witnessability Model for AI and Software Execution Systems: A Boundary-Based Framework for Classifying Execution Evidence</title>
          <author initials="M. A." surname="Sergeev" fullname="Mikhail Anatolievich Sergeev"/>
          <author initials="V." surname="Ikher" fullname="Vladimir Ikher"/>
          <date year="2026" month="August"/>
        </front>
        <seriesInfo name="Version" value="1.1"/>
        <seriesInfo name="DOI" value="10.5281/zenodo.21970802"/>
      </reference>
      <reference anchor="I-D.sergeev-wexp-core-00">
        <front>
          <title>The Witnessed Execution Protocol (WEXP): Core Specification</title>
          <author initials="M." surname="Sergeev" fullname="Mikhail Sergeev"/>
          <author initials="V." surname="Ikher" fullname="Vladimir Ikher"/>
          <date year="2026" month="July"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-sergeev-wexp-core-00"/>
      </reference>
      <reference anchor="I-D.sergeev-wexp-core-01" target="https://datatracker.ietf.org/doc/html/draft-sergeev-wexp-core-01">
        <front>
          <title>The Witnessed Execution Protocol (WEXP): Core Specification</title>
          <author initials="M." surname="Sergeev" fullname="Mikhail Sergeev"/>
          <author initials="V." surname="Ikher" fullname="Vladimir Ikher"/>
          <date year="2026" month="August" day="14"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-sergeev-wexp-core-01"/>
      </reference>
      <reference anchor="WEXP-COVERAGE" target="https://datatracker.ietf.org/doc/html/draft-sergeev-wexp-coverage-00">
        <front>
          <title>WEXP Coverage: Claims, Evidence, and Evaluation</title>
          <author initials="M." surname="Sergeev" fullname="Mikhail Sergeev"/>
          <date year="2026" month="October" day="23"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-sergeev-wexp-coverage-00"/>
        <refcontent>Work in Progress</refcontent>
      </reference>
      <reference anchor="WCC-CORE" target="https://doi.org/10.5281/zenodo.21865251">
        <front>
          <title>Witnessability Conceptual Core 1.0 — Ratified Release Package</title>
          <author initials="M. A." surname="Sergeev" fullname="Mikhail A. Sergeev"/>
          <date year="2026" month="July"/>
        </front>
        <seriesInfo name="Version" value="1.0.0"/>
        <seriesInfo name="DOI" value="10.5281/zenodo.21865251"/>
      </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 initials="H." surname="Birkholz"/><author initials="A." surname="Delignat-Lavaud"/><author initials="C." surname="Fournet"/><author initials="Y." surname="Deshpande"/><author initials="S." surname="Lasker"/><date year="2026" month="June"/></front><seriesInfo name="RFC" value="9943"/><seriesInfo name="DOI" value="10.17487/RFC9943"/></reference>
      <reference anchor="RFC9334" target="https://www.rfc-editor.org/info/rfc9334">
        <front>
          <title>Remote ATtestation procedureS (RATS) Architecture</title>
          <author initials="H." surname="Birkholz" fullname="Henk Birkholz"/>
          <author initials="D." surname="Thaler" fullname="Dave Thaler"/>
          <author initials="M." surname="Richardson" fullname="Michael Richardson"/>
          <author initials="N." surname="Smith" fullname="Ned Smith"/>
          <author initials="W." surname="Pan" fullname="Wei Pan"/>
          <date month="January" year="2023"/>
        </front>
        <seriesInfo name="RFC" value="9334"/>
        <seriesInfo name="DOI" value="10.17487/RFC9334"/>
      </reference>
    </references>

    <section anchor="changes-02">
      <name>Changes Since draft-sergeev-wexp-core-01</name>
      <t>RFC Editor: please remove this appendix before publication as an RFC.</t>
      <t>This appendix compares this revision with the posted Core-01 baseline <xref target="I-D.sergeev-wexp-core-01"/>.</t>
      <ul>
        <li><t>Renamed the document to describe its Witnessability appraisal role while retaining the WEXP project and Internet-Draft identifier.</t></li>
        <li><t>Introduced <tt>wexp-core-2</tt> for the clarified and tightened ingress contract; see <xref target="compatibility"/>.</t></li>
        <li><t>Resolved the Section 12/C14 conflict by separating the counter-evidence capability summary from each entry's status and affected claims.</t></li>
        <li><t>Defined the immutable fixture profile, token registry, comparison rules, and complete common context for C01-C16, including C15.</t></li>
        <li><t>Required present single-role base and PROV aggregates to agree with a not-evaluated capability, independently of the asserted claim, and stated shared-role scope behavior explicitly.</t></li>
        <li><t>Replaced the residual CC0-CC5 declaration with separate conformance surfaces.</t></li>
        <li><t>Clarified downgrade, full result preservation, diagnostic row predicates, and the blocking-only projection of counter-entry reasons.</t></li>
        <li><t>Distinguished profile rules, mapper and Core procedures, and their data flow in the architecture description.</t></li>
        <li><t>Clarified maximal display labels, structural versus mapping failures, the rejection projection, receipt predicates, and condition-scoped diagnostic effects.</t></li>
        <li><t>Distinguished evidentiary verification roots from public authentication trust anchors without relaxing the chain warrant.</t></li>
        <li><t>Clarified reported boundary grounding, input-binding obligations, external challenge routing, and the separation of Core appraisal from Coverage and application-policy decisions.</t></li>
        <li><t>Made gap-token capability bindings, composition predicate-to-field mappings, carrier-failure handling, and claim-required scope checks explicit; aligned the pseudocode helper and diagnostic projection text.</t></li>
        <li><t>Pinned the conceptual references and documented the scope and limits of their operational correspondence.</t></li>
      </ul>
    </section>

    <section anchor="compatibility">
      <name>Compatibility and Migration</name>
      <t>The Internet-Draft revision, Core semantics version, profile revision, and executable-corpus identity are separate versioned objects. This document defines only <tt>wexp-core-2</tt>. A multi-version implementation selects an explicit semantic procedure before invoking it; it does not relabel a <tt>wexp-core-1</tt> input or silently apply these rules to a historical result.</t>
      <t>The version change reflects ingress differences. Core-01 <xref target="I-D.sergeev-wexp-core-01"/> contained a conflict between its general counter-evidence scope rule and C14; this revision preserves C14's entry-specific intent without claiming that all Core-01 readers agreed. It also makes the previously unresolved single-role scope case an explicit mapping rejection and states the shared-role interpretation. Those choices can change admission for the same findings. Unchanged support algebra does not make the whole contract interchangeable.</t>
      <t>Existing Core-01 fixtures, source bytes, results, and issue records retain their identities. The new common fixture context changes the complete logical inputs and non-reject outputs, even where verdicts and supported sets remain the same. Representations of this revision therefore use new manifests and expectations. A Core-01 conformance or interoperability result is not evidence of conformance to this revision without a separately recorded evaluation.</t>
    </section>

    <section anchor="conceptual-correspondence">
      <name>Conceptual Correspondence and Attribution</name>
      <t>This informative table describes selected relationships. It is not a general conformance claim to either conceptual publication or a proof that their formal objects and this Core are equivalent.</t>
      <table>
          <name>Selected Conceptual Correspondences</name>
        <thead><tr><th>Conceptual source</th><th>WEXP realization</th><th>Limit of correspondence</th></tr></thead>
        <tbody>
          <tr><td>WCC 1.0, W-I1; Sections 2.1 and 2.7</td><td>Exact target, typed claim, evaluation context</td><td>Four positive content bases and two qualifiers; not all proposition classes</td></tr>
          <tr><td>WCC 1.0, W-I2</td><td>Carrier/profile evaluation, Core appraisal, external reliance</td><td>Core does not authenticate raw artifacts or make policy decisions</td></tr>
          <tr><td>WCC 1.0, W-I7 and Section 6.5</td><td>Composition warrants, limitation inheritance, Boundary Ceiling</td><td>Scoped operational constraints; no identity with a Support Envelope</td></tr>
          <tr><td>WCC 1.0, W-I7, Preserved Incomparability</td><td>Partial structural order and maximal supported alternatives</td><td>No universal scalar measure or unique maximum is required</td></tr>
          <tr><td>WCC 1.0, W-I8</td><td>Separate support, counter-evidence, gaps, and context</td><td>Core does not implement the full lifecycle or probabilistic model</td></tr>
          <tr><td>Model 1.1, Qualified States and Axiom BC</td><td>Four bases, PROV/IV, exclusion-only ceiling</td><td>Structural depth is not exact-support entailment; no axiom proof is claimed</td></tr>
        </tbody>
      </table>
      <t>The W-I7 quotation in <xref target="non-inference"/> is attributed to Mikhail A.&#160;Sergeev, Witnessability Conceptual Core 1.0, released under the CC BY 4.0 license. The reviewed Markdown artifact is <tt>WITNESSABILITY-CORE-1.0.md</tt>, with SHA-256:</t>
      <artwork>382e39864e257d93a0afd16c377c54f59a2182ecc5c38178764ded29ffb3f034</artwork>
      <t>The publication's release index identifies the same artifact. This revision replaces the abbreviated source identity in Core-01 and locates the quotation precisely; it makes no additional historical-priority claim. The execution-evidence model is the joint work of Mikhail A.&#160;Sergeev and Vladimir Ikher <xref target="WITNESSABILITY"/>.</t>
    </section>

    <section anchor="changes">
      <name>Historical Changes from Core-00 to Core-01</name>
      <t>RFC Editor: please remove this appendix before publication as an RFC.</t>
      <t>This list records the transition from <xref target="I-D.sergeev-wexp-core-00"/> to the posted Core-01 baseline <xref target="I-D.sergeev-wexp-core-01"/>.</t>
      <ul>
        <li><t>Separated carrier-neutral appraisal semantics from the Native Record format.</t></li>
        <li><t>Replaced scalar WL arithmetic with typed claims consisting of a content base and qualifier set.</t></li>
        <li><t>Made IV applicable to an exact claim at any supported base without raising that base.</t></li>
        <li><t>Replaced a singular verified level with an exact supported claim set and maximal supported alternatives.</t></li>
        <li><t>Made appraisal claim-independent and separated exact support from structural order.</t></li>
        <li><t>Fixed the verdict vocabulary to <tt>accept</tt>, <tt>downgrade</tt>, and <tt>reject</tt>.</t></li>
        <li><t>Replaced cumulative CC arithmetic with a non-evidentiary evaluation capability vector.</t></li>
        <li><t>Added normative semantic vectors, exact qualifier predicates, limitation inheritance, and explicit non-inference rules.</t></li>
      </ul>
    </section>

    <section anchor="disclosure">
      <name>Disclosure</name>
      <t>Portions of this document were developed with the assistance of generative AI tools under human editorial control. The listed authors are responsible for the resulting text.</t>
    </section>
  </back>
</rfc>
