{
 "_law": "decision 133 P0.5 s.6 (2026-09-04): one canonical external capability graph. An interface (human route, OpenAPI operation, MCP tool, A2A skill, gateway entry) exists only as a projection of a capability here. Removing a capability removes every projection; adding a backend route never creates a capability.",
 "version": "2026-09-04.3",
 "generated_at": "2026-09-21T05:48:10.574806+00:00",
 "canon_epoch": "2026-09-21T05:48:09.997137+00:00",
 "capabilities": [
  {
   "capability_id": "state_intent",
   "human_name": "Say what needs to happen",
   "purpose": "turn a need in plain language into a routed, checkable path; nothing is committed",
   "principal_classes": [
    "human",
    "agent"
   ],
   "authority_required": "none",
   "maturity": "PILOT",
   "evidence_contract": "answer states possible paths, estimated range, missing information; no evidence record yet",
   "side_effect_class": "none",
   "commitment_boundary": "NON_BINDING",
   "payment_semantics": null,
   "geography": "NL execution; ordering anywhere",
   "availability": "LIVE",
   "interfaces": {
    "human": [
     "/welcome/",
     "/do"
    ],
    "openapi": [
     "POST /do",
     "POST /coordination/route",
     "POST /coordination/needs/parse",
     "GET /coordination/agent/handbook"
    ],
    "mcp": [
     "ask_astranl"
    ],
    "a2a": [],
    "gateway": [
     "how_it_works"
    ]
   },
   "owner": "steward (decision 133)",
   "canon_epoch": "2026-09-21T05:48:09.997137+00:00"
  },
  {
   "capability_id": "open_coordination_case",
   "human_name": "Open a coordination case",
   "purpose": "a stated need becomes a case with a proof criterion agreed before work; every state change carries an evidence line",
   "principal_classes": [
    "human",
    "agent"
   ],
   "authority_required": "none to open; X-Agent-Key binds the agent identity; principal contact required for delivery",
   "maturity": "PILOT",
   "evidence_contract": "case audit trail at /api/coordination/case/{id}; ed25519-signed proof at /api/coordination/case/{id}/proof",
   "side_effect_class": "creates-or-modifies-records",
   "commitment_boundary": "NON_BINDING until acceptance; AUTHORIZED at acceptance; FINANCIALLY_COMMITTED only on capture",
   "payment_semantics": "a case itself moves no money; see agent_hands_errand",
   "geography": "NL execution; ordering anywhere",
   "availability": "LIVE",
   "interfaces": {
    "human": [
     "/api/cc/c",
     "/klusje/"
    ],
    "openapi": [
     "POST /api/coordination/case",
     "POST /api/cc/case",
     "POST /coordination/program"
    ],
    "mcp": [
     "create_task"
    ],
    "a2a": [
     "open_case",
     "coordination_open_case"
    ],
    "gateway": [
     "coordination.open_case"
    ]
   },
   "owner": "steward (decision 133)",
   "canon_epoch": "2026-09-21T05:48:09.997137+00:00"
  },
  {
   "capability_id": "read_case_status_and_evidence",
   "human_name": "Follow a case and its evidence",
   "purpose": "full state history with the evidence behind every transition; webhook subscription",
   "principal_classes": [
    "human",
    "agent"
   ],
   "authority_required": "case id or share token; contact stays server-side",
   "maturity": "LIVE",
   "evidence_contract": "append-only history; signature verifiable offline via /api/astralock/pubkey",
   "side_effect_class": "none",
   "commitment_boundary": "n/a",
   "payment_semantics": null,
   "geography": "NL execution; ordering anywhere",
   "availability": "LIVE",
   "interfaces": {
    "human": [
     "/api/cc/case/{ref}",
     "/proof/"
    ],
    "openapi": [
     "GET /api/coordination/case/{case_id}",
     "GET /api/coordination/case/{case_id}/proof",
     "POST /api/coordination/case/{case_id}/subscribe"
    ],
    "mcp": [
     "check_task",
     "get_evidence"
    ],
    "a2a": [
     "case_status",
     "coordination_case_status"
    ],
    "gateway": [
     "coordination.case_status"
    ]
   },
   "owner": "steward (decision 133)",
   "canon_epoch": "2026-09-21T05:48:09.997137+00:00"
  },
  {
   "capability_id": "read_open_work",
   "human_name": "Read what is open now",
   "purpose": "public requests with a named buyer and a real deadline, kept apart from measured gaps nobody asked for",
   "principal_classes": [
    "human",
    "agent",
    "provider"
   ],
   "authority_required": "none",
   "maturity": "LIVE",
   "evidence_contract": "each item states whether an executor exists; honest zero when nothing is open",
   "side_effect_class": "none",
   "commitment_boundary": "n/a",
   "payment_semantics": null,
   "geography": "NL execution; ordering anywhere",
   "availability": "LIVE",
   "interfaces": {
    "human": [
     "/kansen/",
     "/vakwerk/{trade}"
    ],
    "openapi": [
     "GET /api/kansen.json",
     "GET /vakwerk/{trade}"
    ],
    "mcp": [],
    "a2a": [
     "open_work",
     "coordination_open_work"
    ],
    "gateway": [
     "coordination.open_work_machine"
    ]
   },
   "owner": "steward (decision 133)",
   "canon_epoch": "2026-09-21T05:48:09.997137+00:00"
  },
  {
   "capability_id": "agent_hands_errand",
   "human_name": "Verified human hands for an errand",
   "purpose": "a KvK-registered executor performs a physical errand in NL; card hold on the executor account, captured after confirmed proof",
   "principal_classes": [
    "agent",
    "human"
   ],
   "authority_required": "X-Agent-Key or the public errand form; the principal confirm captures",
   "maturity": "PILOT",
   "evidence_contract": "proof criterion fixed before work; report with every promised artefact; board at /api/agent-hands/board",
   "side_effect_class": "creates-or-modifies-records; money transitions",
   "commitment_boundary": "AUTHORIZED at accept; FINANCIALLY_COMMITTED at confirm/capture",
   "payment_semantics": "payment-truth.json: direct provider payment on a provider-owned rail; direct bank default NL, Stripe optional; separate 1% AstraNL fee after confirmed settlement",
   "geography": "NL execution; ordering anywhere",
   "availability": "LIVE",
   "interfaces": {
    "human": [
     "/agent-hands/"
    ],
    "openapi": [
     "POST /api/agent-hands/order",
     "POST /api/agent-hands/order/{oid}/fund",
     "POST /api/agent-hands/order/{oid}/accept",
     "POST /api/agent-hands/order/{oid}/report",
     "POST /api/agent-hands/order/{oid}/confirm",
     "GET /api/agent-hands/board",
     "importable: /agent-hands/openapi.json"
    ],
    "mcp": [
     "create_task (errand class)"
    ],
    "a2a": [],
    "gateway": [
     "agent_hands"
    ]
   },
   "owner": "steward (decision 133)",
   "canon_epoch": "2026-09-21T05:48:09.997137+00:00"
  },
  {
   "capability_id": "offer_capacity",
   "human_name": "Offer free capacity from your own system",
   "purpose": "push free capacity or surplus stock from an ERP, WMS, fleet or rental system; it becomes coordinated work",
   "principal_classes": [
    "business",
    "agent"
   ],
   "authority_required": "X-Agent-Key",
   "maturity": "LIVE_ZERO_VOLUME",
   "evidence_contract": "capacity records visible as open work; 0 external offers settled",
   "side_effect_class": "creates-or-modifies-records",
   "commitment_boundary": "NON_BINDING",
   "payment_semantics": null,
   "geography": "NL execution; ordering anywhere",
   "availability": "LIVE_ZERO_VOLUME",
   "interfaces": {
    "human": [
     "/koppelen/",
     "/flows/"
    ],
    "openapi": [
     "POST /api/feed/capacity"
    ],
    "mcp": [],
    "a2a": [],
    "gateway": [
     "coordination.offer_capacity"
    ]
   },
   "owner": "steward (decision 133)",
   "canon_epoch": "2026-09-21T05:48:09.997137+00:00"
  },
  {
   "capability_id": "provider_network",
   "human_name": "Find or enrol a provider",
   "purpose": "search the same provider index the site uses; enrol a consenting provider with live KvK verification",
   "principal_classes": [
    "human",
    "agent",
    "provider"
   ],
   "authority_required": "none for search; consent of the party for registration",
   "maturity": "PILOT",
   "evidence_contract": "verification state per card at /truth/executors.json; never a bare verified",
   "side_effect_class": "search none; register creates a record",
   "commitment_boundary": "n/a",
   "payment_semantics": null,
   "geography": "NL execution; ordering anywhere",
   "availability": "LIVE",
   "interfaces": {
    "human": [
     "/cabinet/",
     "/uitvoerder/"
    ],
    "openapi": [
     "GET /api/providers/search",
     "POST /api/providers/register",
     "GET /api/truth/executors.json"
    ],
    "mcp": [],
    "a2a": [
     "provider_network_search"
    ],
    "gateway": [
     "provider_network"
    ]
   },
   "owner": "steward (decision 133)",
   "canon_epoch": "2026-09-21T05:48:09.997137+00:00"
  },
  {
   "capability_id": "verify_reality",
   "human_name": "Verify a counterparty, a claim or a seal",
   "purpose": "official-source composition (sanctions, VIES, KvK, RDW, Companies House, DVSA) and ed25519 sealed attestations; UNKNOWN is a state",
   "principal_classes": [
    "human",
    "agent"
   ],
   "authority_required": "none for verify; prepaid wallet for notary seals",
   "maturity": "LIVE",
   "evidence_contract": "ATTESTED under schema, never FACT; Merkle inclusion proof; public key published",
   "side_effect_class": "none (attest creates a sealed receipt)",
   "commitment_boundary": "n/a",
   "payment_semantics": "notary seal fees from a prepaid wallet (ATTEST-WALLET-1)",
   "geography": "NL execution; ordering anywhere",
   "availability": "LIVE",
   "interfaces": {
    "human": [
     "/notary/"
    ],
    "openapi": [
     "GET /api/verify/counterparty",
     "POST /api/reality/oracle/kvk",
     "GET /api/reality/receipt/{receipt_id}/verify",
     "GET /api/astralock/sth",
     "GET /api/astralock/pubkey",
     "GET /api/astralock/proof"
    ],
    "mcp": [],
    "a2a": [],
    "gateway": [
     "verified_reality_stack",
     "reality_notary",
     "verifiable_seals"
    ]
   },
   "owner": "steward (decision 133)",
   "canon_epoch": "2026-09-21T05:48:09.997137+00:00"
  },
  {
   "capability_id": "machine_intelligence",
   "human_name": "Robot, drone and machine knowledge",
   "purpose": "source-verified catalogue with maturity labels and a need-to-capable-machine router; a catalogue entry is never bookable",
   "principal_classes": [
    "human",
    "agent",
    "operator"
   ],
   "authority_required": "none",
   "maturity": "CATALOG_ONLY",
   "evidence_contract": "passport per record with verification tier; registered operators 0; transaction_ready false",
   "side_effect_class": "none",
   "commitment_boundary": "n/a",
   "payment_semantics": null,
   "geography": "NL execution; ordering anywhere",
   "availability": "CATALOG_ONLY",
   "interfaces": {
    "human": [
     "/robots/",
     "/drones/",
     "/robots/trust/"
    ],
    "openapi": [
     "GET /api/robot-passport/{id}",
     "GET /api/robot-route",
     "GET /api/robots-trust",
     "GET /api/robots"
    ],
    "mcp": [
     "search",
     "fetch"
    ],
    "a2a": [],
    "gateway": [
     "robot_passport_registry"
    ]
   },
   "owner": "steward (decision 133)",
   "canon_epoch": "2026-09-21T05:48:09.997137+00:00"
  },
  {
   "capability_id": "technics_sourcing",
   "human_name": "Source a vehicle or machine",
   "purpose": "create a sourcing request and follow it: brief, real sellers, rank, offers, purchase confirmation; the buyer contracts with the seller directly",
   "principal_classes": [
    "human",
    "agent"
   ],
   "authority_required": "none; contact_email for the human principal",
   "maturity": "PILOT",
   "evidence_contract": "request state machine; offers only from real sellers; discount report",
   "side_effect_class": "creates-or-modifies-records",
   "commitment_boundary": "NON_BINDING until purchase confirmation",
   "payment_semantics": "1% only on a completed purchase, invoiced separately; AstraNL not a party",
   "geography": "NL execution; ordering anywhere",
   "availability": "LIVE",
   "interfaces": {
    "human": [
     "/cabinet/technics/"
    ],
    "openapi": [
     "POST /coordination/technics/request",
     "GET /coordination/technics/state/{req_id}",
     "POST /coordination/technics/source/{req_id}",
     "POST /coordination/technics/rank/{req_id}",
     "POST /coordination/technics/confirm-purchase/{req_id}"
    ],
    "mcp": [],
    "a2a": [],
    "gateway": [
     "technics"
    ]
   },
   "owner": "steward (decision 133)",
   "canon_epoch": "2026-09-21T05:48:09.997137+00:00"
  },
  {
   "capability_id": "procure_products",
   "human_name": "Find real products and compose baskets",
   "purpose": "search connected NL merchant catalogues with live prices; honest zero results, never invented products",
   "principal_classes": [
    "human",
    "agent"
   ],
   "authority_required": "none",
   "maturity": "LIVE",
   "evidence_contract": "basket and click-through stats; zero provider-approved real purchases",
   "side_effect_class": "basket creates a record",
   "commitment_boundary": "NON_BINDING",
   "payment_semantics": null,
   "geography": "NL execution; ordering anywhere",
   "availability": "LIVE",
   "interfaces": {
    "human": [
     "/{lang}/shop/",
     "/calculator/smart"
    ],
    "openapi": [
     "GET /api/calculator/products",
     "POST /api/calculator/bom",
     "GET /api/calculator/stores"
    ],
    "mcp": [
     "compose_parts_basket"
    ],
    "a2a": [],
    "gateway": []
   },
   "owner": "steward (decision 133)",
   "canon_epoch": "2026-09-21T05:48:09.997137+00:00"
  },
  {
   "capability_id": "paid_ai_execution",
   "human_name": "Paid AI execution from prepaid credit",
   "purpose": "run classify, extract, translate, summarise, route at provider cost plus 15% markup; credit is AstraNL service credit, never custody of third-party funds",
   "principal_classes": [
    "agent"
   ],
   "authority_required": "X-Agent-Key + prepaid credit",
   "maturity": "LIVE",
   "evidence_contract": "per-call receipt; benchmark manifest",
   "side_effect_class": "billing",
   "commitment_boundary": "n/a",
   "payment_semantics": "flat per task from a prepaid wallet; separate from the coordination fee",
   "geography": "NL execution; ordering anywhere",
   "availability": "LIVE",
   "interfaces": {
    "human": [],
    "openapi": [
     "POST /capabilities/dispatch",
     "POST /capabilities/classify",
     "GET /capabilities/dispatch/manifest"
    ],
    "mcp": [],
    "a2a": [],
    "gateway": [
     "wallet"
    ]
   },
   "owner": "steward (decision 133)",
   "canon_epoch": "2026-09-21T05:48:09.997137+00:00"
  },
  {
   "capability_id": "public_tenders_radar",
   "human_name": "Public tenders radar",
   "purpose": "open Dutch and EU public tenders from TenderNed and TED; a tender is never presented as a task",
   "principal_classes": [
    "human",
    "provider"
   ],
   "authority_required": "none",
   "maturity": "RESEARCH",
   "evidence_contract": "source links; zero bids submitted through the platform",
   "side_effect_class": "none",
   "commitment_boundary": "n/a",
   "payment_semantics": null,
   "geography": "NL execution; ordering anywhere",
   "availability": "RESEARCH",
   "interfaces": {
    "human": [
     "/tenders.html"
    ],
    "openapi": [
     "GET /api/tenders/open",
     "GET /api/tenders/{pid}/brief"
    ],
    "mcp": [],
    "a2a": [],
    "gateway": []
   },
   "owner": "steward (decision 133)",
   "canon_epoch": "2026-09-21T05:48:09.997137+00:00"
  }
 ],
 "a2a_protocol_operations": {
  "protocol_binding": "A2A 1.0 JSON-RPC over HTTPS at https://astranl.com/a2a (also /a2a/)",
  "discovery": "/.well-known/agent-card.json (JWS-signed, JWKS at /.well-known/jwks.json)",
  "version_negotiation": "A2A-Version header; unsupported -> VersionNotSupportedError -32009",
  "operations": {
   "SendMessage / message/send": {
    "status": "IMPLEMENTED",
    "semantic_capability_ids": [
     "open_coordination_case",
     "read_case_status_and_evidence",
     "read_open_work",
     "provider_network"
    ],
    "note": "skill chosen via message.metadata.skill; no skill -> guidance Message, nothing opened"
   },
   "GetTask / tasks/get": {
    "status": "IMPLEMENTED",
    "note": "unknown or out-of-scope -> TaskNotFoundError -32001 (existence not leaked)"
   },
   "ListTasks / tasks/list": {
    "status": "IMPLEMENTED",
    "note": "scoped to the verified X-Agent-Key principal; anonymous -> empty list; contextId, status, pageSize, pageToken, includeArtifacts, statusTimestampAfter; descending update time; totalSize"
   },
   "CancelTask / tasks/cancel": {
    "status": "IMPLEMENTED",
    "note": "coordination cases are not cancelable via A2A yet -> TaskNotCancelableError -32002 (honest limit)"
   },
   "SendStreamingMessage / message/stream": {
    "status": "REFUSED",
    "note": "capabilities.streaming=false -> UnsupportedOperationError -32004"
   },
   "tasks/resubscribe": {
    "status": "REFUSED",
    "note": "streaming=false -> -32004"
   },
   "tasks/pushNotificationConfig/*": {
    "status": "REFUSED",
    "note": "pushNotifications=false -> -32004"
   }
  },
  "conformance": "official a2aproject/a2a-tck, MUST level, paced within the production rate policy; receipt at /data/protocol_conformance_receipt.json; public claim until it passes: A2A 1.0 integration - PILOT / conformance in progress"
 },
 "a2a_skills_not_projected": {
  "create_real_world_task": "no A2A handler; use OpenAPI /api/agent-hands or MCP create_task",
  "coordination_offer_capacity": "no A2A handler; use OpenAPI POST /api/feed/capacity",
  "reality_notary_attest": "no A2A handler; use OpenAPI /api/reality",
  "reality_notary_verify": "no A2A handler; use OpenAPI /api/reality/receipt/{id}/verify",
  "robots_catalog": "no A2A handler; use OpenAPI /api/robots or MCP search/fetch",
  "technics_request": "no A2A handler; use OpenAPI /coordination/technics/request",
  "carfinder_search": "no A2A handler; use OpenAPI",
  "carfinder_report": "no A2A handler; use OpenAPI",
  "procure_find": "no A2A handler; use OpenAPI /api/calculator/products or MCP compose_parts_basket",
  "execute_ai_capability": "no A2A handler; use OpenAPI /capabilities/dispatch",
  "provider_network_register": "no A2A handler; use OpenAPI POST /api/providers/register",
  "check_agent_reputation": "no approved public operation backs it; reputation reads are not in the public contract",
  "create_attestation": "HMAC-signed attestation superseded by the ed25519 Reality Notary; exposing it would advertise a weaker proof",
  "federation_health": "partner observability belongs to the partner tier",
  "forum_funnel": "internal funnel analytics, not an external capability"
 },
 "projection_rule": {
  "openapi": "operation must also be APPROVED in spec/public_operations.json",
  "a2a": "router/agent_card.py keeps only skills listed here",
  "mcp": "the public subset of /mcp/tools.json must be listed here",
  "gateway": "agent-gateway.json sections named here"
 }
}