Lecture 4.7
Software already has first-class primitives for the questions it asks constantly: identity asks authenticate(), storage asks a query, the network asks fetch() — one call, one answer shape, regardless of what actually backs it. Authority has never had that. An agent asking 'can I do this' gets its answer today from whatever mixture of permissions, application logic, policy checks, human approval, and guardrails a particular system happened to wire together — buried inside the application rather than carried alongside it. This lecture asks what changes once the question becomes 'can this action be performed under this authority' instead — once the authority itself is the object, and asking it is the verb.
Learning objectives
After this lesson, the reader should understand:
Concept framework
What a primitive requires that ambient logic does not
Case study
A team wants to add an authority check to their agent, but doesn't yet know whether the rule they need is one already published somewhere, one they'll own themselves, or one another system will hand to them at runtime. How many integrations does that require?
None of the three situations changes the call. One shape answers against any public authority already published, free and keyless. A second answers against an artifact the caller's own organisation owns. A third answers against an artifact someone else presents, with no prior relationship, verified against a root the caller pins themselves rather than one a vendor defines. All three return the same vocabulary: AUTHORIZED, DENIED, ESCALATED. The caller writes the check once, before deciding which of the three sources will actually supply the answer at runtime — which is the real test of a primitive: can code be written against it before the specific backing instance is chosen? A role check fails that test, because the caller already has to know which system holds the role table before it can write the check at all. Failure is typed rather than silent, too: an unpurchased public authority throws a distinct condition carrying its price and purchase URL rather than defaulting to deny; a trust chain that doesn't resolve throws a distinct condition naming which of several reasons applied, rather than returning a false verdict indistinguishable from a real denial. The same discipline extends to what a returned verdict discloses, not only to whether one is given at all: the primitive also reports how confidently it was able to check one specific guarantee — whether the artifact's issuer has revoked it — as a three-state value that is never allowed to claim more certainty than it actually has, and that always reports the weakest state found across everything it examined, never the best. That guarantee is checked the same way regardless of which of the three call shapes supplied the answer, so the choice of rail can never quietly become a way to skip it. One existence proof, not the definition of the idea[1]: @nomosprotocol/sdk, published on npm, ships exactly this — one function, three call shapes, one verdict vocabulary, two typed refusal conditions, and a disclosed confidence state for revocation that behaves identically no matter which shape was used. The third rail, presenting an artifact with no prior registration, implements a published Draft specification with a reference implementation and test vectors and exactly one implementation so far; publishing it as a Draft is what makes a second, independent one possible. Other systems could build the same primitive differently. The point of the case study is that the primitive is buildable and callable before the specific source is known — not that this is the only way to build it. The idea that authorisation can be a uniform question asked of a uniform structure is old in computer science: the access matrix framed protection, half a century ago, as one question[2] — may this subject perform this operation on this object? — answered the same way regardless of what the subject or object was. What is new is the object being asked. The access matrix records what a system's owner has permitted; an authority primitive asks what an institution, under a versioned and sealed artifact, has authorised. The verb is familiar. The noun is the contribution. The strongest objection is that primitives are made by adoption, not by design. fetch() is a primitive because browser vendors who compete with each other implemented one shared standard[3]; a single vendor's SDK, however clean its interface, is a library until others build to the same specification. Concede it entirely. That is why the case study calls the SDK an existence proof rather than the primitive, and why the specification for the portable rail is published as a Draft that needs a second, independent implementation before any interoperability is claimed. There is also a concrete limit in the existence proof itself. In the published SDK, all three call shapes are answered by a remote endpoint — the chain-of-trust rail included. The specification defines chain verification so that it can run entirely offline against a pinned root, and its reference verifier does[4]; the shipped client does not yet. A primitive whose answers depend on one operator's endpoint has not escaped the choke point it argues against. Local evaluation is what would close that gap, and until it ships the honest description is 'one call shape, one verdict vocabulary, one operator'.
Discussion questions
Discussion (0)
No responses yet. Be the first to answer one of the questions above.
Start the course to join the discussion.
Exercise
Trace a real call end to end, then design your own primitive's failure modes.