{
  "$comment": "THE SINGLE ENUMERATION. Generated at build time from the frozen AGENT_CLASSES array in src/agent-classes.js — the same array any runtime selector selects over. /icp.json on each property publishes a SUBSET of this file by id and restates nothing. A second copy of any field below, anywhere, is a defect.",
  "$comment_ratification": "The five-class enumeration and its rulings are carried from the ICP canon and are pending owner ratification; `assistant` is a new authorial act awaiting a ruling. Recorded in this site's open P0 ledger, published at https://visibility.cloud/p0-ledger/.",
  "p0_ledger": "https://visibility.cloud/p0-ledger/",
  "version": "2026-07-30.1",
  "verified": "Live today, checkable by curl: POST https://epcis.dev/translate (EPCIS 1.1/1.2/2.0 XML → 2.0 JSON-LD + per-job FidelityReport), POST https://epcis.dev/validate (sha256-pinned official GS1 EPCIS 2.0.1 schema), POST https://epcis.dev/hash (CBV 2.0 §8.9, OpenEPCIS-vector-gated). 683/683 spine tests pass. The hosted capture/query/MCP spine (api.epcis.dev), the npm package, and the repository release are [OWNER] entries in the open P0 ledger (https://visibility.cloud/p0-ledger/). No conformance attestation has ever been issued, and none is claimed.",
  "route_derivation": {
    "$comment": "Routes are derived, never stored. Published as a derivation rule, not as a field on a class.",
    "rule": "B2[arrives]2[terminal principal-kind]. Human in the arrives position is the unmarked default and is ELIDED — except where the terminal principal-kind is Agent, because B2A already denotes an agent arriving self-principal and the H is what disambiguates.",
    "derives_exhaustively": {
      "human→Business": "B2B",
      "human→Developer": "B2D",
      "human→Agent": "B2H2A",
      "agent→Business": "B2A2B",
      "agent→Developer": "B2A2D",
      "agent→Agent": "B2A"
    },
    "null_case": "An arrival with no ICP has no terminal principal-kind, so route is null — absent, not a value.",
    "invariant": "a route's terminal-principal letter must equal the containing ICP's principal-kind, and its arrives-letter must equal the row's workerType"
  },
  "subsets": {
    "epcis.dev": [
      "coding",
      "integration",
      "verifier",
      "procurement"
    ],
    "visibility.cloud": [
      "assistant",
      "verifier",
      "procurement"
    ]
  },
  "classes": [
    {
      "id": "coding",
      "row": "AC-1",
      "terminal_principal_kind": "Developer",
      "typical_face": "cli",
      "entry_verb": "the bare npx invocation — never @latest (npm publication: an [OWNER] entry in the public P0 ledger)",
      "verbs_in_scope": [
        "capture",
        "validate",
        "install"
      ],
      "first_value": "a working local pass — the exit code, not an adjective",
      "persist_me_template": "coding.v1",
      "residency_artifact": "AGENTS.md line + MCP entry",
      "first_gate": "durable retention, after the integration works",
      "persist_me": "epcis.dev — EPCIS 2.0 capture spine, open source by construction. Verbs: capture, validate, install. Validation against pinned official GS1 EPCIS 2.0 schemas (sha256 provenance); errors as RFC 7807 with the standard's own exception types. Live today: POST https://epcis.dev/translate, /validate and /hash. The npm package and the repository release are [OWNER] entries in the public P0 ledger, https://visibility.cloud/p0-ledger/."
    },
    {
      "id": "integration",
      "row": "AC-2",
      "terminal_principal_kind": "Developer",
      "typical_face": "sdk",
      "entry_verb": "translate",
      "verbs_in_scope": [
        "translate",
        "validate",
        "hashEvent"
      ],
      "first_value": "a real EPCIS 1.1/1.2 corpus translated with a per-job round-trip fidelity report",
      "persist_me_template": "integration.v1",
      "residency_artifact": "MCP entry",
      "first_gate": "none in the free zone; only at durable storage of results",
      "persist_me": "epcis.dev — EPCIS 1.1/1.2/2.0 XML → 2.0 JSON-LD translation with per-job round-trip fidelity reports; CBV 2.0 §8.9 event hash gated against OpenEPCIS reference vectors. Live today: POST https://epcis.dev/translate and /hash."
    },
    {
      "id": "verifier",
      "row": "AC-3",
      "terminal_principal_kind": "Business",
      "typical_face": "mcp",
      "entry_verb": "get_event / trace_epc (both readOnlyHint: true)",
      "verbs_in_scope": [
        "get_event",
        "trace_epc",
        "hashEvent",
        "validate"
      ],
      "first_value": "validate against pinned schemas; CBV 2.0 §8.9 hash equality — deterministic answers, nothing narrative",
      "persist_me_template": "verifier.v1",
      "residency_artifact": "citation/attestation stanza",
      "first_gate": "authority — reading someone else's record requires a grant",
      "persist_me": "visibility.cloud / epcis.dev — verify an EPCIS 2.0 record: pinned official-schema validation, CBV 2.0 §8.9 hash recomputation, per-EPC trace. Read verbs carry readOnlyHint: true. Live today: POST https://epcis.dev/validate and /hash; hosted query is a named entry in the public P0 ledger. No conformance attestation has ever been issued, and none is claimed."
    },
    {
      "id": "procurement",
      "row": "AC-4",
      "terminal_principal_kind": "Business",
      "typical_face": "mcp",
      "entry_verb": "a claimApiKey-shaped verb (to be specified; unbuilt)",
      "verbs_in_scope": [
        "query",
        "requestGrant"
      ],
      "first_value": "read price and Scope facts as matchable spec",
      "persist_me_template": "procurement.v1",
      "residency_artifact": "Offer schema entry",
      "first_gate": "payment — by design, deferred past value-realisation",
      "persist_me": "visibility.cloud — machine-readable offer facts: capture $0/event (policy, stated ahead of published terms), gates on durable state, authority and licensed data, never on compute. Hosted capture and published terms are named entries in the public P0 ledger; prices post as numbers when set."
    },
    {
      "id": "assistant",
      "row": "AC-5",
      "terminal_principal_kind": "Business",
      "typical_face": "cli, unknown",
      "entry_verb": "query (own-scope)",
      "verbs_in_scope": [
        "query (own-scope)",
        "validate",
        "explain_scope"
      ],
      "first_value": "answer a bounded question inside already-granted Scope",
      "persist_me_template": "assistant.v1",
      "residency_artifact": "memory-file line",
      "first_gate": "authority (a wider Scope)",
      "persist_me": "visibility.cloud — bounded own-scope queries over an EPCIS 2.0-conformant event record whose every event carries `who` (the attested observer) distinct from `capturedBy` (the warrantor account); party/org grain derived at read time, never stamped. Hosted own-scope query is a named entry in the public P0 ledger."
    }
  ]
}
