<?xml version="1.0" encoding="UTF-8"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     version="3"
     docName="draft-scerbacov-icnli-00"
     ipr="trust200902"
     submissionType="IETF"
     category="info"
     consensus="false"
     tocInclude="true"
     sortRefs="true"
     symRefs="true">

  <front>
    <title abbrev="ICNLI">The Infrastructure Contextual Natural Language
      Interface (ICNLI): An Open Protocol for Modular Proactive AI Cloud
      Operating Systems</title>

    <author fullname="Valentin Scerbacov" initials="V." surname="Scerbacov">
      <organization>Imperal, Inc.</organization>
      <address>
        <email>valentin@imperal.io</email>
        <uri>https://icnli.org</uri>
      </address>
    </author>

    <date year="2026" month="June" day="14"/>

    <area>Internet</area>

    <keyword>ICNLI</keyword>
    <keyword>natural language interface</keyword>
    <keyword>AI agent</keyword>
    <keyword>context model</keyword>
    <keyword>anti-fabrication</keyword>
    <keyword>audit</keyword>

    <abstract>
      <t>This document describes the Infrastructure Contextual Natural
        Language Interface (ICNLI), an open protocol that defines how an
        artificial intelligence (AI) agent operates as a first-class
        participant inside a real-world operational system. ICNLI specifies
        a hierarchical context model, request classification and a two-step
        confirmation pattern for state-changing operations, multi-step chain
        orchestration with read-before-write semantics, an anti-fabrication
        contract that binds narration to verifiable facts, a graduated safety
        layer, a modular extension contract, proactive-intelligence
        requirements, channel neutrality, and observability and audit
        primitives, organized into three cumulative conformance levels. The
        protocol is domain-agnostic, channel-neutral, and
        implementation-neutral; a compliant implementation MAY use any
        underlying foundation model.</t>
      <t>This Internet-Draft is a faithful rendering, for the IETF
        community, of the ICNLI Specification version 2.0.0 published by its
        author. It is an individual submission and a work in progress with
        an intended status of Informational. It does not represent IETF
        consensus, is not a standards-track document, and makes no claim of
        IETF adoption.</t>
    </abstract>
  </front>

  <middle>

    <!-- ================================================================ -->
    <section anchor="introduction">
      <name>Introduction</name>

      <t>The normative source of truth for this protocol is the ICNLI
        Specification version 2.0.0, published at
        <eref target="https://icnli.org/icnli-specification/"/> under the
        Creative Commons Attribution-ShareAlike 4.0 International License
        (CC BY-SA 4.0) and archived at Zenodo under DOI
        10.5281/zenodo.20684403 <xref target="ICNLI-ZENODO"/>. This
        Internet-Draft is a faithful rendering of that specification for the
        IETF community; where this document
        and the published specification differ in wording, the published
        specification governs. This document deliberately omits operational
        metrics and any marketing framing; it is a technical description of
        the protocol.</t>

      <section anchor="purpose">
        <name>Purpose</name>
        <t>The purpose of ICNLI is to define a protocol for AI agents that
          operate as kernel-grade participants within real-world domains.
          ICNLI establishes the architectural contract that a Modular
          Proactive AI Cloud Operating System satisfies in order to be
          considered compliant: how it acquires structured domain
          awareness, how it routes natural-language intent, how it composes
          multi-step action chains safely, how it preserves verbatim facts
          across turns, how it remains channel-neutral, and how it produces
          audit-grade evidence of every interaction.</t>
        <t>A compliant implementation:</t>
        <ul>
          <li>Maintains hierarchical contextual awareness of its
            operational domain.</li>
          <li>Classifies natural-language requests by intent before any
            tool selection occurs.</li>
          <li>Executes consequential actions only with explicit human
            confirmation (the two-step pattern).</li>
          <li>Composes multi-tool chains with explicit dependency
            declaration and topological execution.</li>
          <li>Preserves facts from prior turns verbatim and grounds
            narration in those facts.</li>
          <li>Exposes at least one user-facing channel and SHOULD expose
            multiple with equivalent functionality.</li>
          <li>Emits structured metrics, distributed traces, and structured
            logs correlated by trace identifier.</li>
          <li>Provides a complete audit trail of every request,
            classification, dispatch, and confirmation.</li>
        </ul>
      </section>

      <section anchor="scope">
        <name>Scope</name>
        <t>This document covers the 9-level context model and its
          resolution algorithm; interaction patterns, request
          classification, and two-step confirmation; intent routing and
          multi-step chain orchestration semantics; anti-fabrication
          requirements binding narration to verifiable facts; the safety
          classification taxonomy and graduated response requirements; the
          modular extension contract; proactive-intelligence requirements;
          channel abstraction and cross-channel continuity; observability
          and audit primitives; and three conformance levels with their
          cumulative requirements.</t>
        <t>This document does NOT cover:</t>
        <ul>
          <li>The specific AI engine or foundation model implementation;
            any compliant model MAY be used.</li>
          <li>Domain-specific operations, which belong to domain
            extensions built on top of the protocol.</li>
          <li>User-interface design, which is handled by channel
            implementations.</li>
          <li>Storage, networking, or process-orchestration architecture
            beneath the protocol.</li>
          <li>Proprietary classifier, router, or execution mechanisms;
            only their contracts are described.</li>
        </ul>
      </section>

      <section anchor="motivation">
        <name>Motivation</name>
        <t>Foundation models can reason, draft, summarize, and converse
          with human-like fluency. Several open problems nonetheless remain
          unsolved at the model layer because they are, by their nature,
          not model problems but system problems. ICNLI addresses these
          system problems with architectural commitments rather than by
          depending on a particular model being well-behaved.</t>
        <table anchor="system-problems">
          <name>System problems the model layer cannot solve alone</name>
          <thead>
            <tr>
              <th>Open problem</th>
              <th>Why the model layer cannot solve it alone</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>Hallucination</td>
              <td>Probabilistic generation can, by definition, fabricate.
                Structural guarantees on what a system claims must come
                from outside the model.</td>
            </tr>
            <tr>
              <td>Multi-step reliability</td>
              <td>A single forward pass cannot reason about transactional
                dependencies that span tools, time, and side effects.</td>
            </tr>
            <tr>
              <td>Persistent memory</td>
              <td>A context window is not memory; a protocol-level memory
                layer is required.</td>
            </tr>
            <tr>
              <td>Safety and control</td>
              <td>Refusal training is statistical; architectural
                human-in-the-loop is deterministic.</td>
            </tr>
            <tr>
              <td>Privacy</td>
              <td>Privacy is a property of the data path, not the model. A
                protocol that filters context before the model sees it can
                enforce privacy structurally.</td>
            </tr>
          </tbody>
        </table>
      </section>

      <section anchor="design-goals">
        <name>Design Goals</name>
        <dl>
          <dt>Domain-agnostic</dt>
          <dd>The protocol applies to any operational domain; no domain
            assumptions appear in the core protocol.</dd>
          <dt>Context-first</dt>
          <dd>Every interaction occurs within structured, multi-level
            domain context, never blind.</dd>
          <dt>Modular composition</dt>
          <dd>Extensions, channels, tools, and domains plug into a finite
            kernel through declared contracts; the kernel surface is
            stable, the extension surface is unbounded.</dd>
          <dt>Proactive awareness</dt>
          <dd>At higher conformance levels, the system watches its domain,
            surfaces concerns, and proposes actions without prompting.</dd>
          <dt>Safe by default</dt>
          <dd>All state-changing operations require explicit human
            confirmation; this is mandatory, not optional.</dd>
          <dt>Channel-neutral</dt>
          <dd>Identical capabilities and identical context apply across
            every supported communication interface.</dd>
          <dt>Anti-fabrication</dt>
          <dd>The system grounds narration in verifiable facts preserved
            across turns.</dd>
          <dt>Auditable</dt>
          <dd>Every interaction, classification, dispatch, and confirmation
            is logged.</dd>
          <dt>Observable</dt>
          <dd>Structured metrics, traces, and logs are protocol-level
            requirements, not optional add-ons.</dd>
          <dt>Implementation-neutral</dt>
          <dd>Any AI engine, any storage system, and any infrastructure MAY
            be used beneath the protocol.</dd>
        </dl>
      </section>

      <section anchor="etymology">
        <name>Acronym Etymology and Domain Scope</name>
        <t>ICNLI was coined in the infrastructure-operations domain:
          natural-language interfaces for production hosting management.
          The acronym preserves that origin and expands to Infrastructure
          Contextual Natural Language Interface. This is the only permitted
          expansion of the acronym.</t>
        <t>The protocol's scope has since generalized. Every normative
          requirement in this document is domain-agnostic by construction:
          nothing in the context model, interaction protocol, safety layer,
          anti-fabrication contract, chain orchestration,
          proactive-intelligence requirements, or observability
          requirements is specific to hosting, infrastructure, or any
          single vertical. The acronym is not renamed for continuity with
          prior work; a future major version MAY revise it if continuity
          ever costs more than clarity.</t>
      </section>
    </section>

    <!-- ================================================================ -->
    <section anchor="terminology">
      <name>Terminology</name>

      <section anchor="conformance-keywords">
        <name>Conformance Keywords</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
          NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
          "MAY", and "OPTIONAL" in this document are to be interpreted as
          described in BCP 14 <xref target="RFC2119"/> <xref
          target="RFC8174"/> when, and only when, they appear in all
          capitals, as shown here.</t>
      </section>

      <section anchor="key-terms">
        <name>Key Terms</name>
        <dl>
          <dt>ICNLI</dt>
          <dd>Infrastructure Contextual Natural Language Interface; the
            open protocol described herein.</dd>
          <dt>Modular</dt>
          <dd>An architectural property by which extensions, channels,
            tools, and domains plug into a stable kernel through declared
            contracts. The kernel is finite; the surface is unbounded.</dd>
          <dt>Proactive</dt>
          <dd>An architectural property by which the system watches its
            domain, anticipates events, and surfaces concerns or proposals
            without being prompted.</dd>
          <dt>AI Cloud OS</dt>
          <dd>A class of system in which AI is the primary user. Context
            resolution, intent routing, action execution, memory, and audit
            are kernel-grade primitives.</dd>
          <dt>Kernel</dt>
          <dd>The finite, stable orchestration core of a compliant
            implementation, responsible for intent routing, action
            dispatch, audit emission, recovery, and the lifecycle of
            extensions.</dd>
          <dt>Extension</dt>
          <dd>A pluggable unit that contributes domain-specific tools,
            panels, or capabilities to the kernel via a declared
            manifest.</dd>
          <dt>Domain</dt>
          <dd>An operational environment: any field, industry, or system
            the implementation manages.</dd>
          <dt>Context</dt>
          <dd>Structured awareness of the domain state relevant to an actor
            and their request.</dd>
          <dt>Context Level</dt>
          <dd>A layer in the 9-level hierarchical context model
            (L0 through L8).</dd>
          <dt>Tool</dt>
          <dd>A defined executable function with typed parameters, a safety
            classification, and required permissions.</dd>
          <dt>Channel</dt>
          <dd>A communication interface (for example web, messaging, voice,
            or API) through which actors interact with the system.</dd>
          <dt>Channel Neutrality</dt>
          <dd>The protocol property by which capabilities and context are
            equivalent across channels.</dd>
          <dt>Mutation</dt>
          <dd>Any operation that changes domain state.</dd>
          <dt>Confirmation</dt>
          <dd>Explicit human approval required before executing a
            mutation.</dd>
          <dt>Two-Step</dt>
          <dd>The mandatory confirmation pattern: Propose (with impact
            analysis), then Confirm, then Execute.</dd>
          <dt>Session</dt>
          <dd>A stateful interaction context maintained across one or more
            requests.</dd>
          <dt>Actor</dt>
          <dd>The authenticated entity initiating requests: a human user, a
            service, or an authorized system.</dd>
          <dt>Intent Domain Router</dt>
          <dd>A classification layer that resolves which operational domains
            are relevant to a request before tool selection.</dd>
          <dt>Chain Orchestration</dt>
          <dd>The kernel-level facility for executing a sequence of typed
            tool calls with declared dependencies, topological ordering,
            and read-before-write semantics.</dd>
          <dt>Step-Output Reference</dt>
          <dd>A vendor-neutral concept allowing the output of step N in a
            chain to flow into the input of a later step.</dd>
          <dt>Anti-Fabrication Contract</dt>
          <dd>The protocol-level requirement that narration MUST be grounded
            in verifiable facts and MUST NOT claim results not present in
            the fact ledger.</dd>
          <dt>Fact Ledger</dt>
          <dd>The structured, per-turn record of verbatim tool outputs
            preserved across the session and made available to subsequent
            turns.</dd>
          <dt>User Intelligence Profile</dt>
          <dd>A continuously maintained awareness model of an actor and
            their domain state; the substrate for proactive
            intelligence.</dd>
          <dt>Observability</dt>
          <dd>The protocol-level requirement that compliant implementations
            emit structured metrics, traces, and logs sufficient to operate
            and audit the system.</dd>
        </dl>
      </section>
    </section>

    <!-- ================================================================ -->
    <section anchor="core-principles">
      <name>Core Principles</name>
      <t>ICNLI defines eight core principles. Every compliant
        implementation MUST satisfy these principles directly or via the
        more specific normative clauses in later sections.</t>

      <section anchor="p1">
        <name>Principle 1: Context is Primary</name>
        <t>Every ICNLI interaction MUST occur within a defined context. The
          system MUST NOT process requests without first establishing actor
          identity, actor permissions, and the resource context relevant to
          the request. Blind execution against natural-language intent is
          non-conformant. For example, a request to "delete the database"
          where three databases match MUST be resolved by clarification,
          not by guessing a target.</t>
      </section>

      <section anchor="p2">
        <name>Principle 2: Modular Composition</name>
        <t>A compliant implementation MUST be structured as a finite,
          stable kernel plus a pluggable surface of extensions. Extensions
          declare their tools, contributions, and required permissions
          through a manifest contract (<xref target="extension-contract"/>).
          The kernel MUST validate every extension manifest before
          registration. Extensions MUST NOT be permitted to alter kernel
          orchestration semantics. New domains, channels, or capabilities
          SHOULD be added by registering new extensions, not by modifying
          the kernel.</t>
      </section>

      <section anchor="p3">
        <name>Principle 3: Proactive Awareness</name>
        <t>A compliant implementation at Conformance Level 3 MUST maintain
          a User Intelligence Profile that refreshes in the background,
          independent of any incoming request. The system MUST be capable
          of surfacing alerts, anomalies, and proposed actions without
          being prompted. Alerts MUST flow through the same channel-neutral
          interface as request-response traffic and MUST remain
          two-step-bound: an unprompted proposal still requires explicit
          human confirmation before any state-changing execution. Proactive
          is not the same as autonomous: the system watches and proposes;
          the human authorizes.</t>
      </section>

      <section anchor="p4">
        <name>Principle 4: Safety by Design</name>
        <t>All state-changing operations MUST follow the two-step
          confirmation pattern (<xref target="interaction-protocol"/>). For
          operations classified above safety level 1, the system MUST
          analyze and present impact before requesting confirmation. For
          CRITICAL operations (level 4), the system MUST require a danger
          phrase that demonstrates the human understands what is about to
          occur.</t>
      </section>

      <section anchor="p5">
        <name>Principle 5: Channel Neutrality</name>
        <t>A compliant implementation MUST expose at least one channel and
          SHOULD expose multiple. Functionality MUST be equivalent across
          channels: a user able to perform an operation on one channel MUST
          be able to perform it on any other supported channel. Response
          form MAY differ; protocol semantics MUST NOT.</t>
      </section>

      <section anchor="p6">
        <name>Principle 6: Transparency</name>
        <t>The system MUST be transparent about what it knows, what it
          intends to do, what it actually did, and what it cannot do. Every
          state-changing dispatch MUST be auditable. Every classification
          decision SHOULD be inspectable in debug or audit mode.</t>
      </section>

      <section anchor="p7">
        <name>Principle 7: Graceful Degradation</name>
        <t>When context is incomplete or uncertain, the system MUST clearly
          state what is unknown, MUST ask clarifying questions, and MUST NOT
          assume or guess for destructive operations. For low-confidence
          classifications targeting state-changing operations, the system
          MUST request clarification rather than execute speculatively.</t>
      </section>

      <section anchor="p8">
        <name>Principle 8: Domain Agnosticism</name>
        <t>The core protocol MUST NOT encode assumptions about any specific
          operational domain. Hosting, healthcare, finance, smart city,
          government, manufacturing, defense, and any other domain are
          equally addressable through domain extensions built on top of the
          protocol. The protocol defines the contract; the domain defines
          the tools.</t>
      </section>
    </section>

    <!-- ================================================================ -->
    <section anchor="context-model">
      <name>Context Model</name>

      <section anchor="context-hierarchy">
        <name>Context Hierarchy</name>
        <t>ICNLI defines a 9-level hierarchical context model. Each level
          adds awareness; lower levels are resolved before higher levels
          are referenced.</t>
        <artwork name="context-levels"><![CDATA[
 L0 PLATFORM      Platform capabilities, tools, system status
 L1 ACTOR         Identity, authentication, roles, permissions
 L2 ACCOUNT       Account, subscription, quotas, limits
 L3 SERVICE       Services owned by the actor, status, config
 L4 ENVIRONMENT   Hosts, regions, environments, topology
 L5 APPLICATION   Apps, datasets, channels in environments
 L6 RESOURCE      Records, files, configurations, metrics
 L7 RELATIONSHIP  Connections and dependencies between entities
 L8 INTERCONNECT  Cross-system dependencies, cascade impact
]]></artwork>
      </section>

      <section anchor="why-nine">
        <name>Why Nine Levels</name>
        <t>The number is empirical, not arithmetic. Every operational
          domain audited during the protocol's development (production
          hosting, hospital operations, financial trade reconciliation,
          smart-city infrastructure, and investigative case management)
          required at minimum the nine distinctions above: the platform
          itself (L0); the actor (L1); the actor's ownership boundary (L2);
          the set of relevant operational entities (L3); the environment
          those entities live in (L4); the applications or processes they
          expose (L5); the resources they consume (L6); the relationships
          among them (L7); and the cross-system interconnections (L8).</t>
        <t>Collapsing any two of these levels lost expressive power in at
          least one audited domain; adding more produced redundancy. Nine
          is the smallest hierarchy that handled the observed set without
          information loss. This is empirical inference, not a proof of
          universality. A future revision MAY introduce additional levels
          if a domain requires distinctions not captured by the current
          nine. Implementations MAY also declare sub-levels within any level
          for domain-specific structure; that is normative-extensible, not a
          violation.</t>
        <table anchor="domain-mappings">
          <name>Worked domain mappings</name>
          <thead>
            <tr>
              <th>Level</th>
              <th>Hosting</th>
              <th>Healthcare</th>
              <th>Finance</th>
              <th>Legal / Investigative</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>L0 Platform</td>
              <td>Cloud OS</td>
              <td>Hospital information system</td>
              <td>Trading platform</td>
              <td>Case management system</td>
            </tr>
            <tr>
              <td>L1 Actor</td>
              <td>Hosting client</td>
              <td>Physician / nurse</td>
              <td>Trader / risk manager</td>
              <td>Investigator</td>
            </tr>
            <tr>
              <td>L2 Ownership</td>
              <td>Account</td>
              <td>Patient record</td>
              <td>Portfolio / fund</td>
              <td>Case file</td>
            </tr>
            <tr>
              <td>L3 Entities</td>
              <td>Services / sites</td>
              <td>Treatments / encounters</td>
              <td>Positions / instruments</td>
              <td>Case entities</td>
            </tr>
            <tr>
              <td>L4 Environment</td>
              <td>Servers / regions</td>
              <td>Wards / departments</td>
              <td>Markets / exchanges</td>
              <td>Jurisdictions</td>
            </tr>
            <tr>
              <td>L5 Applications</td>
              <td>Web apps / databases</td>
              <td>Devices / procedures</td>
              <td>Algorithms / order books</td>
              <td>Documents / artifacts</td>
            </tr>
            <tr>
              <td>L6 Resources</td>
              <td>Files / DNS / TLS</td>
              <td>Vitals / labs / images</td>
              <td>Quotes / signals</td>
              <td>Evidence / records</td>
            </tr>
            <tr>
              <td>L7 Relationships</td>
              <td>Dependency graph</td>
              <td>Drug interactions / allergies</td>
              <td>Position correlations</td>
              <td>Entity-relationship graph</td>
            </tr>
            <tr>
              <td>L8 Interconnections</td>
              <td>Cross-service cascade</td>
              <td>Cross-department impact</td>
              <td>Systemic risk exposure</td>
              <td>Cross-case implications</td>
            </tr>
          </tbody>
        </table>
        <t>In every mapping, the protocol's requirements apply unchanged.
          The domain supplies the payload; the protocol supplies the
          shape.</t>
      </section>

      <section anchor="context-by-level">
        <name>Context Requirements by Conformance Level</name>
        <table anchor="context-conformance">
          <name>Context level requirements by conformance level</name>
          <thead>
            <tr>
              <th>Context Level</th>
              <th>Level 1</th>
              <th>Level 2</th>
              <th>Level 3</th>
            </tr>
          </thead>
          <tbody>
            <tr><td>L0 Platform</td><td>MUST</td><td>MUST</td><td>MUST</td></tr>
            <tr><td>L1 Actor</td><td>MUST</td><td>MUST</td><td>MUST</td></tr>
            <tr><td>L2 Account</td><td>MUST</td><td>MUST</td><td>MUST</td></tr>
            <tr><td>L3 Service</td><td>SHOULD</td><td>MUST</td><td>MUST</td></tr>
            <tr><td>L4 Environment</td><td>SHOULD</td><td>MUST</td><td>MUST</td></tr>
            <tr><td>L5 Application</td><td>SHOULD</td><td>MUST</td><td>MUST</td></tr>
            <tr><td>L6 Resource</td><td>MAY</td><td>MUST</td><td>MUST</td></tr>
            <tr><td>L7 Relationship</td><td>MAY</td><td>SHOULD</td><td>MUST</td></tr>
            <tr><td>L8 Interconnection</td><td>MAY</td><td>SHOULD</td><td>MUST</td></tr>
          </tbody>
        </table>
      </section>

      <section anchor="context-resolution">
        <name>Context Resolution</name>
        <t>Implementations MUST resolve context in order from L0 upward.
          Lower levels MUST be available before higher levels are
          referenced. Implementations MAY load deeper levels lazily,
          eagerly, or selectively, but MUST NOT skip levels: a request that
          references L5 MUST also have L0 through L4 resolved. The following
          pseudocode describes the minimum resolution algorithm.</t>
        <sourcecode type="pseudocode" name="resolve-context"><![CDATA[
def resolve_context(request) -> Context:
    context = Context()

    # L0: Platform (always available)
    context.platform = get_platform_context()

    # L1: Actor (from authentication)
    context.actor = authenticate(request)
    if not context.actor:
        raise AuthenticationRequired()

    # L2: Account (derived from actor)
    context.account = get_account(context.actor)

    # L3+: lazy, eager, or selective per implementation.
    # Levels MUST NOT be skipped: a reference to Ln
    # requires L0..L(n-1) to be resolved first.
    if request.references_service():
        context.service = resolve_service(request, context)
    if request.references_environment():
        context.environment = resolve_environment(request, context)
    # ... continue for deeper levels

    return context
]]></sourcecode>
        <t>Compliant implementations MAY enrich the context object with
          domain-specific fields, MUST preserve the level structure, and
          MUST mask personally identifiable information (PII) by default
          when transmitting context to the model layer
          (<xref target="pii-gate"/>).</t>
      </section>
    </section>

    <!-- ================================================================ -->
    <section anchor="interaction-protocol">
      <name>Interaction Protocol</name>

      <section anchor="request-types">
        <name>Request Types</name>
        <t>ICNLI defines four request types.</t>
        <table anchor="request-type-table">
          <name>Request types</name>
          <thead>
            <tr>
              <th>Type</th>
              <th>Description</th>
              <th>Confirmation required</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>QUERY</td>
              <td>Read-only information retrieval.</td>
              <td>No</td>
            </tr>
            <tr>
              <td>MUTATION</td>
              <td>State-changing operation.</td>
              <td>Yes (two-step)</td>
            </tr>
            <tr>
              <td>NAVIGATION</td>
              <td>Context switching between resources.</td>
              <td>No</td>
            </tr>
            <tr>
              <td>META</td>
              <td>System, help, or self-description requests.</td>
              <td>No</td>
            </tr>
          </tbody>
        </table>
      </section>

      <section anchor="classification">
        <name>Request Classification</name>
        <t>A compliant implementation MUST classify every incoming request
          before tool selection. Classification MUST produce, at minimum,
          the request type and a confidence value. For low-confidence
          classifications targeting MUTATION or destructive operations, the
          system MUST request clarification. The classification algorithm is
          implementation-specific and MAY be proprietary; its contract is
          normative.</t>
        <t>Implementations MUST use a learned intent classifier, not
          substring or keyword matching. Lexical matching on natural
          language is insufficient: a request such as "show me what would
          happen if I deleted the database" contains both "show" and
          "deleted" yet is a query (it asks for an impact analysis), not a
          mutation. A classifier that distinguishes such cases is
          mandatory. The classifier MUST be deterministic for a given
          (request, context) pair within a session, and MUST emit, in
          addition to the request type, an action type
          (read / write / destructive), a target domain drawn from the
          registered operational domains, and a confidence value in the
          range [0, 1]. A confidence below an implementation-defined
          threshold (RECOMMENDED at most 0.7 for destructive intents) MUST
          trigger a clarification request, not a best-effort dispatch.</t>
      </section>

      <section anchor="two-step">
        <name>Two-Step Confirmation Protocol</name>
        <t>All MUTATION requests MUST follow the two-step pattern. In Step 1
          (Proposal), the request is classified and routed, context is
          resolved, a plan is formed, impact is analyzed, and a proposal is
          presented to the actor with a summary, the affected items, impact
          notes, and a confirmation prompt. In Step 2 (Execution), the
          actor confirms, the confirmation token is validated, the action
          executes, and the result is reported.</t>
      </section>

      <section anchor="confirmation-tokens">
        <name>Confirmation Tokens</name>
        <t>To prevent accidental confirmations, implementations MUST issue
          confirmation tokens carrying at least a unique proposal
          identifier, the proposed action and target, an issue time, an
          expiry time, and the set of accepted confirmation responses. An
          example token shape follows.</t>
        <sourcecode type="json" name="confirmation-token"><![CDATA[
{
  "proposal_id": "prop_xyz789",
  "action": "delete_resource",
  "target": "res_001",
  "issued_at": "2026-05-17T10:00:00Z",
  "expires_at": "2026-05-17T10:05:00Z",
  "valid_confirmations": ["yes", "confirm", "proceed"]
}
]]></sourcecode>
        <t>Implementations MUST:</t>
        <ul>
          <li>Generate a unique proposal identifier per proposal.</li>
          <li>Set an expiration; the RECOMMENDED expiry is five
            minutes.</li>
          <li>Reject confirmations after expiration.</li>
          <li>Reject confirmations whose proposal identifier does not match
            the most recent unexpired proposal in the session.</li>
          <li>Re-classify or re-plan on receipt of a new request rather
            than reusing an expired proposal.</li>
        </ul>
      </section>
    </section>

    <!-- ================================================================ -->
    <section anchor="chain-orchestration">
      <name>Intent Routing and Chain Orchestration</name>

      <t>Relation to prior art: this pattern is not unique to ICNLI. The
        Model Context Protocol (MCP) <xref target="MCP"/> standardizes tool
        discovery, model-native function-calling capabilities standardize
        tool invocation, and agent frameworks implement runtime tool
        retrieval. ICNLI's contribution is making the routing decision a
        normative, auditable, persistable protocol artifact, and binding it
        to the fact ledger and to read-before-write semantics for
        multi-step chains.</t>

      <section anchor="intent-routing">
        <name>Intent Routing</name>
        <t>At Conformance Level 2 and above, the implementation MUST
          classify request intent and route to candidate operational
          domains before any tool is selected. The classification layer
          MUST:</t>
        <ol>
          <li>Classify each incoming request into one or more relevant
            operational domains.</li>
          <li>Pass only relevant domain tools to subsequent processing
            stages.</li>
          <li>Complete classification within a defined latency budget per
            implementation.</li>
          <li>Fall back to a broader tool surface if classification is
            ambiguous, while never silently downgrading safety
            classification.</li>
        </ol>
        <t>Intent routing is the protocol's structural defence against tool
          mis-selection: the AI engine never sees the full registry; it
          sees the focused subset that the router determined was relevant.
          This is a load-bearing input to the Anti-Fabrication Contract
          (<xref target="anti-fabrication"/>), because a tool the model
          never sees cannot be invented.</t>
      </section>

      <section anchor="domain-registry">
        <name>Domain Registry</name>
        <t>Implementations MUST maintain a Domain Registry mapping tools to
          operational domains. The schema of the registry and the number,
          naming, and granularity of domains are implementation-specific.
          The registry MUST be inspectable in debug or audit mode. The
          protocol makes no claim about how many tools or how many domains a
          compliant implementation supports; only that the mapping exists,
          is inspectable, and is consulted before tool selection.</t>
      </section>

      <section anchor="chain-requirements">
        <name>Chain Orchestration</name>
        <t>When a request resolves to more than one tool invocation, the
          implementation MUST treat the dispatch as a chain and MUST execute
          it through a single chain orchestrator. The chain orchestrator
          MUST satisfy the following normative requirements:</t>
        <ol>
          <li>Single orchestrator. All multi-tool dispatch MUST flow
            through the same kernel-level orchestrator. Extensions MUST NOT
            implement private multi-tool orchestration loops.</li>
          <li>Explicit dependency declaration. Each step in the chain MUST
            declare its dependencies on prior steps by stable
            identifier.</li>
          <li>Topological execution order. The orchestrator MUST compute a
            stable topological order over declared dependencies before
            executing the chain. Reads MUST precede dependent writes.</li>
          <li>Fail-fast on dropped plans for destructive operations. If a
            planned step targeting a state-changing or destructive
            operation is dropped during validation, the orchestrator MUST
            surface a user-visible error and MUST NOT silently fall back to
            a single-tool path.</li>
          <li>Per-step audit emission. Every step's classification,
            dispatch, result, and any confirmation MUST appear in the audit
            substrate (<xref target="observability"/>).</li>
          <li>Two-step composition. Confirmation requirements apply per
            step at the safety classification of each step. A chain
            containing a level-3 or level-4 step MUST request confirmation
            before the destructive step executes, regardless of prior step
            results.</li>
        </ol>
      </section>

      <section anchor="step-output-references">
        <name>Step-Output References</name>
        <t>A chain step MAY consume data produced by a prior step. The
          protocol defines this as a Step-Output Reference: a typed
          connection from the output of step N to a named input of a later
          step M. Implementations MAY choose any concrete syntax for these
          references. The protocol requires the following semantics
          regardless of syntax:</t>
        <ul>
          <li>A reference MUST identify its producer step unambiguously and
            MUST remain stable under topological reordering.</li>
          <li>The orchestrator MUST resolve references at dispatch time
            using the verbatim output of the producer step from the fact
            ledger (<xref target="anti-fabrication"/>).</li>
          <li>A reference MUST NOT be expanded by paraphrasing or
            summarization; it MUST carry the producer's data
            faithfully.</li>
          <li>A reference whose producer failed or was dropped MUST cause
            the dependent step either to fail explicitly or to seek
            confirmation, never to dispatch with placeholder data.</li>
        </ul>
        <t>This protects multi-step reliability: an AI agent constructing a
          chain cannot accidentally invent the data flowing between steps,
          because the orchestrator binds references to verbatim
          outputs.</t>
      </section>
    </section>

    <!-- ================================================================ -->
    <section anchor="anti-fabrication">
      <name>Anti-Fabrication Requirements</name>

      <t>A compliant implementation MUST satisfy the Anti-Fabrication
        Contract. This is the protocol's structural defence against the
        class of failure commonly labelled "hallucination". The contract
        has four normative components: cross-turn fact preservation,
        grounded narration, intent-routed tool selection, and a PII masking
        gate. The Anti-Fabrication Contract is REQUIRED at all conformance
        levels; it is not a higher-tier feature.</t>

      <section anchor="fact-ledger">
        <name>Cross-Turn Fact Preservation</name>
        <t>For every tool dispatch, the implementation MUST record the
          tool's structured output verbatim into a per-session fact ledger.
          The fact ledger MUST be made available to the model layer on
          subsequent turns. The model MUST be instructed to prefer verbatim
          facts over paraphrased prose from earlier turns.</t>
        <ul>
          <li>Facts MUST be preserved as structured data, not only as prose
            summaries.</li>
          <li>The fact ledger MUST be bounded by a configurable per-turn
            aggregation cap so that long-running sessions cannot exhaust the
            context budget.</li>
          <li>Facts MUST survive across turns within a session and SHOULD
            survive across sessions where supported by the implementation's
            memory layer.</li>
        </ul>
      </section>

      <section anchor="grounded-narration">
        <name>Grounded Narration</name>
        <t>When the implementation produces a user-facing narrative
          response, the narration MUST be grounded in facts present in the
          current turn's dispatch results or in the fact ledger. The
          implementation MUST NOT permit narration to claim a tool produced
          a value not present in that tool's output, to quantify a result
          not enumerated in the underlying facts, or to attribute a status
          to a resource whose status was not retrieved. Implementations
          SHOULD enforce grounded narration through a system instruction to
          the model layer combined with a post-generation check appropriate
          to the model and channel. The mechanism is
          implementation-specific; the requirement is normative.</t>
      </section>

      <section anchor="intent-routed-selection">
        <name>Intent-Routed Tool Selection</name>
        <t>The intent-routing requirements of
          <xref target="intent-routing"/> are a load-bearing element of the
          Anti-Fabrication Contract. By restricting the model's tool surface
          to the classifier-selected subset, the protocol structurally
          prevents the model from inventing a call to a tool that the router
          did not surface. Implementations MUST NOT permit the model to
          invoke tools outside the routed subset for the current
          request.</t>
      </section>

      <section anchor="pii-gate">
        <name>PII Masking Gate</name>
        <t>A compliant implementation MUST mask personally identifiable
          information (PII) in context delivered to the model by default.
          Exposure of PII to the model MUST be opt-in, configurable at
          deployment time, and auditable. The default state MUST be
          masking enabled; the opt-in MUST be explicit.</t>
      </section>

      <section anchor="anti-fabrication-scope">
        <name>Scope of Guarantee</name>
        <t>The Anti-Fabrication Contract has explicit normative scope.
          Implementations and reviewers must understand the following
          distinctions.</t>
        <table anchor="guarantee-scope">
          <name>Scope of the anti-fabrication guarantee</name>
          <thead>
            <tr>
              <th>Layer</th>
              <th>What is guaranteed</th>
              <th>How</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>Provenance</td>
              <td>Tool-call output preserved verbatim across turns;
                substitution is detectable.</td>
              <td>Structural: fact ledger is append-only and
                content-addressed.</td>
            </tr>
            <tr>
              <td>Narration</td>
              <td>Narrator MUST NOT claim values absent from the
                ledger.</td>
              <td>Contractual: enforced by runtime judges (probabilistic
                at this protocol version).</td>
            </tr>
            <tr>
              <td>Intent routing</td>
              <td>Classifier MUST select tools from the declared domain
                set.</td>
              <td>Contractual: enforced before tool-surface exposure to the
                model.</td>
            </tr>
          </tbody>
        </table>
        <t>The contract REDUCES ungrounded fabrication; it does NOT
          eliminate the category in the formal sense. Strict structural
          impossibility would require constrained generation or a symbolic
          intermediate representation, neither of which is normatively
          required by this protocol version. Implementations MAY exceed this
          baseline with stricter enforcement (for example, entailment
          judges or constrained decoding). Such enhancements MUST NOT weaken
          the contract surface defined above.</t>
      </section>
    </section>

    <!-- ================================================================ -->
    <section anchor="safety-layer">
      <name>Safety Layer</name>

      <t>Relation to prior art: two-step confirmation patterns exist
        throughout systems engineering, from interactive removal prompts in
        UNIX, to the plan-and-apply workflow of infrastructure-as-code
        tools, to repository-delete confirmations in source-hosting
        services. ICNLI's contribution is making the gate normative at the
        protocol level: classification on the 0 through 4 scale, mandatory
        impact analysis from level 2 upward, cooling periods bound to the
        audit trail, and cross-channel continuity of the gate so that a
        proposal opened on one channel cannot be silently confirmed on
        another.</t>

      <section anchor="safety-classification">
        <name>Safety Classification</name>
        <t>All tools MUST be classified by safety level.</t>
        <table anchor="safety-levels">
          <name>Safety classification levels</name>
          <thead>
            <tr>
              <th>Level</th>
              <th>Name</th>
              <th>Description</th>
              <th>Example</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>0</td>
              <td>READ</td>
              <td>No side effects.</td>
              <td>List, show, status.</td>
            </tr>
            <tr>
              <td>1</td>
              <td>SAFE_WRITE</td>
              <td>Reversible changes.</td>
              <td>Update a non-critical preference.</td>
            </tr>
            <tr>
              <td>2</td>
              <td>WRITE</td>
              <td>Significant but routine changes.</td>
              <td>Create a resource, add a record.</td>
            </tr>
            <tr>
              <td>3</td>
              <td>DANGEROUS</td>
              <td>Potentially destructive.</td>
              <td>Delete a record, drop a dataset.</td>
            </tr>
            <tr>
              <td>4</td>
              <td>CRITICAL</td>
              <td>Irreversible, severe impact.</td>
              <td>Delete a service, purge backups.</td>
            </tr>
          </tbody>
        </table>
      </section>

      <section anchor="safety-by-level">
        <name>Safety Requirements by Level</name>
        <table anchor="safety-requirements">
          <name>Safety requirements by level</name>
          <thead>
            <tr>
              <th>Level</th>
              <th>Confirmation</th>
              <th>Audit</th>
              <th>Backup</th>
              <th>Cooling period</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>0</td><td>No</td><td>Optional</td><td>No</td><td>No</td>
            </tr>
            <tr>
              <td>1</td><td>Optional</td><td>Yes</td><td>No</td><td>No</td>
            </tr>
            <tr>
              <td>2</td>
              <td>Yes (two-step)</td><td>Yes</td>
              <td>Recommended</td><td>No</td>
            </tr>
            <tr>
              <td>3</td>
              <td>Yes, with impact details</td><td>Yes</td>
              <td>Required</td><td>Recommended</td>
            </tr>
            <tr>
              <td>4</td>
              <td>Yes, with danger phrase</td><td>Yes</td>
              <td>Required</td><td>Required (at least 30 s)</td>
            </tr>
          </tbody>
        </table>
      </section>

      <section anchor="impact-analysis">
        <name>Impact Analysis</name>
        <t>Before proposing a mutation at level 2 or above, implementations
          MUST analyze and present impact, including direct targets,
          cascade targets derived from L7 and L8 context, reversibility, and
          backup availability where applicable.</t>
      </section>

      <section anchor="danger-phrases">
        <name>Danger Phrases</name>
        <t>For CRITICAL (level 4) operations, implementations MUST require
          an explicit danger phrase that demonstrates the actor understands
          what is about to occur. The phrase MUST include the target
          identifier or an equivalent that cannot be produced by accidental
          typing (for example, requiring the actor to type a phrase
          containing the exact resource identifier).</t>
      </section>

      <section anchor="role-based-safety">
        <name>Role-Based Safety</name>
        <t>The canonical example roles are guest, client, and admin; these
          are examples only. Compliant implementations MAY define additional
          roles. Implementations MUST enforce role-based access on every
          tool dispatch and MUST log authorization failures. For example, a
          guest role might be permitted only safety level 0, a client role
          levels 0 through 3, and an admin role levels 0 through 4. Role
          names and the level mapping are illustrative.</t>
      </section>
    </section>

    <!-- ================================================================ -->
    <section anchor="extension-contract">
      <name>Modular Extension Contract</name>

      <section anchor="modular-pattern">
        <name>Modular Composition Pattern</name>
        <t>A compliant implementation MUST be structured as a finite kernel
          plus a pluggable surface of extensions. The kernel owns intent
          classification and routing, chain orchestration, confirmation and
          audit, the fact ledger and memory, and extension lifecycle and
          validation. Extensions own the tools they declare, the domain
          capabilities they implement, and their channel contributions
          (panels, surfaces) where applicable. Extensions MUST NOT alter
          kernel orchestration semantics. New domains, channels, or
          capabilities SHOULD be added by registering new extensions, not by
          modifying the kernel.</t>
      </section>

      <section anchor="manifest-schema">
        <name>Extension Manifest Schema</name>
        <t>Every extension MUST declare a manifest. The manifest is the
          contract by which the kernel decides whether and how to register
          the extension. The protocol requires the following manifest field
          categories. Specific field names are implementation-specific;
          categorical presence is normative.</t>
        <table anchor="manifest-categories">
          <name>Manifest field categories</name>
          <thead>
            <tr>
              <th>Category</th>
              <th>Purpose</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>Identity</td>
              <td>A stable identifier and human-readable name for the
                extension.</td>
            </tr>
            <tr>
              <td>Version</td>
              <td>The extension's own version and a declared conformance
                level claim (for example L1, L2, or L3).</td>
            </tr>
            <tr>
              <td>Tools</td>
              <td>The list of declared tools, each with name, safety
                classification, parameters, and return shape.</td>
            </tr>
            <tr>
              <td>Capabilities</td>
              <td>Declared capability surface (for example contributed
                panels, channels, or background jobs).</td>
            </tr>
            <tr>
              <td>Permissions</td>
              <td>The minimum permissions the extension requires from the
                kernel and from the actor.</td>
            </tr>
            <tr>
              <td>Compatibility</td>
              <td>The minimum kernel version and the protocol version
                against which the extension was built.</td>
            </tr>
          </tbody>
        </table>
        <t>A compliant kernel MUST validate the manifest against these
          categories before registration. An invalid manifest MUST be
          rejected with a structured error; the extension MUST NOT be
          registered partially.</t>
      </section>

      <section anchor="tool-registration">
        <name>Tool Registration</name>
        <t>A tool declared by an extension MUST be registered into the
          kernel's tool registry and indexed by the Domain Registry
          (<xref target="domain-registry"/>). Registration MUST capture the
          tool's safety classification
          (<xref target="safety-classification"/>). A tool whose safety
          classification cannot be determined MUST be rejected.</t>
      </section>

      <section anchor="extension-lifecycle">
        <name>Extension Lifecycle</name>
        <t>The kernel MUST manage the lifecycle of every extension through
          the following ordered stages:</t>
        <ol>
          <li>Load: read the manifest and the extension code.</li>
          <li>Validate: confirm manifest categorical completeness and
            structural well-formedness. Validation occurs before
            registration; an extension that fails validation MUST NOT be
            registered.</li>
          <li>Register: install tools into the registry and contributions
            into the appropriate kernel surfaces.</li>
          <li>Dispatch: route routed intents to the extension's tools per
            the orchestration rules of
            <xref target="chain-orchestration"/>.</li>
          <li>Unload: remove the extension's tools and contributions
            atomically; in-flight dispatches MUST complete or be cancelled
            before unload finalizes.</li>
        </ol>
        <t>The kernel MUST emit audit events at each stage of the
          lifecycle (<xref target="observability"/>).</t>
      </section>
    </section>

    <!-- ================================================================ -->
    <section anchor="proactive-intelligence">
      <name>Proactive Intelligence Requirements</name>

      <t>Relation to prior art: background observation and alerting is
        well-established in operations engineering, from classic host
        monitors to modern metrics-and-alerting stacks and the long tail of
        scheduled-script monitors. ICNLI's contribution is making proactive
        observation a normative protocol primitive integrated with two-step
        confirmation, the fact ledger, and the same channel-neutral surface
        as user-initiated actions. An anomaly does not become an unattended
        automated remediation; it becomes a proposal the human still
        confirms.</t>

      <section anchor="background-refresh">
        <name>Background Context Refresh</name>
        <t>At Conformance Level 3, the implementation MUST maintain a User
          Intelligence Profile that is refreshed in the background,
          independent of any inbound request. Refresh cadence and scope are
          implementation-specific. The profile MUST be available to the
          classifier and the model layer on every turn.</t>
      </section>

      <section anchor="uip">
        <name>User Intelligence Profile</name>
        <t>The profile MUST capture, at minimum, a summary of the actor's
          relevant services, environments, and resources; a summary of
          recent activity within a configurable window; and outstanding
          follow-ups, pending confirmations, or alert states. The profile
          MUST be subject to the PII masking gate of
          <xref target="pii-gate"/>.</t>
      </section>

      <section anchor="anomaly-surfacing">
        <name>Anomaly Surfacing</name>
        <t>At Conformance Level 3, the implementation SHOULD surface
          anomalies that the User Intelligence Profile is aware of. An
          anomaly is any state divergence from a baseline that the
          implementation considers actionable. Anomaly surfacing MUST occur
          through the same channel-neutral interface as request-response
          traffic.</t>
      </section>

      <section anchor="alert-protocol">
        <name>Alert Protocol</name>
        <t>When the implementation initiates communication with an actor
          (an alert, an anomaly notice, a proposed action), the following
          requirements apply:</t>
        <ol>
          <li>Same interface. Alerts MUST flow through the same protocol
            surface as request-response traffic; the actor's channel
            preference MUST be respected.</li>
          <li>Actionable. An alert that proposes a state-changing action
            MUST be paired with a two-step proposal whose confirmation token
            follows <xref target="confirmation-tokens"/>.</li>
          <li>Auditable. Alerts MUST be recorded in the audit substrate
            exactly as request-response interactions are.</li>
          <li>Suppressible. Actors MUST be able to opt out of alert
            categories without losing access to other protocol
            functionality.</li>
        </ol>
        <t>Proactive is not autonomous: the system watches and proposes;
          the human authorizes.</t>
      </section>
    </section>

    <!-- ================================================================ -->
    <section anchor="channel-support">
      <name>Channel Support</name>

      <t>Relation to prior art: separation between a surface (a UI or
        channel) and the substrate that powers it is a long-established
        software-engineering pattern, including the model-view-controller
        pattern and ports-and-adapters (hexagonal) architecture. ICNLI's
        contribution is orthogonal: cross-surface state continuity (the
        same session, fact ledger, audit trail, and two-step gate preserved
        across channels) is a property that those patterns do not provide
        on their own, because they separate concerns within one application
        whereas channel neutrality preserves them across multiple
        applications and surfaces.</t>

      <section anchor="channel-requirements">
        <name>Channel Requirements</name>
        <t>A compliant implementation MUST support at least one channel and
          SHOULD support multiple channels with equivalent functionality.
          Capabilities MUST be equivalent across supported channels;
          response form MAY differ.</t>
      </section>

      <section anchor="standard-channels">
        <name>Standard Channels (Examples)</name>
        <t>Example channels include a web GUI, a conversational messaging
          channel, a voice channel (speech-to-text input and text-to-speech
          output), a programmatic API, and a command-line interface.
          Implementations MAY add or omit channels; this list is
          illustrative, not normative.</t>
      </section>

      <section anchor="channel-abstraction">
        <name>Channel Abstraction</name>
        <t>Implementations MUST abstract channel-specific details behind a
          stable interface. The interface MUST cover at minimum: receiving a
          message, sending a message, sending a confirmation request, and
          obtaining the authenticated actor context.</t>
      </section>

      <section anchor="response-adaptation">
        <name>Response Adaptation</name>
        <t>Implementations MUST adapt response form to the capabilities of
          the active channel: rich formatting where supported, plain text
          or speech where not. Protocol semantics (two-step, intent
          routing, chain orchestration, anti-fabrication) MUST remain
          identical across channels.</t>
      </section>

      <section anchor="cross-channel-continuity">
        <name>Cross-Channel Continuity</name>
        <t>At Conformance Level 3, the implementation MUST support
          cross-channel continuity: an actor MUST be able to begin an
          interaction on one channel and continue it on another with full
          preservation of context and the fact ledger.</t>
      </section>

      <section anchor="voice-considerations">
        <name>Voice Considerations</name>
        <t>For voice channels, implementations MUST use audio-appropriate
          phrasing, MUST spell out values that are easily confused
          (identifiers, addresses), MUST provide audio confirmation before
          level-3 or level-4 actions, and MUST support actor interruption
          of long responses.</t>
      </section>
    </section>

    <!-- ================================================================ -->
    <section anchor="observability">
      <name>Observability and Audit</name>

      <section anchor="metrics">
        <name>Structured Metrics</name>
        <t>A compliant implementation MUST emit structured metrics for core
          protocol events at minimum: request received and classified; tool
          dispatched, with safety level; confirmation issued, accepted,
          expired, or rejected; chain step started, completed, or failed;
          and alert emitted by the proactive subsystem. Metric names and the
          labelling vocabulary are implementation-specific. Metrics MUST NOT
          carry PII in label values; identifying values belong in trace
          attributes or audit records, not on metric series.</t>
      </section>

      <section anchor="tracing">
        <name>Distributed Tracing</name>
        <t>A compliant implementation SHOULD emit distributed traces
          compatible with OpenTelemetry semantic conventions. Spans SHOULD
          cover at minimum the lifetime of a request, each classification
          step, each tool dispatch, and each chain step. Spans MUST carry a
          trace identifier that correlates with structured log entries.</t>
      </section>

      <section anchor="logs">
        <name>Structured Logs</name>
        <t>A compliant implementation MUST emit structured logs (JSON or an
          equivalent structured format) and MUST include the trace
          identifier of the active span. Logs MUST capture authentication
          events, classification decisions, tool dispatches and their
          parameters (with sensitive values masked), confirmations, errors,
          and lifecycle events. An illustrative log entry follows.</t>
        <sourcecode type="json" name="log-entry"><![CDATA[
{
  "timestamp": "2026-05-17T10:15:30.123Z",
  "trace_id": "0af7651916cd43dd8448eb211c80319c",
  "event_type": "tool_dispatch",
  "actor": {
    "id": "actor_12345",
    "role": "client",
    "auth_method": "session_token"
  },
  "session_id": "sess_abc123",
  "channel": "messaging",
  "request_intent": "DELETE_DATABASE",
  "request_text_redacted": "<masked: PII gate active>",
  "resolved_target": "db_redacted_<hash>",
  "tool": "resource_delete",
  "safety_level": 3,
  "confirmation": {
    "requested": true,
    "received": true,
    "latency_ms": 4200
  },
  "parameters_masked": true,
  "result": "success",
  "duration_ms": 1247,
  "audit_chain_hash": "<sha256:prev_block>",
  "audit_block_hash": "<sha256:this_block>"
}
]]></sourcecode>
      </section>

      <section anchor="audit-trail">
        <name>Audit Trail</name>
        <t>A compliant implementation MUST maintain a complete audit trail
          of every interaction sufficient to reconstruct, after the fact,
          what was asked, how it was classified, what was dispatched, what
          was confirmed, and what was produced. The audit trail MUST be
          tamper-evident or stored in a system providing tamper-evidence at
          the deployment layer.</t>
      </section>

      <section anchor="audit-chain">
        <name>Audit Chain Tamper-Evidence</name>
        <t>Audit log entries MUST be linked into a hash chain where each
          entry's block hash is computed over the entry's content
          concatenated with the prior entry's block hash. Implementations
          MAY use cryptographic signatures over hash blocks in addition to
          chaining. The hash chain MUST allow detection of any single-entry
          tampering by chain re-validation, SHOULD use SHA-256 or stronger
          as the digest function, and SHOULD persist the chain in
          append-only storage or its functional equivalent.</t>
        <t>This requirement applies at Conformance Level 2 and above. Level
          1 implementations MAY log without chaining; if they do, they MUST
          NOT describe their audit trail as tamper-evident.</t>
      </section>

      <section anchor="fail-soft">
        <name>Fail-Soft Telemetry</name>
        <t>Telemetry failure MUST NOT break the request path. If a metrics
          backend, tracing collector, or log target is unavailable, the
          implementation MUST continue to serve requests; degraded
          telemetry SHOULD itself be surfaced as a metric.</t>
      </section>
    </section>

    <!-- ================================================================ -->
    <section anchor="conformance-levels">
      <name>Conformance Levels</name>
      <t>ICNLI defines three conformance levels. Higher levels include all
        requirements of lower levels.</t>

      <section anchor="level-1">
        <name>Level 1 (Basic)</name>
        <t>A Level 1 implementation MUST implement two-step confirmation for
          all mutations; maintain context levels L0 through L2; support at
          least one channel; provide tool discovery (the manifest categories
          of <xref target="manifest-schema"/> exposed via at least one
          introspection surface); log all operations with timestamps; and
          satisfy the Anti-Fabrication Contract
          (<xref target="anti-fabrication"/>) in full. Anti-fabrication is
          REQUIRED at every level.</t>
      </section>

      <section anchor="level-2">
        <name>Level 2 (Standard)</name>
        <t>A Level 2 implementation MUST satisfy all Level 1 requirements
          and additionally maintain context levels L0 through L6; implement
          safety classification levels 0 through 4 with the requirements of
          <xref target="safety-layer"/>; satisfy the Modular Extension
          Contract (<xref target="extension-contract"/>) in full, including
          manifest validation before registration; implement intent
          classification before tool selection
          (<xref target="intent-routing"/>); support at least two channels
          with equivalent functionality (SHOULD; one channel remains the
          floor); enforce role-based access control across all dispatches;
          and issue confirmation tokens with expiration per
          <xref target="confirmation-tokens"/>.</t>
      </section>

      <section anchor="level-3">
        <name>Level 3 (Advanced)</name>
        <t>A Level 3 implementation MUST satisfy all Level 2 requirements
          and additionally maintain context levels L0 through L8 including
          relationship and interconnection context; implement Chain
          Orchestration (<xref target="chain-requirements"/>) including
          Step-Output References
          (<xref target="step-output-references"/>); satisfy the Proactive
          Intelligence Requirements (<xref target="proactive-intelligence"/>)
          in full, including the User Intelligence Profile and the Alert
          Protocol; provide cross-channel continuity
          (<xref target="cross-channel-continuity"/>); support a voice
          channel where the deployment context warrants (SHOULD); implement
          danger-phrase confirmation for CRITICAL operations and the cooling
          period of <xref target="safety-by-level"/>; and implement the full
          Observability and Audit requirements of
          <xref target="observability"/>.</t>
      </section>

      <section anchor="conformance-declaration">
        <name>Conformance Declaration</name>
        <t>A compliant implementation MUST publish a conformance declaration
          in machine-readable form. The schema is implementation-specific;
          the following example illustrates the required information.</t>
        <sourcecode type="json" name="conformance-declaration"><![CDATA[
{
  "icnli": {
    "specification_version": "2.0.0",
    "conformance_level": 3,
    "channels": ["web", "messaging", "api"],
    "context_levels": [0, 1, 2, 3, 4, 5, 6, 7, 8],
    "safety_levels": [0, 1, 2, 3, 4],
    "anti_fabrication_contract": true,
    "modular_extension_contract": true,
    "chain_orchestration": true,
    "proactive_intelligence": true,
    "observability": ["metrics", "traces", "logs", "audit"],
    "vendor": "Example Compliant Implementation",
    "vendor_version": "1.0.0"
  }
}
]]></sourcecode>
      </section>

      <section anchor="conformance-verification">
        <name>Current State of Conformance Verification</name>
        <t>Conformance to ICNLI version 2.0.0 is currently self-declared.
          There is no automated test suite, no canonical reference fixtures,
          and no adversarial conformance harness at the time of this
          document's publication. This is a known gap. Until the test suite
          ships:</t>
        <ul>
          <li>"ICNLI v2.0 compliant" is a statement of intent by an
            implementer.</li>
          <li>"ICNLI v2.0 certified" is reserved for implementations that
            pass the published test suite. No implementation may claim
            certification before the suite exists.</li>
          <li>Implementations SHOULD publish their conformance
            self-assessment as a checklist mapped to specific MUST and
            SHOULD clauses, so that independent reviewers can evaluate the
            claim against the specification text.</li>
        </ul>
        <t>Implementations claiming any level of conformance MUST NOT use
          the term "certified" until automated verification is
          available.</t>
      </section>
    </section>

    <!-- ================================================================ -->
    <section anchor="status-and-relationship">
      <name>Status of the Protocol and Relationship to Other Work</name>
      <t>ICNLI is a vendor-authored open specification. The specification
        text is published under CC BY-SA 4.0 at
        <eref target="https://icnli.org/icnli-specification/"/>, which
        guarantees that the text cannot be locked behind a single vendor.
        At the time of writing there is one specification author, and the
        protocol has been described by its author with a stated path toward
        broader governance.</t>
      <t>The author has stated three governance milestones, in order: (1) a
        published conformance test suite with reference fixtures and
        adversarial tests; (2) at least three independent compliant
        implementations from organizations unaffiliated with the author's
        organization, each passing that suite; and (3) transfer of the
        specification's evolution process and associated marks to a neutral
        body with a public change-control procedure and multi-organization
        representation. Until all three milestones are achieved, ICNLI is
        honestly described as a vendor-authored open specification with
        multi-vendor governance as a stated commitment, not a present
        claim.</t>
      <t>Accordingly, this Internet-Draft makes no claim that ICNLI is an
        adopted standard, an IETF work item, an RFC, or a
        multi-vendor-adopted protocol. It is published as an individual
        submission to create a dated, citable technical description for the
        community and to invite review. ICNLI composes with, rather than
        replaces, adjacent work: a compliant implementation MAY use any
        underlying foundation model, MAY use the Model Context Protocol
        <xref target="MCP"/> or a model-native function-calling capability
        at the model-to-tool boundary, and MAY use any orchestration
        runtime that can satisfy the contract described here.</t>
      <t>The flagship implementation referenced by the specification is
        Imperal Cloud, with a reference agent named Webbee, and a public
        reference toolkit and machine-readable Tool Definition schema
        published as imperal-sdk <xref target="IMPERAL-SDK"/>; the
        specification names WebHostMost as the first enterprise client
        running an ICNLI-compliant deployment in production. For
        transparency, WebHostMost shares a founder with Imperal, Inc. This
        document intentionally omits operational metrics; any operational
        numbers should be sought in, and attributed to, the ICNLI
        whitepaper <xref target="ICNLI-WP"/> as representative figures for a
        stated window, never as
        independent benchmarks.</t>
    </section>

    <!-- ================================================================ -->
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Security is central to this protocol rather than incidental to it;
        several normative requirements elsewhere in this document are
        security controls. The considerations below summarize and
        consolidate them.</t>

      <section anchor="sec-authn">
        <name>Authentication</name>
        <t>Implementations MUST authenticate actors before processing any
          request, MUST support industry-standard authentication methods,
          MUST NOT store credentials in plain text, and MUST implement
          session timeouts appropriate to the deployment context. Actor
          identity (L1 context) is a precondition for all higher-level
          context resolution.</t>
      </section>

      <section anchor="sec-authz">
        <name>Authorization</name>
        <t>Implementations MUST verify permissions before tool dispatch,
          MUST follow the principle of least privilege, MUST log
          authorization failures, and MUST support permission delegation
          only within bounded scopes with explicit time limits. Role-based
          access control (<xref target="role-based-safety"/>) MUST be
          enforced on every dispatch.</t>
      </section>

      <section anchor="sec-input">
        <name>Input Validation</name>
        <t>Implementations MUST validate all input against declared
          schemas, MUST sanitize input to prevent injection, MUST reject
          malformed requests with structured errors, and MUST implement rate
          limiting appropriate to the channel. Because the primary input is
          untrusted natural language interpreted by a model, implementations
          should treat prompt-injection and tool-misuse attempts as expected
          adversarial input: the two-step gate
          (<xref target="two-step"/>), intent-routed tool selection
          (<xref target="intent-routed-selection"/>), and the requirement
          that the kernel rather than the model executes actions are the
          structural mitigations the protocol provides.</t>
      </section>

      <section anchor="sec-data">
        <name>Data Protection</name>
        <t>Implementations MUST encrypt sensitive data at rest, MUST use TLS
          for transport, MUST mask sensitive values in logs and metric
          labels, MUST implement data-retention policies appropriate to the
          deployment domain, and MUST support on-premises deployment for
          domains that require it. The PII masking gate
          (<xref target="pii-gate"/>) is enabled by default and limits the
          private data exposed to the model layer; any opt-in exposure MUST
          be explicit, configurable, and auditable.</t>
      </section>

      <section anchor="sec-audit">
        <name>Audit Integrity</name>
        <t>The audit trail required by <xref target="audit-trail"/> MUST be
          protected from tampering by the implementation or by the
          deployment substrate, and MUST be retained for a period
          appropriate to the domain. The hash-chain requirement of
          <xref target="audit-chain"/> provides tamper-evidence at
          Conformance Level 2 and above; implementations MUST NOT describe an
          unchained audit trail as tamper-evident.</t>
      </section>
    </section>

    <!-- ================================================================ -->
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</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">
            <organization>Harvard University</organization>
          </author>
          <date year="1997" month="March"/>
        </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">
            <organization>Huawei Technologies</organization>
          </author>
          <date year="2017" month="May"/>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
    </references>

    <references>
      <name>Informative References</name>

      <reference anchor="ICNLI-SPEC" target="https://icnli.org/icnli-specification/">
        <front>
          <title>ICNLI Specification v2.0 - The Open Protocol for Modular
            Proactive AI Cloud Operating Systems</title>
          <author initials="V." surname="Scerbacov"
                   fullname="Valentin Scerbacov">
            <organization>Imperal, Inc.</organization>
          </author>
          <date year="2026" month="May"/>
        </front>
        <refcontent>Version 2.0.0, Published Specification, licensed under
          CC BY-SA 4.0</refcontent>
      </reference>

      <reference anchor="ICNLI-ZENODO" target="https://doi.org/10.5281/zenodo.20684403">
        <front>
          <title>ICNLI Specification v2.0 (archived deposit)</title>
          <author initials="V." surname="Scerbacov"
                   fullname="Valentin Scerbacov">
            <organization>Imperal, Inc.</organization>
          </author>
          <date year="2026"/>
        </front>
        <refcontent>Zenodo deposit, DOI 10.5281/zenodo.20684403 (archived ICNLI Specification v2.0; concept DOI 10.5281/zenodo.20684402)</refcontent>
      </reference>

      <reference anchor="ICNLI-WP" target="https://icnli.org/icnli-whitepaper/">
        <front>
          <title>ICNLI Whitepaper</title>
          <author initials="V." surname="Scerbacov"
                   fullname="Valentin Scerbacov">
            <organization>Imperal, Inc.</organization>
          </author>
          <date year="2026" month="May"/>
        </front>
        <refcontent>Architecture, rationale, deployment, and representative
          operational figures; licensed under CC BY-SA 4.0</refcontent>
      </reference>

      <reference anchor="IMPERAL-SDK" target="https://pypi.org/project/imperal-sdk/">
        <front>
          <title>imperal-sdk: reference SDK and Tool Definition JSON
            Schema</title>
          <author>
            <organization>Imperal, Inc.</organization>
          </author>
          <date year="2026"/>
        </front>
        <refcontent>Python package, install via "pip install
          imperal-sdk"</refcontent>
      </reference>

      <reference anchor="MCP" target="https://modelcontextprotocol.io/">
        <front>
          <title>Model Context Protocol (MCP)</title>
          <author>
            <organization>Anthropic, PBC</organization>
          </author>
          <date year="2024"/>
        </front>
        <refcontent>An open protocol standardizing how applications provide
          context and tools to AI models</refcontent>
      </reference>
    </references>

    <section anchor="ack">
      <name>Acknowledgements</name>
      <t>This document is a rendering of the ICNLI Specification version 2.0.0
        <xref target="ICNLI-SPEC"/> authored by Valentin Scerbacov. The
        protocol's prior-art discussion gratefully recognizes the
        engineering of the Model Context Protocol, model-native
        function-calling capabilities, agent frameworks, foundation-model
        providers, and decades of systems-engineering practice in
        confirmation gates, monitoring, and surface-substrate separation, on
        which ICNLI builds and with which it is designed to compose.</t>
    </section>
  </back>

</rfc>
