Module 4 · The Authority Layer

Lecture 4.7

Authority as a First-Class Primitive

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.

Lesson 27 / 40Start the course to keep your place and get the rest by email.

Learning objectives

After this lesson, the reader should understand:

  • 01State what makes a capability a 'primitive' in a software stack, independent of what backs it.
  • 02Explain why a role check or a scattered set of permission flags is not the same thing as an authority primitive.
  • 03Read a real call signature that answers the same question the same way regardless of which of several sources the authority comes from.

Concept framework

What a primitive requires that ambient logic does not

  1. 01One verb, one object — the call asks whether an action is permitted under a named authority, not whether the caller happens to hold the right role
  2. 02One answer shape regardless of source — a public authority, an artifact the caller owns, or one presented to them by someone else all resolve to the same verdict vocabulary, and the same underlying guarantees are checked no matter which source answered
  3. 03Typed refusal, not a silent default — a call that cannot be answered raises a distinct, catchable condition instead of quietly returning an allow or a bare false
  4. 04Portable — the authority object can travel with the agent that carries it, not only live inside the system that issued it

Case study

One verb, three sources of truth

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: @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.

Discussion questions

  • If the authority artifact is the object and asking it is the verb, what changes about how a system is designed compared to treating authority as a property the system checks?
  • If two different organisations each built a call-shaped primitive like this independently, what would have to match for code written against one to work against the other?
  • Typed errors for 'payment required' and 'issuer not trusted' are both refusals to answer, not verdicts. What is lost if a system quietly turns either into a plain DENIED?
  • fetch() succeeded because developers stopped needing to understand sockets underneath it. What would a developer still need to understand about authority, even once it has an equivalent abstraction?
  • A confidence disclosure that always reports its weakest finding, never its best or an average, is a deliberate design choice. What would a system lose — or quietly gain permission to overclaim — if it reported the average instead?

Exercise

Trace a real call end to end, then design your own primitive's failure modes.

  1. 01Read the can() reference in a published SDK implementing this primitive. Confirm the returned verdict vocabulary is identical across all three call shapes.
  2. 02Find the named error types it can throw instead of returning a verdict, and write down, for each, what a caller should do differently on catching it versus receiving a plain DENIED.
  3. 03Pick one authority check your own system currently makes by role or config lookup. Redraw it as a single call: what would the one input shape need to contain for the check not to care where the answer comes from?
  4. 04Name the failure mode your redrawn call is missing a typed exception for — the one an engineer calling it would currently only discover by reading a stack trace.

Research notes

  • API design for infrastructure primitives — the shape a capability needs before other code can be written against it without knowing the implementation (POSIX file descriptors, ANSI SQL, the Fetch API as convergent examples).
  • Computable Authority, §3 — 'Authority as a First-Class Computational Object'.
  • @nomosprotocol/sdk (npm) — one existence proof: can() unifies three authority sources behind one verdict vocabulary and two typed refusal conditions, NomosPaymentRequiredError and NomosIssuerNotTrustedError.
  • NOMOS-SPEC-007 (Draft) — the portable-authority rail this primitive's third call shape implements, published with a reference implementation and test vectors specifically so a second, independent implementation can exist.
  • NOMOS-SPEC-006 (Artifact Revocation) — the guarantee the 'same source, same checks' claim rests on: an issuer's revocation of a sealed artifact is checked identically whether the caller reached it through a public authority or a presented chain-of-trust artifact.
  • NOMOS-SPEC-007 §5.5 (freshness staples) — the tri-state confidence disclosure (live / staple / unchecked) for a verifier with no revocation source of its own, and the discipline of always reporting the weakest state examined rather than the best.