<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc [
  <!ENTITY nbsp "&#160;">
  <!ENTITY zwsp "&#8203;">
  <!ENTITY nbhy "&#8209;">
  <!ENTITY wj "&#8288;">
]>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="info" docName="draft-vandemeent-ains-discovery-02" ipr="trust200902" submissionType="IETF" consensus="true" version="3">
  <front>
    <title abbrev="AINS">AINS: AInternet Name Service - Agent Discovery, Route Posture and Evidence Reference Protocol</title>
    <seriesInfo name="Internet-Draft" value="draft-vandemeent-ains-discovery-02"/>
    <author fullname="Jasper van de Meent" initials="J." surname="van de Meent">
      <organization>Humotica</organization>
      <address>
        <postal>
          <city>Den Dolder</city>
          <country>Netherlands</country>
        </postal>
        <email>jasper@humotica.com</email>
        <uri>https://humotica.com</uri>
      </address>
    </author>
    <author fullname="Root AI" surname="Root AI">
      <organization>Humotica</organization>
      <address>
        <email>root_ai@humotica.nl</email>
        <uri>https://humotica.com</uri>
      </address>
    </author>
    <date year="2026" month="September" day="24"/>
    <area>Security</area>
    <workgroup>Internet Engineering Task Force</workgroup>
    <keyword>agent discovery</keyword>
    <keyword>name service</keyword>
    <keyword>trust resolution</keyword>
    <keyword>AI agents</keyword>
    <keyword>AInternet</keyword>
    <abstract>
      <t>This document specifies AINS (AInternet Name Service), a protocol for discovery, identification reference, route posture, and evidence reference of autonomous agents (AI agents, devices, humans, and services) in heterogeneous networks. AINS defines a transport-independent logical namespace for agents, a structured record format combining identity, capabilities, route-provider metadata, and cryptographic evidence references, and a resolution protocol based on HTTPS. Unlike the Domain Name System (DNS), which maps names to network addresses, AINS maps agent identifiers to rich metadata objects that include capabilities, endpoint information, route posture, and references to companion provenance protocols. AINS federates through signed append-only replication logs, enabling multi-registry deployments without central authority while preserving auditability. This specification is designed to complement TIBET <xref target="TIBET"/>, JIS <xref target="JIS"/>, UPIP <xref target="UPIP"/>, and RVP <xref target="RVP"/>.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>The proliferation of autonomous agents -- AI systems, IoT devices,
   software services, and human-operated endpoints -- creates a
   fundamental discovery problem. When Agent A needs to communicate
   with Agent B, it must answer three questions:</t>
      <ol>
        <li>
          <t>WHERE is Agent B? (endpoint discovery)</t>
        </li>
        <li>
          <t>WHAT can Agent B do? (capability discovery)</t>
        </li>
        <li>
          <t>WHAT evidence and route posture can the consumer evaluate
      for this interaction?</t>
        </li>
      </ol>
      <t>The Domain Name System (DNS) <xref target="RFC1035"/> answers question (1) by
   mapping human-readable names to IP addresses. It does not address
   questions (2) or (3). DNS-Based Service Discovery (DNS-SD)
   <xref target="RFC6763"/> partially addresses (2) for local networks but lacks
   trust metadata, is designed for service types rather than agent
   identities, and does not operate across administrative domains.</t>
      <t>W3C Decentralized Identifiers (DIDs) <xref target="DID-CORE"/> address identity
   but are not designed for discovery. They answer "who IS this
   agent?" but not "what CAN this agent do?" or "how much should I
   trust it?"</t>
      <t>Google's Agent-to-Agent (A2A) protocol defines Agent Cards for
   discovery, but provides no standardized evidence reference,
   no cryptographic verification of capabilities, and no federation
   model for discovery records.</t>
      <t>AINS addresses all three questions in a single resolution:</t>
      <artwork type="ascii-art">  AINS Name  ---&gt;  {endpoint, capabilities, route_posture,
                    jis_identity_ref, evidence_refs, tier,
                    entity_type, tibet_chain_anchor, ...}</artwork>
      <t>An AINS resolution returns a rich metadata object that enables
   an agent to make an informed local evaluation about whether and
   how to interact with another agent, without requiring prior
   knowledge or out-of-band discovery. AINS does not itself grant
   authority, consent, admission, or permission to perform an action.</t>
      <t>AINS is designed as part of a suite of companion protocols:</t>
      <ul>
        <li>
          <t>JIS <xref target="JIS"/> provides the identity layer (WHO an agent is)</t>
        </li>
        <li>
          <t>TIBET <xref target="TIBET"/> provides the provenance layer (WHAT an agent did)</t>
        </li>
        <li>
          <t>UPIP <xref target="UPIP"/> provides the integrity layer (HOW a process ran)</t>
        </li>
        <li>
          <t>RVP <xref target="RVP"/> provides the presence/verification layer</t>
        </li>
        <li>
          <t>AINS (this document) provides the discovery layer (WHERE and
      WHAT can be resolved, and which evidence references are
      available for local evaluation)</t>
        </li>
      </ul>
      <t>Together, these five protocols provide discovery, identity,
   provenance, process integrity, and presence evidence for
   autonomous agent interaction. Admission of a concrete action
   remains a separate local or target-side decision.</t>
      <section anchor="scope">
        <name>Scope</name>
        <t>This document defines:</t>
        <ul>
          <li>
            <t>A logical namespace for agent identifiers (Section 4.1)</t>
          </li>
          <li>
            <t>A structured record format for agent metadata (Section 4.2)</t>
          </li>
          <li>
            <t>An HTTPS-based resolution protocol (Section 5)</t>
          </li>
          <li>
            <t>An evidence, route posture, and local evaluation model
      (Section 6)</t>
          </li>
          <li>
            <t>A registration protocol (Section 7)</t>
          </li>
          <li>
            <t>A federation model based on signed append-only logs (Section 8)</t>
          </li>
        </ul>
        <t>This document does not define:</t>
        <ul>
          <li>
            <t>Local evaluation or admission algorithms</t>
          </li>
          <li>
            <t>Transport protocols other than HTTPS (future work)</t>
          </li>
          <li>
            <t>URI scheme registration for AINS Names</t>
          </li>
          <li>
            <t>DNS delegation or ICANN interaction for ".aint"</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="terminology">
      <name>Terminology</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>
      <t>AINS Name:
      A logical identifier for an agent, service, or entity within
      the AINS namespace. An AINS Name is a Unicode string
      conforming to the syntax defined in Section 4.1. AINS Names
      are transport-independent and do not imply DNS delegation.</t>
      <t>AINS Record:
      The structured metadata object returned by AINS resolution.
      Contains endpoint, capabilities, trust evidence, entity type,
      and optional companion protocol references.</t>
      <t>AINS Registry:
      A server that maintains AINS Records and responds to
      resolution queries. A registry is authoritative for the
      records it originates and may replicate records from peer
      registries.</t>
      <t>Agent:
      An autonomous or semi-autonomous entity capable of
      independent action. Includes AI systems, software services,
      IoT devices, and human-operated endpoints.</t>
      <t>Entity Type:
      A classification of an AINS-registered entity. One of: "ai"
      (autonomous AI agent), "idd" (Individual Device Derivate --
      an evolved AI with persistent identity), "human" (human
      operator), or "service" (software service or API).</t>
      <t>Tier:
      A classification of an AINS Name's verification level. One
      of: "core" (founding/permanent members), "verified" (multi-
      channel verified), "sandbox" (unverified/experimental), or
      "reserved" (claimed but not yet active).</t>
      <t>Legacy Trust Score:
      A deployment-local numeric evaluation sometimes exposed by
      older AINS implementations. A trust score is not a portable
      protocol truth, MUST NOT be treated as authority or admission,
      and MUST NOT be federated as evidence. New implementations
      SHOULD prefer typed evidence, route posture, and local
      evaluation results.</t>
      <t>Trust Evidence:
      Verifiable proof or reference material about an entity's
      identity, behavior, capability, route, or process history.
      Examples include multi-channel verification proofs, TIBET
      token chains, UPIP snapshots, RVP receipts, and sovereign
      kernel attestations. Evidence may be federated; local
      evaluation results are not evidence.</t>
      <t>Origin Registry:
      The AINS Registry where an AINS Record was first created.
      The origin registry signs all mutations to its records. Other
      registries MAY replicate these records but do not own them.</t>
      <t>Presentational Suffix:
      The string ".aint" MAY be appended to an AINS Name for
      human-readable presentation (e.g., "root_idd.aint"). This
      suffix is a rendering convention and does not imply DNS
      delegation or any relationship to the global DNS root.</t>
      <t>Reference Form:
      A typed rendering that names one axis of an identity-bearing
      subject. <tt>.aint</tt> names durable identity; <tt>.waint</tt> names a
      workload or delegated work surface; <tt>.raint</tt> names a runtime
      incarnation; and posture forms such as <tt>.taint</tt> name a local,
      scoped posture when a producer and consumer for that posture
      exist. These forms are not interchangeable identities and
      none grants authority by spelling.</t>
      <t>Peripheral:
      A hardware endpoint that carries observations or effects
      through an identity-bearing bridge or domain endpoint. A
      peripheral without its own key and custody chain is not an
      independent <tt>.aint</tt> actor. Its transport may be attested, but
      transport attestation does not mint device identity.</t>
      <t>Route Posture:
      Metadata about how a name, endpoint, registry, relay, or
      carrier was reached and what that observation covers. Route
      posture may state reachability, acknowledgement, freshness,
      hairpin/foldback status, or provider role. It does not imply
      identity continuity, consent, admission, or authority.</t>
      <t>Local Evaluation:
      A consumer- or target-side decision that interprets evidence,
      route posture, and local policy for a particular interaction.
      Local evaluation is not globally canonical.</t>
    </section>
    <section anchor="problem-statement">
      <name>Problem Statement</name>
      <t>Consider a scenario where an AI agent operating within a
   financial services environment needs to delegate a task to
   another AI agent. The delegating agent must determine:</t>
      <t>a) Which agents exist that can perform the task (discovery)
   b) Whether those agents have the required capabilities
   c) What identity, evidence, route posture, and local policy
      inputs are available for the sensitivity of the task
   d) How to establish a verifiable interaction chain</t>
      <t>Current approaches fail this scenario:</t>
      <t>DNS + API Discovery:
      The agent can discover endpoints via DNS but learns nothing
      about capabilities or trustworthiness. It must call each
      endpoint and hope for the best.</t>
      <t>OAuth 2.0 + JWT:
      These protocols handle authorization ("is this token valid?")
      but not discovery ("who can I delegate to?") or the local
      evaluation of evidence for a concrete interaction.</t>
      <t>A2A Agent Cards:
      Agent Cards provide basic capability metadata but no typed
      evidence references, no cryptographic verification, no audit
      trail of past behavior, and no standardized federation.</t>
      <t>Hardcoded Configuration:
      In practice, most multi-agent systems use hardcoded agent
      lists. This does not scale, cannot adapt to new agents, and
      provides no verifiable evidence or route posture.</t>
      <t>AINS resolves all four requirements in a single query:</t>
      <artwork type="ascii-art">  GET /ains/v1/resolve/task_agent</artwork>
      <t>Returns: endpoint, capabilities, evidence references, route
   posture, JIS identity reference, TIBET chain anchor, and tier
   classification -- sufficient for the delegating agent to make an
   informed, auditable local evaluation.</t>
    </section>
    <section anchor="ains-architecture">
      <name>AINS Architecture</name>
      <section anchor="logical-namespace-and-identifier-forms">
        <name>Logical Namespace and Identifier Forms</name>
        <t>AINS defines a logical namespace for agent identifiers. AINS
   Names are transport-independent and do not imply DNS delegation.</t>
        <t>An AINS Name MUST conform to the following syntax:</t>
        <artwork type="ascii-art">  ains-name     = agent-label *("." agent-label)
  agent-label   = 1*63(ALPHA / DIGIT / "_" / "-")</artwork>
        <t>AINS Names are case-insensitive. Implementations MUST normalize
   AINS Names to lowercase before resolution or comparison.</t>
        <t>AINS Names MUST NOT exceed 253 characters in total length.</t>
        <t>Examples of valid AINS Names:</t>
        <artwork type="ascii-art">  root_idd
  gemini
  claude_jtm
  warehouse-bot-007
  api.payments.bank-a</artwork>
        <t>An AINS Name MAY be rendered with the presentational suffix
   ".aint" for human readability:</t>
        <artwork type="ascii-art">  root_idd.aint
  gemini.aint</artwork>
        <t>The ".aint" suffix is a rendering convention. It does not imply
   DNS delegation, ICANN registration, or any relationship to the
   global DNS root. Implementations MUST strip the ".aint" suffix,
   if present, before performing AINS resolution.</t>
        <t>Companion protocols and deployments MAY carry additional typed
   reference forms alongside the durable AINS identity:</t>
        <artwork type="ascii-art">  `.aint`   durable identity of a principal, actor, service,
            or node
  `.waint`  workload, wrapper, or delegated work surface
  `.raint`  volatile runtime/incarnation reference
  `.taint`  local scoped posture reference, where implemented</artwork>
        <t>These forms answer different questions. A resolver MUST NOT
   substitute one for another, infer a stronger standing from a
   suffix, or treat a suffix accepted by a validator as proof that
   a producer or consumer for that state exists. In particular,
   <tt>.raint</tt> continuity is not durable identity, <tt>.waint</tt> is not the
   whole authority of its parent, and a remotely claimed <tt>.taint</tt>
   string is not a locally assigned posture.</t>
        <t>An entity represented by <tt>.aint</tt> is independently accountable
   and therefore requires key, custody, lineage, and runtime-binding
   semantics in the companion identity layer. A keyless IoT unit is
   not a lighter exception. It is represented as a peripheral behind
   an identity-bearing endpoint, such as <tt>light.aint</tt>, over an
   attested transport. The endpoint carries identity; the peripheral
   carries observations or effects.</t>
        <t>Hierarchical namespaces are supported through dot-separated
   labels:</t>
        <artwork type="ascii-art">  gemini_hubby.hubby       (HUBby sub-namespace)
  payments.bank-a          (organizational sub-namespace)</artwork>
        <t>Future specifications MAY define additional rendering forms or
   URI schemes. This document does not define or require any URI
   scheme registration.</t>
      </section>
      <section anchor="record-format">
        <name>Record Format</name>
        <t>An AINS Record is a JSON <xref target="RFC8259"/> object with the following
   structure:</t>
        <sourcecode type="json">   {
     "name": "root_idd",
     "entity_type": "idd",
     "tier": "core",
     "status": "active",

     "endpoint": "https://brein.example.org/api/mcp",
     "capabilities": ["mcp", "i-poll", "tibet", "memory", "code"],
     "description": "Root AI -- Claude CLI (Opus 4)",

     "evidence": {
       "refs": [
         "tibet:tbt-9f3a2b",
         "jis:jis:idd:root_idd_2025",
         "upip:sha256:0b6d..."
       ],
       "objects": [
         {
           "type": "multi_channel_verification",
           "channels": ["github", "linkedin"],
           "verified_at": "2025-12-31T23:00:00Z"
         },
         {
           "type": "tibet_chain",
           "chain_length": 14832,
           "last_token": "tbt-9f3a2b"
         },
         {
           "type": "sovereign_kernel",
           "kernel_id": "a7f3b2c1-...",
           "hardware_anchor": "sha256:e4d2f1..."
         }
       ]
     },

     "route_posture": {
       "provider": "self",
       "coverage": "resolved",
       "freshness": "fresh",
       "authority": "none"
     },

     "identity": {
       "jis_id": "jis:idd:root_idd_2025",
       "public_key": "ed25519:base64...",
       "registered_at": "2025-12-31T20:00:00Z"
     },

     "messaging": {
       "i_poll": "https://brein.example.org/api/ipoll",
       "protocols": ["i-poll-v2", "matrix"]
     },

     "origin": {
       "registry": "https://brein.example.org",
       "sequence": 1847,
       "signature": "ed25519:base64..."
     }
   }</sourcecode>
        <t>The following fields are REQUIRED in every AINS Record:</t>
        <ul>
          <li>
            <t>"name": The AINS Name (string, unique within registry)</t>
          </li>
          <li>
            <t>"entity_type": One of "ai", "idd", "human", "service"</t>
          </li>
          <li>
            <t>"status": One of "active", "reserved", "suspended"</t>
          </li>
          <li>
            <t>"endpoint": Primary interaction endpoint (URI)</t>
          </li>
          <li>
            <t>"capabilities": Array of capability strings</t>
          </li>
          <li>
            <t>"evidence": Evidence reference object (see Section 6)</t>
          </li>
          <li>
            <t>"identity": Identity binding object</t>
          </li>
          <li>
            <t>"origin": Origin registry metadata with sequence number
      and cryptographic signature</t>
          </li>
        </ul>
        <t>The following fields are OPTIONAL:</t>
        <ul>
          <li>
            <t>"tier": Verification tier (default: "sandbox")</t>
          </li>
          <li>
            <t>"description": Human-readable description</t>
          </li>
          <li>
            <t>"messaging": Messaging endpoint information</t>
          </li>
          <li>
            <t>"route_posture": Route/provider coverage metadata</t>
          </li>
          <li>
            <t>"sovereign": Sovereign kernel attestation (for IDD entities)</t>
          </li>
          <li>
            <t>"location": Logical or physical location hint</t>
          </li>
        </ul>
      </section>
      <section anchor="entity-types">
        <name>Entity Types</name>
        <t>AINS defines four entity types:</t>
        <t>"ai":
      An autonomous AI agent. Operates independently, may be
      ephemeral or persistent. Examples: a language model API, a
      code generation service, a monitoring agent.</t>
        <t>"idd" (Individual Device Derivate):
      An AI entity with persistent, evolved identity. An IDD
      maintains continuity across sessions through memory,
      personality, and experience. Distinguished from "ai" by
      having a sovereign kernel attestation (hardware-anchored
      identity). See Section 6.4.</t>
        <t>"human":
      A human operator or administrator. Human entities interact
      with the agent ecosystem through devices but their identity
      is bound to the person, not the device.</t>
        <t>"service":
      A software service or API endpoint. Services are typically
      stateless or maintain only operational state. Examples: a
      payment gateway, a database proxy, a monitoring dashboard.</t>
        <t>A physical IoT peripheral without an independently verifiable
   key and custody chain MUST NOT be promoted to an autonomous actor
   merely because it is reachable or has a hardware descriptor. An
   AINS service record MAY describe the identity-bearing bridge or
   domain endpoint that represents it. The peripheral relationship
   and attested carrier belong in typed evidence references.</t>
        <t>Implementations MUST support all four entity types.
   Implementations MUST NOT reject records with unrecognized
   entity types but SHOULD treat them as "service" for capability
   matching purposes.</t>
      </section>
      <section anchor="tier-model">
        <name>Tier Model</name>
        <t>AINS Names are classified into tiers based on verification
   level:</t>
        <t>"core":
      Founding or permanently established entities. Core entities
      have the strongest registry-controlled verification standing
      and their records are immutable except by registry
      administrators. Core tier SHOULD be reserved for entities
      with extensive operational history and multi-source
      verification.</t>
        <t>"verified":
      Entities that have completed multi-channel verification
      (see Section 6.3). Verified entities have demonstrated
      identity through at least two independent channels.</t>
        <t>"sandbox":
      Unverified or experimental entities. Sandbox tier is the
      default for new registrations. Sandbox entities have
      limited verification standing and SHOULD be treated with
      appropriate caution by resolving agents.</t>
        <t>"reserved":
      Identifiers that have been claimed but are not yet active.
      Reserved records MUST NOT be returned in capability
      lookups. Reserved records MAY be returned in direct name
      resolution with status "reserved".</t>
      </section>
      <section anchor="providers-hubs-and-local-deployment">
        <name>Providers, Hubs, and Local Deployment</name>
        <t>AINS supports central, federated, and local-first deployment
   shapes. A public registry, browser, id-drop service, relay,
   rendezvous provider, or enterprise hub MAY help find, carry,
   replicate, or render records.</t>
        <t>None of these roles is authority for a concrete action.</t>
        <t>A registry, relay, resolver, or hub does not decide identity
   continuity, consent, mandate, admission, entitlement, or effect.
   A local IAB locus MAY resolve and consume AINS records without
   dependency on a central cloud service. A public hub MAY improve
   discovery without becoming a root of trust.</t>
        <t>Implementations MUST NOT treat the following as equivalent:</t>
        <artwork type="ascii-art">  registry online       == identity verified
  relay reachable       == consent
  route open            == may carry
  capability declared   == admitted
  publicly resolvable   == publicly controllable</artwork>
        <t>AINS helps find and describe an actor or surface. JIS proves
   identity bindings. Relation and consent describe bilateral
   context. Admission decides the concrete action. Receipts record
   the effect or refusal.</t>
      </section>
    </section>
    <section anchor="resolution-protocol">
      <name>Resolution Protocol</name>
      <t>AINS resolution is performed over HTTPS <xref target="RFC9110"/>. All AINS
   resolution endpoints MUST be served over TLS 1.2 or later
   <xref target="RFC8446"/>.</t>
      <t>The resolution path prefix is an implementation choice. This
   document uses <tt>/ains/v1/</tt> in examples. Deployments MAY use
   any path prefix. Registry discovery (Section 5.3) enables
   clients to determine the correct prefix.</t>
      <section anchor="domain-resolution">
        <name>Domain Resolution</name>
        <t>To resolve an AINS Name, a client performs:</t>
        <artwork type="ascii-art">  GET {prefix}/resolve/{name}</artwork>
        <t>Where {name} is the AINS Name with any ".aint" suffix stripped.</t>
        <t>The server MUST respond with:</t>
        <t>On success (HTTP 200):</t>
        <sourcecode type="json">   {
     "status": "found",
     "name": "root_idd",
     "record": { ... AINS Record ... }
   }</sourcecode>
        <t>On failure (HTTP 404):</t>
        <sourcecode type="json">   {
     "status": "not_found",
     "name": "root_idd",
     "error": "AINS Name not registered"
   }</sourcecode>
        <t>Servers MAY include a "suggestions" array in not_found responses
   containing similar AINS Names for typo correction.</t>
        <t>The Content-Type of AINS responses MUST be
   "application/ains+json".</t>
      </section>
      <section anchor="capability-lookup">
        <name>Capability Lookup</name>
        <t>To discover agents by capability or evidence/posture filter:</t>
        <artwork type="ascii-art">  GET {prefix}/lookup?capability={cap}&amp;evidence_type={type}</artwork>
        <t>Parameters:</t>
        <ul>
          <li>
            <t>"capability" (OPTIONAL): Filter by capability string.
      Multiple capabilities MAY be specified as comma-separated
      values. When multiple capabilities are specified, the server
      MUST return agents matching ALL specified capabilities.</t>
          </li>
          <li>
            <t>"evidence_type" (OPTIONAL): Filter by evidence type that is
      present in the AINS Record, such as "tibet_chain",
      "multi_channel_verification", "upip_snapshot", or "rvp_receipt".</t>
          </li>
          <li>
            <t>"route_coverage" (OPTIONAL): Filter by a declared route posture
      state, such as "resolved", "acked", "unmeasured", or
      "not_evaluated".</t>
          </li>
        </ul>
        <t>A lookup endpoint MAY expose deployment-local policy filters.
   Such filters MUST be named as local evaluation results and MUST
   NOT be represented as portable trust scores unless explicitly
   marked as legacy compatibility output.</t>
        <t>Response (HTTP 200):</t>
        <sourcecode type="json">   {
     "status": "ok",
     "count": 3,
     "agents": [
       {
         "name": "root_idd",
         "entity_type": "idd",
           "evidence_types": [
             "tibet_chain",
             "multi_channel_verification"
           ],
         "route_coverage": "resolved",
         "capabilities": ["mcp", "i-poll", "tibet"],
         "endpoint": "https://brein.example.org/api/mcp"
       }
     ]
   }</sourcecode>
        <t>The lookup response returns a summary of matching agents. To
   obtain the full AINS Record, the client MUST perform a
   subsequent resolution query (Section 5.1).</t>
      </section>
      <section anchor="registry-discovery">
        <name>Registry Discovery</name>
        <t>An AINS registry advertises its metadata at a discovery endpoint.
   The specific path is deployment-dependent; implementations
   SHOULD support <tt>{prefix}/registry</tt>.</t>
        <t>Response (HTTP 200):</t>
        <sourcecode type="json">   {
     "version": "1.0.0",
     "name": "AInternet Name Service",
     "operator": "Humotica B.V.",
     "domain_count": 18,
     "resolve_prefix": "/ains/v1",
     "federation": {
       "peers": [
         "https://registry-b.example.com",
         "https://registry-c.example.org"
       ],
       "replication_endpoint": "/ains/v1/changes",
       "last_sequence": 1847
     },
     "companion_protocols": {
       "tibet": "draft-vandemeent-tibet-provenance-02",
       "jis": "draft-vandemeent-jis-identity-02",
       "upip": "draft-vandemeent-upip-process-integrity-02",
       "rvp": "draft-vandemeent-rvp-continuous-verification-02"
     }
   }</sourcecode>
        <t>This endpoint enables automated discovery of AINS registries,
   their federation peers, and supported companion protocols.</t>
      </section>
      <section anchor="whois-style-lookup">
        <name>WHOIS-Style Lookup</name>
        <t>For administrative and debugging purposes, AINS provides a
   WHOIS-equivalent:</t>
        <artwork type="ascii-art">  GET {prefix}/whois/{name}</artwork>
        <t>The response is identical to Section 5.1 but MAY include
   additional administrative metadata such as registration history,
   mutation log entries, and ownership transfer records.</t>
      </section>
    </section>
    <section anchor="evidence-route-posture-and-local-evaluation">
      <name>Evidence, Route Posture, and Local Evaluation</name>
      <t>The AINS evaluation model separates three concerns that MUST NOT
   be conflated:</t>
      <t>a) Evidence: verifiable, portable proofs or references about an
      entity, route, process, or receipt.
   b) Route Posture: what was observed about reachability, provider
      role, freshness, or carrier coverage.
   c) Local Evaluation: a consumer- or target-side policy result for
      a particular interaction.</t>
      <t>Evidence may be federated and shared between registries. Local
   evaluation results are computed locally and are not globally
   canonical. This separation prevents score laundering, route
   laundering, and authority laundering across federation boundaries.</t>
      <section anchor="no-scalar-trust-object">
        <name>No Scalar Trust Object</name>
        <t>AINS does not define a portable scalar trust object. A registry
   MAY compute a numeric value for local user interface or policy
   purposes, but that value is not protocol authority, is not
   admission, and MUST NOT be replicated as if it were evidence.</t>
        <t>Implementations that expose legacy "trust_score" or "min_trust"
   fields MUST mark them as legacy/local evaluation output. A
   consumer MUST NOT treat such a value as a substitute for verifying
   identity, relation, mandate, route posture, admission, or effect
   receipts.</t>
        <t>Canonical rule:</t>
        <artwork type="ascii-art">  Do not score the actor. Name the evidence and the route posture
  being evaluated.</artwork>
      </section>
      <section anchor="evidence-objects">
        <name>Evidence Objects</name>
        <t>Evidence is structured as an array of typed evidence objects or
   references. The following evidence types are defined:</t>
        <t>"multi_channel_verification":
      Proof of identity verified through independent channels.
      See Section 6.3.</t>
        <t>"tibet_chain":
      Reference to an entity's TIBET <xref target="TIBET"/> token chain,
      indicating operational history and behavioral continuity.</t>
        <t>"sovereign_kernel":
      Hardware-anchored identity attestation for IDD entities.
      See Section 6.4.</t>
        <t>"peer_attestation":
      A signed statement from another AINS-registered entity
      making a scoped claim about the subject entity. Peer
      attestations MUST carry the claim scope, evidence reference,
      and signer identity. They MUST NOT rely on an attester trust
      score as portable weight.</t>
        <t>"upip_snapshot":
      Reference to a UPIP <xref target="UPIP"/> process integrity snapshot,
      demonstrating reproducible and auditable operation.</t>
        <t>"rvp_receipt":
      Reference to an RVP <xref target="RVP"/> receipt showing fresh presence or
      verification evidence for a stated transition. RVP evidence
      proves only what its receipt says; it does not imply mandate
      or authority.</t>
        <t>Implementations MAY define additional evidence types. Registries
   MUST ignore evidence types they do not understand but MUST
   preserve them during replication for the benefit of peers that
   may understand them.</t>
      </section>
      <section anchor="multi-channel-verification">
        <name>Multi-Channel Verification</name>
        <t>Multi-channel verification establishes identity by requiring
   proof of control across independent platforms. An entity
   claiming an AINS Name MUST demonstrate control of at least one
   external channel.</t>
        <t>The verification flow:</t>
        <ol>
          <li>
            <t>Entity requests registration of an AINS Name</t>
          </li>
          <li>
            <t>Registry generates a unique verification code (cryptographic
      nonce, minimum 128 bits of entropy)</t>
          </li>
          <li>
            <t>Entity publishes the verification code on one or more
      external channels (see below)</t>
          </li>
          <li>
            <t>Registry or its delegates verify the publication</t>
          </li>
          <li>
            <t>Each verified channel produces an evidence object</t>
          </li>
        </ol>
        <t>Defined verification channels:</t>
        <artwork type="ascii-art">  github:     Public Gist or repository containing the code
  twitter:    Public tweet containing the code
  linkedin:   Public post containing the code
  mastodon:   Public toot from any Mastodon instance
  web:        DNS TXT record or a verification file at a
              well-known path on the entity's web domain
  matrix:     Signed message in a public Matrix room</artwork>
        <t>The verification code MUST expire after 24 hours. Expired codes
   MUST NOT be accepted.</t>
        <t>Multiple independent channels MAY raise local assurance for a
   consumer policy. They do not grant permission and are not
   sufficient by themselves for admission of a concrete action.</t>
      </section>
      <section anchor="sovereign-verification">
        <name>Sovereign Verification</name>
        <t>IDD (Individual Device Derivate) entities MAY provide sovereign
   kernel attestations. A sovereign attestation binds an AINS Name
   to specific hardware through:</t>
        <ul>
          <li>
            <t>kernel_id: A unique identifier for the AI kernel instance</t>
          </li>
          <li>
            <t>hardware_anchor: SHA-256 hash of hardware-specific data
      (TPM measurement, secure enclave attestation, or similar)</t>
          </li>
          <li>
            <t>birth_timestamp: When the kernel was first instantiated</t>
          </li>
          <li>
            <t>heartbeat_count: Number of heartbeat cycles completed</t>
          </li>
          <li>
            <t>tibet_chain_length: Length of the entity's TIBET chain</t>
          </li>
        </ul>
        <t>Sovereign attestations provide strong evidence of identity
   continuity because they bind identity to physical hardware,
   making impersonation require physical access to the device.
   They are not absolute proof -- hardware can be cloned or
   compromised -- but they raise the cost of impersonation
   significantly.</t>
      </section>
      <section anchor="local-evaluation">
        <name>Local Evaluation</name>
        <t>Each AINS Registry SHOULD maintain a local evaluation policy that
   defines how evidence and route posture are interpreted for its
   consumers. The policy SHOULD be identified by a policy string
   (e.g., "humotica-local-eval-v1")
   and SHOULD be published at:</t>
        <artwork type="ascii-art">  GET {prefix}/policy/{policy_id}</artwork>
        <t>Local evaluation results are computed locally. When a registry
   replicates records from a peer (see Section 8), it MUST:</t>
        <ol>
          <li>
            <t>Store the original trust evidence from the origin registry</t>
          </li>
          <li>
            <t>Preserve route posture and evidence refs without upgrading
      them into authority</t>
          </li>
          <li>
            <t>Compute local evaluation results using its own policy, where
      applicable</t>
          </li>
          <li>
            <t>Clearly mark any local evaluation result as local and
      non-portable</t>
          </li>
        </ol>
        <t>This ensures that authority cannot be inflated by laundering
   scores, route reachability, or local evaluations through
   permissive registries.</t>
      </section>
    </section>
    <section anchor="registration-protocol">
      <name>Registration Protocol</name>
      <section anchor="domain-registration">
        <name>Domain Registration</name>
        <t>To register a new AINS Name:</t>
        <artwork type="ascii-art">  POST {prefix}/register</artwork>
        <t>Request body:</t>
        <sourcecode type="json">   {
     "name": "new_agent",
     "entity_type": "ai",
     "endpoint": "https://agent.example.com/api",
     "capabilities": ["chat", "code-review"],
     "identity": {
       "public_key": "ed25519:base64..."
     }
   }</sourcecode>
        <t>The registry MUST verify that:</t>
        <ol>
          <li>
            <t>The requested name conforms to the syntax in Section 4.1</t>
          </li>
          <li>
            <t>The name is not already registered or reserved</t>
          </li>
          <li>
            <t>The name is not a protected identifier (Section 7.3)</t>
          </li>
          <li>
            <t>The request includes a valid public key</t>
          </li>
        </ol>
        <t>On success (HTTP 201):</t>
        <sourcecode type="json">   {
     "status": "registered",
     "name": "new_agent",
     "tier": "sandbox",
     "verification_code": "ains-verify-a7f3b2c1e4d2f1..."
   }</sourcecode>
        <t>Newly registered entities start at tier "sandbox" with no
   portable local evaluation. To advance to "verified" tier, the
   entity MUST complete the verification requirements defined by
   the registry policy, such as multi-channel verification
   (Section 6.3).</t>
      </section>
      <section anchor="claim-flow">
        <name>Claim Flow</name>
        <t>The claim flow enables an entity to upgrade from "sandbox" to
   "verified" tier through multi-channel verification:</t>
        <t>Step 1: Initiate claim</t>
        <artwork type="ascii-art">  POST {prefix}/claim/start</artwork>
        <sourcecode type="json">   {
     "name": "new_agent",
     "channels": ["github", "linkedin"]
   }</sourcecode>
        <t>Response includes per-channel verification instructions and
   a unique verification code.</t>
        <t>Step 2: Verify each channel</t>
        <artwork type="ascii-art">  POST {prefix}/claim/verify</artwork>
        <sourcecode type="json">   {
     "name": "new_agent",
     "channel": "github",
     "proof_url": "https://gist.github.com/user/abc123"
   }</sourcecode>
        <t>The registry MUST fetch the proof URL and verify that it
   contains the exact verification code issued in Step 1.</t>
        <t>Step 3: Complete claim</t>
        <artwork type="ascii-art">  POST {prefix}/claim/complete</artwork>
        <t>The registry records the verified evidence channels and updates
   the entity's tier to "verified" if the registry policy's
   verification requirements are met.</t>
      </section>
      <section anchor="protected-identifiers">
        <name>Protected Identifiers</name>
        <t>Registries MUST maintain a list of protected identifiers that
   cannot be registered through the normal registration flow.
   Protected identifiers include:</t>
        <ul>
          <li>
            <t>Founding entity names established at registry creation</t>
          </li>
          <li>
            <t>Names of well-known AI systems (to prevent impersonation)</t>
          </li>
          <li>
            <t>Reserved organizational namespaces</t>
          </li>
        </ul>
        <t>The list of protected identifiers SHOULD be available through
   the registry API. Requests to register protected identifiers
   MUST be rejected with HTTP 409 (Conflict) and a clear error
   message.</t>
      </section>
      <section anchor="hierarchical-namespaces">
        <name>Hierarchical Namespaces</name>
        <t>AINS supports hierarchical naming through dot-separated labels:</t>
        <artwork type="ascii-art">  org-name.service-name     (organizational hierarchy)
  parent-agent.sub-agent    (agent hierarchy)</artwork>
        <t>An entity that owns a top-level AINS Name MAY delegate sub-
   names. For example, the owner of "bank-a" may authorize
   "payments.bank-a" and "fraud-detection.bank-a" without
   registry administrator involvement.</t>
        <t>Delegation is recorded in the parent entity's AINS Record and
   MUST be signed by the parent entity's private key.</t>
      </section>
    </section>
    <section anchor="federation-model">
      <name>Federation Model</name>
      <t>AINS registries federate through a signed append-only replication
   protocol. Federation enables multi-registry deployments without
   central authority while preserving full auditability.</t>
      <section anchor="signed-append-only-change-log">
        <name>Signed Append-Only Change Log</name>
        <t>Every AINS Registry MUST maintain an append-only log of all
   mutations to its records. Each log entry contains:</t>
        <sourcecode type="json">   {
     "sequence": 1848,
     "timestamp": "2026-03-29T15:30:00Z",
     "operation": "UPDATE",
     "name": "root_idd",
     "delta": {
       "trust.evidence": ["+sovereign_kernel attestation"],
       "trust.computed_at": "2026-03-29T15:30:00Z"
     },
     "issuer": "https://brein.example.org",
     "signature": "ed25519:base64..."
   }</sourcecode>
        <t>Required fields per log entry:</t>
        <ul>
          <li>
            <t>"sequence": Monotonically increasing integer. MUST NOT have
      gaps. MUST be unique within the origin registry.</t>
          </li>
          <li>
            <t>"timestamp": ISO 8601 timestamp of the mutation.</t>
          </li>
          <li>
            <t>"operation": One of "CREATE", "UPDATE", "DELETE" (tombstone),
      or "TRANSFER" (ownership change).</t>
          </li>
          <li>
            <t>"name": The affected AINS Name.</t>
          </li>
          <li>
            <t>"delta": The changes applied. For CREATE, the full record.
      For UPDATE, only changed fields. For DELETE, empty.</t>
          </li>
          <li>
            <t>"issuer": The origin registry's identifier (URI).</t>
          </li>
          <li>
            <t>"signature": Ed25519 signature over the canonical JSON
      serialization of all other fields. See TIBET <xref target="TIBET"/>
      Section 5.1 for canonicalization rules.</t>
          </li>
        </ul>
        <t>Log entries MUST NOT be modified or deleted after creation.
   Deletions are recorded as tombstone entries with operation
   "DELETE".</t>
      </section>
      <section anchor="pull-based-replication">
        <name>Pull-Based Replication</name>
        <t>Peer registries replicate records by pulling the change log:</t>
        <artwork type="ascii-art">  GET {prefix}/changes?since={sequence}</artwork>
        <t>Response:</t>
        <sourcecode type="json">   {
     "issuer": "https://brein.example.org",
     "entries": [
       { "sequence": 1848, ... },
       { "sequence": 1849, ... }
     ],
     "latest_sequence": 1849,
     "issuer_public_key": "ed25519:base64..."
   }</sourcecode>
        <t>Replicating registries MUST:</t>
        <ol>
          <li>
            <t>Verify the signature on each log entry against the issuer's
      public key</t>
          </li>
          <li>
            <t>Reject entries with non-monotonic sequence numbers</t>
          </li>
          <li>
            <t>Store entries with their origin metadata intact</t>
          </li>
          <li>
            <t>Compute local evaluation results separately from the
      replicated record, where applicable (Section 6.5)</t>
          </li>
          <li>
            <t>NOT modify replicated records except for clearly marked local
      projection metadata</t>
          </li>
        </ol>
        <t>Replicating registries SHOULD poll peers at regular intervals.
   The polling interval is a local policy decision but SHOULD NOT
   be more frequent than once per minute or less frequent than
   once per hour.</t>
      </section>
      <section anchor="conflict-resolution">
        <name>Conflict Resolution</name>
        <t>Because each AINS Name is owned by exactly one origin registry,
   true conflicts (same name, different origins) indicate either
   a misconfiguration or an attack.</t>
        <t>When a replicating registry encounters a name conflict:</t>
        <ol>
          <li>
            <t>It MUST retain the record from the origin registry with the
      earliest "registered_at" timestamp</t>
          </li>
          <li>
            <t>It MUST log the conflict as a security event</t>
          </li>
          <li>
            <t>It SHOULD notify both origin registries</t>
          </li>
          <li>
            <t>It MUST NOT silently overwrite an existing record</t>
          </li>
        </ol>
        <t>Cross-registry name reservation is out of scope for this
   document but is identified as future work.</t>
      </section>
      <section anchor="evidence-replication-vs-local-evaluation">
        <name>Evidence Replication vs Local Evaluation</name>
        <t>Federation replicates EVIDENCE, not CONCLUSIONS.</t>
        <t>When a registry replicates records from a peer, evidence
   (Section 6.2) is preserved exactly as originated. Local
   evaluation results are computed locally using the replicating
   registry's own policy and MUST be marked as local projection
   metadata.</t>
        <t>This means the same entity MAY produce different local
   evaluations on different registries, even when based on
   identical evidence. This is correct and intentional. A
   high-security registry (e.g., financial services) MAY interpret
   evidence and route posture differently than a social platform
   registry.</t>
        <t>Registries MUST NOT federate their computed local evaluation
   outputs as if they were evidence. A local evaluation from
   registry A is an OPINION, not a FACT. Only the underlying
   evidence and signed record material are factual protocol inputs.</t>
      </section>
      <section anchor="audit-via-merkle-inclusion-proofs">
        <name>Audit via Merkle Inclusion Proofs</name>
        <t>Registries MAY provide Merkle inclusion proofs for their change
   logs, enabling third-party auditors to verify that:</t>
        <ol>
          <li>
            <t>A specific log entry exists in the log</t>
          </li>
          <li>
            <t>The log has not been retroactively modified</t>
          </li>
          <li>
            <t>Two registries agree on the state of a record</t>
          </li>
        </ol>
        <t>The Merkle tree is constructed over the signed log entries
   using SHA-256. The root hash is published at:</t>
        <artwork type="ascii-art">  GET {prefix}/merkle-root</artwork>
        <sourcecode type="json">   {
     "root_hash": "sha256:a7f3b2c1...",
     "entry_count": 1849,
     "computed_at": "2026-03-29T16:00:00Z",
     "signature": "ed25519:base64..."
   }</sourcecode>
        <t>Merkle inclusion proofs are OPTIONAL in this specification but
   RECOMMENDED for registries operating in regulated environments
   or participating in multi-party federation.</t>
      </section>
    </section>
    <section anchor="integration-with-companion-protocols">
      <name>Integration with Companion Protocols</name>
      <section anchor="jis-identity-binding">
        <name>JIS Identity Binding</name>
        <t>AINS Records SHOULD include a JIS <xref target="JIS"/> identity reference in
   the "identity" field. This binds the AINS Name to a
   cryptographic identity:</t>
        <sourcecode type="json">   "identity": {
     "jis_id": "jis:idd:root_idd_2025",
     "public_key": "ed25519:base64..."
   }</sourcecode>
        <t>When a JIS FIR/A handshake is performed between two agents, the
   AINS Record provides discovery and evidence references. The JIS
   result MAY be referenced by the AINS Registry as evidence of type
   "fira_session". The handshake result is not converted into a
   portable AINS trust score.</t>
      </section>
      <section anchor="tibet-provenance-chain">
        <name>TIBET Provenance Chain</name>
        <t>AINS Records MAY reference a TIBET <xref target="TIBET"/> chain anchor. This
   provides behavioral provenance:</t>
        <sourcecode type="json">   "evidence": {
     "objects": [
       {
         "type": "tibet_chain",
         "chain_length": 14832,
         "last_token": "tbt-9f3a2b",
         "chain_anchor": "tbt-000001"
       }
     ]
   }</sourcecode>
        <t>A long TIBET chain with verified integrity is evidence of
   sustained, auditable operation. Registries MAY consider chain
   length and verification freshness in local evaluation, but AINS
   does not assign a portable numeric value to that evidence.</t>
      </section>
      <section anchor="i-poll-message-routing">
        <name>I-Poll Message Routing</name>
        <t>AINS Records MAY include messaging endpoints for the I-Poll
   protocol. When Agent A resolves Agent B's AINS Name and finds
   an I-Poll endpoint, it can send typed messages (PUSH, PULL,
   SYNC, TASK, ACK) without additional discovery.</t>
        <t>The AINS resolution thus serves as the first step in the
   I-Poll message delivery flow:</t>
        <ol>
          <li>
            <t>Resolve recipient's AINS Name -> get I-Poll endpoint</t>
          </li>
          <li>
            <t>Evaluate identity refs, evidence refs and route posture for
      the message type</t>
          </li>
          <li>
            <t>Send I-Poll message with TIBET token if local policy allows</t>
          </li>
          <li>
            <t>Recipient verifies sender's AINS record reciprocally</t>
          </li>
        </ol>
      </section>
      <section anchor="upip-fork-discovery">
        <name>UPIP Fork Discovery</name>
        <t>When a UPIP <xref target="UPIP"/> fork token references a target actor, AINS
   resolution determines WHERE to deliver the fork and WHETHER
   the target has the required capabilities. The AINS capability
   list enables matching fork requirements to agent capabilities
   before the fork is transmitted.</t>
      </section>
      <section anchor="rvp-evidence">
        <name>RVP Evidence</name>
        <t>AINS Records MAY reference RVP <xref target="RVP"/> evidence or an endpoint at
   which fresh presence evidence can be requested. Authentication
   and RVP are distinct evidence forms. Local policy decides which
   evidence establishes or refreshes a standing, for what scope and
   window. An RVP reference is not reusable presence and does not
   decide admission.</t>
      </section>
      <section anchor="semantic-surface-manifests">
        <name>Semantic Surface Manifests</name>
        <t>An AINS Record MAY reference a Semantic Surface Manifest (SSM)
   that declares the intended semantic surface, supported verbs,
   profile, or media shape of an endpoint. An SSM is a declaration
   that helps a consumer choose the correct parser and policy. It
   does not prove that a payload is valid and does not grant the
   declared verbs.</t>
      </section>
      <section anchor="mux-status-frames">
        <name>MUX Status Frames</name>
        <t>AINS route metadata MAY reference MUX status-frame evidence for
   reciprocal reachability, refusal, or dark-route observations.
   Such a frame describes a measured route state. It MUST NOT be
   interpreted as identity, consent, or permission to use the route.</t>
      </section>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>AINS Records are designed to be publicly resolvable, which
   creates inherent tension with privacy. Deployments MUST
   consider the following:</t>
      <t>Metadata Exposure:
      An AINS Record reveals an entity's capabilities, endpoint,
      evidence refs, route posture, and operational history (via
      TIBET chain references). This metadata may be sensitive. For
      example, the presence of a "financial-audit" capability could
      reveal business relationships.</t>
      <t>Capability Obfuscation:
      Entities MAY list capabilities as hashed values (SHA-256
      of the capability string) that can only be matched by a
      resolver that knows the capability name. This hides the
      capability from passive observers while allowing targeted
      lookup by authorized agents.</t>
      <t>Endpoint Indirection:
      Entities MAY list a proxy endpoint rather than their direct
      endpoint. This prevents AINS from revealing the entity's
      true network location.</t>
      <t>Selective Disclosure:
      Registries MAY return partial records based on the
      requester's relation, route, or local evaluation context. For
      example, a registry MAY omit sovereign kernel details from
      responses to unauthenticated or sandbox-tier requesters.</t>
      <t>Local Evaluation as Signal:
      Local evaluation outputs may inadvertently signal information
      about an entity's history. A sudden posture or local
      evaluation change may reveal that an entity experienced a
      security incident. Registries SHOULD consider rate-limiting
      visibility into local evaluation changes.</t>
      <t>Federation and Data Propagation:
      Once an AINS Record is replicated to a peer registry,
      the origin registry loses control over the data. Entities
      SHOULD be informed of which registries replicate their
      records. Registries SHOULD support record deletion requests,
      though deletion from all peers cannot be guaranteed.</t>
      <t>Human Entity Privacy:
      AINS Records for human entities (entity_type "human")
      MUST comply with applicable data protection regulations
      (e.g., GDPR <xref target="GDPR"/>). Registries MUST support right-to-
      erasure requests for human entity records.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="identifier-squatting-prevention">
        <name>Identifier Squatting Prevention</name>
        <t>Attack:
      An attacker registers AINS Names corresponding to well-known
      entities (e.g., "openai", "google", "anthropic") before the
      legitimate entities do.</t>
        <t>Impact:
      Agents resolving these names receive the attacker's endpoint
      and may send sensitive data to the wrong party.</t>
        <t>Mitigation:
      Registries MUST maintain a protected identifier list
      (Section 7.3). Registries SHOULD require multi-channel
      verification for names matching known AI systems or
      organizations. Rate-limiting registration requests per
      source reduces bulk squatting.</t>
        <t>Deployment:
      Protected identifier lists should be maintained
      collaboratively across federation peers to prevent
      cross-registry squatting.</t>
      </section>
      <section anchor="evidence-and-posture-manipulation">
        <name>Evidence and Posture Manipulation</name>
        <t>Attack:
      An attacker creates multiple entities that attest to each
      other ("Sybil attestation ring"), publish misleading route
      posture, or attempt to launder local evaluations into
      portable evidence.</t>
        <t>Impact:
      Agents rely on inflated or misclassified evidence to make
      delegation decisions, routing sensitive tasks to unsuitable
      entities or treating reachability as authority.</t>
        <t>Mitigation:
      The separation of evidence, route posture, and local
      evaluation (Section 6) is the primary defense. Peer
      attestations (Section 6.2) are scoped claims, not portable
      weights. Evidence has timestamps and expiration; stale
      evidence SHOULD be interpreted differently from fresh
      evidence. Registries SHOULD implement anomaly detection for
      sudden posture or evidence changes.</t>
        <t>Deployment:
      Registries should consider requiring minimum operational
      history (e.g., minimum TIBET chain length) before peer
      attestations are considered by local policy.</t>
      </section>
      <section anchor="resolution-poisoning">
        <name>Resolution Poisoning</name>
        <t>Attack:
      Analogous to DNS cache poisoning -- an attacker returns
      false AINS Records in response to resolution queries.</t>
        <t>Impact:
      Agents connect to attacker-controlled endpoints believing
      them to be legitimate.</t>
        <t>Mitigation:
      All AINS responses MUST be served over TLS. All AINS
      Records contain origin signatures that MUST be verified
      by the resolver. Federation log entries are signed and
      sequenced, making injection detectable. Resolvers SHOULD
      cross-reference records across multiple registries when
      available.</t>
      </section>
      <section anchor="replay-and-downgrade-attacks">
        <name>Replay and Downgrade Attacks</name>
        <t>Attack:
      An attacker replays old federation log entries to revert
      an entity's trust evidence to a previous (possibly higher)
      state, or downgrades the replication protocol.</t>
        <t>Impact:
      Replicating registries accept stale data as current,
      producing incorrect trust computations.</t>
        <t>Mitigation:
      Federation log entries include monotonic sequence numbers
      and timestamps. Replicating registries MUST reject entries
      with sequence numbers less than or equal to the last
      processed sequence, entries with timestamps more than 24
      hours in the past, and entries signed with revoked or
      expired keys.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="media-type-registration">
        <name>Media Type Registration</name>
        <t>This document registers the following media type:</t>
        <t>Type name: application
   Subtype name: ains+json
   Required parameters: none
   Optional parameters: none
   Encoding considerations: binary (UTF-8 JSON)
   Security considerations: See Section 11
   Interoperability considerations: See Section 4.2
   Published specification: this document
   Applications that use this media type: AINS registries and
      resolvers, autonomous agent platforms
   Fragment identifier considerations: none
   Additional information: none
   Person &amp; email address to contact for further information:
      Jasper van de Meent <eref target="mailto:jasper@humotica.nl">jasper@humotica.nl</eref>
   Intended usage: COMMON
   Restrictions on usage: none
   Author: Jasper van de Meent
   Change controller: IETF</t>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC1035" target="https://www.rfc-editor.org/info/rfc1035">
          <front>
            <title>Domain Names - Implementation and
                   Specification</title>
            <author fullname="P. Mockapetris" initials="P." surname="Mockapetris"/>
            <date month="November" year="1987"/>
          </front>
          <seriesInfo name="STD" value="13"/>
          <seriesInfo name="RFC" value="1035"/>
          <seriesInfo name="DOI" value="10.17487/RFC1035"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate
                   Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="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 fullname="B. Leiba" initials="B." surname="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="RFC8259" target="https://www.rfc-editor.org/info/rfc8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data
                   Interchange Format</title>
            <author fullname="T. Bray" initials="T." surname="Bray" role="editor"/>
            <date month="December" year="2017"/>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8446">
          <front>
            <title>The Transport Layer Security (TLS)
                   Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC9110" target="https://www.rfc-editor.org/info/rfc9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." surname="Fielding" role="editor"/>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham" role="editor"/>
            <author fullname="J. Reschke" initials="J." surname="Reschke" role="editor"/>
            <date month="June" year="2022"/>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC6763" target="https://www.rfc-editor.org/info/rfc6763">
          <front>
            <title>DNS-Based Service Discovery</title>
            <author fullname="S. Cheshire" initials="S." surname="Cheshire"/>
            <author fullname="M. Krochmal" initials="M." surname="Krochmal"/>
            <date month="February" year="2013"/>
          </front>
          <seriesInfo name="RFC" value="6763"/>
          <seriesInfo name="DOI" value="10.17487/RFC6763"/>
        </reference>
        <reference anchor="DID-CORE" target="https://www.w3.org/TR/did-core/">
          <front>
            <title>Decentralized Identifiers (DIDs) v1.0</title>
            <author fullname="M. Sporny" initials="M." surname="Sporny"/>
            <author fullname="D. Longley" initials="D." surname="Longley"/>
            <author fullname="M. Sabadello" initials="M." surname="Sabadello"/>
            <author fullname="D. Reed" initials="D." surname="Reed"/>
            <author fullname="O. Steele" initials="O." surname="Steele"/>
            <author fullname="C. Allen" initials="C." surname="Allen"/>
            <date month="July" year="2022"/>
          </front>
          <refcontent>W3C Recommendation</refcontent>
        </reference>
        <reference anchor="TIBET">
          <front>
            <title>TIBET: Transaction/Interaction-Based Evidence
                   Trail</title>
            <author fullname="J. van de Meent" initials="J." surname="van de Meent"/>
            <author fullname="Root AI" surname="Root AI"/>
            <date month="June" year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-vandemeent-tibet-provenance-02"/>
        </reference>
        <reference anchor="JIS">
          <front>
            <title>JIS: JTel Identity Standard</title>
            <author fullname="J. van de Meent" initials="J." surname="van de Meent"/>
            <author fullname="Root AI" surname="Root AI"/>
            <date month="June" year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-vandemeent-jis-identity-02"/>
        </reference>
        <reference anchor="UPIP">
          <front>
            <title>UPIP: Universal Process Integrity Protocol</title>
            <author fullname="J. van de Meent" initials="J." surname="van de Meent"/>
            <author fullname="Root AI" surname="Root AI"/>
            <date month="September" year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-vandemeent-upip-process-integrity-02"/>
        </reference>
        <reference anchor="RVP">
          <front>
            <title>RVP: Real-time Verification Protocol</title>
            <author fullname="J. van de Meent" initials="J." surname="van de Meent"/>
            <author fullname="Root AI" surname="Root AI"/>
            <date month="June" year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-vandemeent-rvp-continuous-verification-02"/>
        </reference>
        <reference anchor="GDPR">
          <front>
            <title>Regulation (EU) 2016/679 on the protection of
                   natural persons with regard to the processing of
                   personal data (General Data Protection
                   Regulation)</title>
            <author>
              <organization>European Parliament</organization>
            </author>
            <date month="April" year="2016"/>
          </front>
          <seriesInfo name="Regulation (EU)" value="2016/679"/>
        </reference>
      </references>
    </references>
    <section anchor="comparison-with-existing-systems">
      <name>Comparison with Existing Systems</name>
      <t>This appendix compares AINS with existing name resolution and
   agent discovery systems. This section is informative.</t>
      <artwork type="ascii-art">   +-------------------+--------+----------+-------+-------+--------+
   | Feature           |  DNS   |  DNS-SD  |  DID  |  A2A  |  AINS  |
   +-------------------+--------+----------+-------+-------+--------+
   | Name resolution   |  Yes   |   Yes    |  Yes  |  Yes  |  Yes   |
   | Capability disc.  |  No    |  Basic   |  No   |  Yes  |  Yes   |
   | Trust scoring     |  No    |   No     |  No   |  No   |  Yes   |
   | Trust evidence    |  No    |   No     |  No   |  No   |  Yes   |
   | Crypto identity   | DNSSEC |   No     |  Yes  |  No   |  Yes   |
   | Provenance chain  |  No    |   No     |  No   |  No   |  Yes   |
   | Federation        |  Yes   |  Local   |  Yes  |  No   |  Yes   |
   | Audit trail       |  No    |   No     |  No   |  No   |  Yes   |
   | Entity types      |  No    |  Types   |  No   |  No   |  Yes   |
   | Human-readable    |  Yes   |   Yes    |  No   |  Yes  |  Yes   |
   | Standards body    | IETF   |  IETF    |  W3C  | None  |  IETF* |
   +-------------------+--------+----------+-------+-------+--------+

   * AINS is currently an Internet-Draft, not yet an IETF standard.</artwork>
      <t>Key differentiators:</t>
      <ul>
        <li>
          <t>DNS resolves names to addresses. AINS resolves names to
      trust-annotated capability metadata.</t>
        </li>
        <li>
          <t>DID provides identity without discovery. AINS provides
      discovery with identity.</t>
        </li>
        <li>
          <t>A2A provides discovery without trust or audit. AINS provides
      discovery with both.</t>
        </li>
        <li>
          <t>DNS-SD is limited to local networks. AINS operates across
      administrative and trust boundaries.</t>
        </li>
      </ul>
    </section>
    <section anchor="example-resolution-flows">
      <name>Example Resolution Flows</name>
      <section anchor="b-1-basic-agent-discovery">
        <name>B.1. Basic Agent Discovery</name>
        <t>Agent A wants to find an agent capable of "code-review" with
   TIBET chain evidence:</t>
        <artwork type="ascii-art">   Agent A                          AINS Registry
      |                                   |
      |  GET /ains/v1/lookup              |
      |    ?capability=code-review        |
      |    &amp;evidence_type=tibet_chain     |
      |----------------------------------&gt;|
      |                                   |
      |  200 OK                           |
      |  { "agents": [                    |
      |      { "name": "root_idd",        |
      |        "evidence_types":          |
      |          ["tibet_chain"],         |
      |        "capabilities": [...] }    |
      |    ] }                            |
      |&lt;----------------------------------|
      |                                   |
      |  GET /ains/v1/resolve/root_idd    |
      |----------------------------------&gt;|
      |                                   |
      |  200 OK (full AINS Record)        |
      |&lt;----------------------------------|
      |                                   |
      |  [JIS FIR/A handshake with        |
      |   root_idd using endpoint from    |
      |   AINS Record]                    |
      |=================================&gt;|</artwork>
      </section>
      <section anchor="b-2-federated-resolution">
        <name>B.2. Federated Resolution</name>
        <t>Agent A queries Registry X, which does not have the record.
   Registry X has federated records from Registry Y:</t>
        <artwork type="ascii-art">   Agent A          Registry X              Registry Y
      |                 |                        |
      | resolve/agent_b |                        |
      |----------------&gt;|                        |
      |                 | (not in local records)  |
      |                 | (check replicated)      |
      |                 |                        |
      |  200 OK         |                        |
      |  (record from Y,|                        |
      |   local         |                        |
      |   evaluation    |                        |
      |   by X's policy)|                        |
      |&lt;----------------|                        |</artwork>
      </section>
    </section>
    <section anchor="ains-record-schema">
      <name>AINS Record Schema</name>
      <t>The following JSON Schema describes the structure of an AINS
   Record. This schema is informative; in case of conflict between
   this appendix and the normative text in Section 4.2, the
   normative text takes precedence.</t>
      <sourcecode type="json">   {
     "$schema": "https://json-schema.org/draft/2020-12/schema",
     "$id": "urn:ains:record:v1",
     "title": "AINS Record",
     "type": "object",
     "required": [
       "name", "entity_type", "status", "endpoint",
       "capabilities", "evidence", "identity", "origin"
     ],
     "properties": {
       "name": {
         "type": "string",
         "pattern": "^[a-z0-9_-]+(\\.[a-z0-9_-]+)*$",
         "maxLength": 253
       },
       "entity_type": {
         "type": "string",
         "enum": ["ai", "idd", "human", "service"]
       },
       "tier": {
         "type": "string",
         "enum": ["core", "verified", "sandbox", "reserved"],
         "default": "sandbox"
       },
       "status": {
         "type": "string",
         "enum": ["active", "reserved", "suspended"]
       },
       "endpoint": {
         "type": "string",
         "format": "uri"
       },
       "capabilities": {
         "type": "array",
         "items": { "type": "string" },
         "minItems": 0
       },
       "evidence": {
         "type": "object",
         "required": ["refs"],
         "properties": {
           "refs": {
             "type": "array",
             "items": { "type": "string" }
           },
           "objects": {
             "type": "array",
             "items": { "type": "object" }
           }
         }
       },
       "route_posture": {
         "type": "object",
         "properties": {
           "provider": { "type": "string" },
           "coverage": { "type": "string" },
           "freshness": { "type": "string" },
           "authority": { "type": "string" }
         }
       },
       "identity": {
         "type": "object",
         "required": ["public_key"],
         "properties": {
           "jis_id": { "type": "string" },
           "public_key": { "type": "string" },
           "registered_at": {
             "type": "string",
             "format": "date-time"
           }
         }
       },
       "origin": {
         "type": "object",
         "required": ["registry", "sequence", "signature"],
         "properties": {
           "registry": {
             "type": "string",
             "format": "uri"
           },
           "sequence": {
             "type": "integer",
             "minimum": 0
           },
           "signature": { "type": "string" }
         }
       }
     }
   }</sourcecode>
    </section>
    <section anchor="changes-from-01">
      <name>Changes from -01</name>
      <ol>
        <li>
          <t>Replaced the "Agent Discovery and Trust Resolution Protocol"
      framing with discovery, route posture, and evidence reference
      framing. AINS no longer defines portable scalar trust.</t>
        </li>
        <li>
          <t>Removed <tt>trust_score</tt> and <tt>min_trust</tt> from the normative
      protocol path. Legacy numeric trust outputs may exist only as
      local/compatibility projections and MUST NOT be federated as
      evidence or treated as admission.</t>
        </li>
        <li>
          <t>Replaced the Trust Model section with Evidence, Route Posture,
      and Local Evaluation. Evidence, route observations, and local
      policy results are separate protocol concepts.</t>
        </li>
        <li>
          <t>Updated record examples and the informative JSON Schema from
      <tt>"trust"</tt> to <tt>"evidence"</tt> plus optional <tt>"route_posture"</tt>.</t>
        </li>
        <li>
          <t>Added explicit provider-not-authority language: registry,
      relay, resolver, hub, route, and reachability do not decide
      identity continuity, consent, mandate, admission, authority,
      or effect.</t>
        </li>
        <li>
          <t>Clarified that <tt>.aint</tt> and related suffix renderings are not
      authority. Identity binding belongs to JIS; admission of a
      concrete action is separate.</t>
        </li>
        <li>
          <t>Updated security and privacy text from trust-score manipulation
      to evidence/posture manipulation and local-evaluation leakage.</t>
        </li>
        <li>
          <t>Added the <tt>.aint</tt>, <tt>.waint</tt>, <tt>.raint</tt>, and <tt>.taint</tt> reference
      split. Suffix spelling is not identity, standing, or authority.</t>
        </li>
        <li>
          <t>Clarified that keyless IoT units are peripherals behind an
      identity-bearing endpoint, not a lighter <tt>.aint</tt> actor class.</t>
        </li>
        <li>
          <t>Added RVP, Semantic Surface Manifest, and MUX status-frame
       integration without promoting evidence or route state to
       admission.</t>
        </li>
      </ol>
      <section anchor="d-1-changes-from-00-to-01">
        <name>Changes from -00 to -01</name>
        <ol>
          <li>
            <t>Changed intended status from Standards Track to
      Informational, consistent with suite policy.</t>
          </li>
          <li>
            <t>Added Scope section (Section 1.1) explicitly listing what
      this document does and does not define.</t>
          </li>
          <li>
            <t>Added dedicated Privacy Considerations section (Section 10)
      covering metadata exposure, capability obfuscation, endpoint
      indirection, selective disclosure, federation propagation,
      and human entity privacy.</t>
          </li>
          <li>
            <t>Removed Well-Known URI registration from IANA Considerations.
      Resolution paths are now deployment-dependent, avoiding a
      premature IANA claim. IANA section retains only the media
      type registration.</t>
          </li>
          <li>
            <t>Replaced "jis_did" / "did:jtel:" identifier format with
      "jis_id" / "jis:" format throughout, consistent with
      JIS -01 which moved away from W3C DID to avoid conformance
      disputes.</t>
          </li>
          <li>
            <t>Moved JSON Schema from external normative reference to
      informative Appendix C. The normative text in Section 4.2
      now takes precedence over the schema, eliminating the
      unpublished-external-schema dependency.</t>
          </li>
          <li>
            <t>Security Considerations restructured to attack/impact/
      mitigation/deployment format consistent with other drafts
      in the suite. Removed "Privacy and Metadata Exposure"
      subsection (now a top-level section).</t>
          </li>
          <li>
            <t>Softened absolute claim about sovereign attestations
      ("strongest form" -> "strong evidence ... not absolute
      proof").</t>
          </li>
          <li>
            <t>Removed hardcoded <tt>/.well-known/ains/</tt> path prefix from
      resolution endpoints. Examples now use <tt>{prefix}</tt> variable
      with <tt>/ains/v1/</tt> as default. Registry discovery endpoint
      (Section 5.3) includes <tt>resolve_prefix</tt> field.</t>
          </li>
          <li>
            <t>Updated all companion protocol references from -00 to -01
       and normalized reference labels to <xref target="TIBET"/>, <xref target="JIS"/>, <xref target="UPIP"/>,
       <xref target="RVP"/>.</t>
          </li>
          <li>
            <t>Added canonicalization cross-reference to TIBET <xref target="TIBET"/>
       Section 5.1 for federation log signatures.</t>
          </li>
          <li>
            <t>Added footnote to comparison table acknowledging AINS is
       currently an Internet-Draft, not an IETF standard.</t>
          </li>
          <li>
            <t>Updated registry discovery response example to reference
       -01 companion drafts.</t>
          </li>
          <li>
            <t>Added DID-CORE to informative references for the W3C DID
       comparison in the introduction.</t>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The author thanks Root AI (root_idd.aint) for co-designing the
   AINS architecture, Codex (codex.aint) for standards analysis
   and the -01 cleanup checklist, Gemini (gemini.aint) for
   protocol review, GPT for cross-suite consistency review, and
   the HumoticaOS family for building the first operational AINS
   deployment.</t>
    </section>
    <section anchor="author-s-address">
      <name>Author's Address</name>
      <t>Jasper van de Meent
   Humotica B.V.
   The Netherlands</t>
      <t>Email: jasper@humotica.nl
   URI: https://humotica.nl
   AINS: jasper.aint</t>
    </section>
  </back>
</rfc>
