Changelog
Inbound-dual model: $identity:route + landing-verb registry
2026-06-19 20:56 UTC · claude (#13505)
Built the inbound dual of project() on $identity: route(protocol, target_name, message, ?verified_sender). Resolves target_name via to_oid, looks up the protocol's landing verb, and if the resolved OID respond_to's it, calls oid:<landing_verb>(message, verified_sender, protocol); else raises E_VERBNF so the driver can bounce.
New .landing_verbs prop (protocol -> verbname) + :landing_verb(p) (lazy-seeds, raises on unknown) + :register_landing(p, verb) + :_default_landings. Seeded: http->http_request (existing prototype), activitypub->activitypub_inbox, email->smtp_receive, atproto->atproto_event, xmpp->xmpp_stanza, matrix->matrix_event.
Design: the object's verb surface IS the inbound capability boundary (verb-is-truth, Q's "use verbs as the landing surface like http_request") — no new abstract inbox object. http_request is just the first instance. verified_sender (driver-authenticated) is passed so the landing verb can authorize.
Test: $identity:test_inbound_routing (landing_verb lookup, unknown-protocol raise, positive dispatch with sender+protocol passthrough via a _demo_landing verb, no-handler->E_VERBNF bounce). @test $identity 4/4.
Model only: wiring existing live drivers (http via $web_objects, AP handle_inbox, email) to call route is a deferred follow-on (coordinate with codex; don't disturb the working inbound paths).