Open proposalsProposal 1Draft 2

Jurisdictional context

A small, vendor-neutral way for software to carry, for each party to its work, which jurisdiction's law reaches that party, from the first hop to the last

Proposed by
LexLintSean McDermott, Co-Founder and CEO
Draft 2
Comments to open@lexlint.io
License
CC BY 4.0Adopt it, fork it, improve it

Legal information, not legal advice. This proposal describes a mechanism for carrying facts the law turns on. It does not decide which law applies to anyone, and nothing in it is a determination; that is a question for counsel. See the notice in the footer.

Summary

A law reaches a piece of work through where one of its parties is: where the person it serves is sitting, where the data subject lives, where the operator is established, whose machine was read. Those facts exist at different hops of the work, and the hop that can see one is rarely the hop that needs it. Nothing standard carries them, so each system either guesses from its own socket, which yields the location of a point of presence, or records nothing at all. This proposal gives software one small way to carry them: a reading per party, never merged into one country code, with its source and a commitment to its evidence, as a structured HTTP header across trust boundaries and as baggage inside them, recorded at each hop exactly as given. It says how it meets each of the nine requirements in the paper Whose law was that? and why the readings stay out of the authorization credential. It is for any distributed software, agents included, and it is offered for anyone to adopt.

One piece of work across five hops, and the context that rides with it Five boxes in a row: the edge, the origin, an agent, a subagent and a counterparty site. Under each box is the jurisdictional context as that hop holds it. The edge makes the one reading of the principal from the signal only it can see and passes the result on. The origin adds the operator's establishment from its configuration. The agent adds the provider behind the model it called. The subagent adds the counterparty it read. Every hop records what it was given and never re-derives the principal's reading from its own socket. One piece of work, five hops 1 Edge sees the user's own IP address 2 Origin the operator's application 3 Agent calls a model, starts subagents 4 Subagent reads a site on the principal's behalf 5 Site somebody else's machine The context each hop holds a chip in teal is the reading this hop added principal=DE made once, here, from the signal only this hop sees principal=DE operator=US-CA from configuration, never from the socket principal=DE operator=US-CA provider=US the business behind the model's domain principal=DE operator=US-CA provider=US counterparty=FR from a maintained lookup of the domain receives the work's context, and may answer with its own establishment Every record agrees on the principal Five logs, written by five parties, carry the same reading for the person the work is for, because each hop recorded what it was given and none derived its own. The IP address never leaves hop 1 not in clear, not as a digest: the result travels, never the signal
Figure 1. One piece of work across five hops. The principal's reading is made once, at the only hop that sees the signal, and travels as a result. Each later hop records what it was given and adds a reading only for a party it introduces.

1The problem, in one page

The law holds people and organizations responsible, not software, and it reaches each of them through where they are. Data protection law reaches a controller through its establishment and a person through their residence. Access law reaches through where the machine that was read belongs. Age rules reach through where the user was sitting at the moment of use. AI law reaches through the market a system was placed on and where its output is used. The server's region is almost never the fact a statute turns on.

Ordinary software answered this once, at launch. The company and its servers were in one jurisdiction, the customers in a known set of them, and the answer went into a policy. Distributed software answers it per call, and the facts are spread across hops that never see each other. A user in Bavaria reaches an origin in Virginia through an edge node in Frankfurt; the origin calls a payment service in Ireland, and an agent acting for that user fans out to five subagents and a hundred sites.

At an origin behind any edge, the IP address on the socket belongs to the edge, not to the person. A check run on it returns a well-formed country code, on time, with no error, and it is the country of a point of presence. The user's own IP address exists at exactly one hop, and that is the hop whose record must not keep it. So each hop downstream works from what it is told, and today nothing tells it. A service acting on a French user's request applies whatever it would have applied to anyone, logs it that way, and the record then verifies, signs and chains around a wrong answer.

The claim in one line

Which jurisdiction's law reaches each party to a piece of work is a fact that has to travel with the work, per party, from the first hop to the last, and be recorded at each hop as it was given.

This document is the mechanism. It names the parties, defines a reading, fixes the vocabulary and the rules, and binds the model to HTTP, to baggage, to message queues and to the agent protocols. It is written for the people who maintain edges, gateways, frameworks, services and record formats, and it assumes no product. Nothing in it decides which law applies; it carries the facts that question turns on.

2The model

2.1 A piece of work and its parties

The unit is a piece of work: a web request, a batch job, a message, an agent's task, and every call made on its behalf. The context belongs to the work, not to any one system, which is why every hop that acts on the work carries it. A work has parties. Five party keys are defined in this draft, each a plain legal role, with the terms common bodies of law use for it and, for readers arriving from the LexLint handbook, the group it maps to there.

KeyWhoCommon legal termsHandbook group
principalthe person or organization the work is done foruser; data subject acting for themselves; the deployer itself when software acts for its operatoruses, as principal
subjecta person whose personal data is in the work, including anyone the output is sent todata subject; affected person; recipientuses, as data subject or affected person
operatorthe organization that runs the software and answers for the workcontroller; deployer; operatorruns
provideran organization whose service or model a hop called to do the workprocessor; provider; sub-processormakes
counterpartya system a hop read from or wrote to, and the organization behind itthe accessed party; rightsholder; recipient systemtalks_to

Two kinds of party are deliberately not carried. The overseeing party, a regulator or an auditor, is derived from the other readings: the regulator is the one whose law reached. The distributing party, a store or an importer, is a design-time fact that does not change per piece of work. New party keys are added by registration, which is open question 3.

Per party, never merged Five horizontal lanes, one per party key: principal, subject, operator, provider and counterparty. Each lane holds one reading with its jurisdiction, the fact it states and how it was made. Beside them, struck through, is a single country code for the whole piece of work, which answers none of the questions the five readings answer and looks as though it answers all of them. Per party, never merged principal DE · presence · observed · by edge.example.net · ev=k7Qf… subject (FR GB unknown) · residence · declared · by app.example.com operator US-CA · establishment · declared · by app.example.com provider US · establishment · resolved · by agent.example.com counterparty FR · establishment · resolved · by harness.example.com Five lanes, five bodies of law, five different questions answered. country=DE one code for the whole work Answers none of them and looks as though it answers all of them
Figure 2. Per party, never merged. Different bodies of law pivot on different parties to the same work, so one answer for the whole work is the wrong shape.

2.2 Readings

A reading is one statement about one party. It is a fact with a source and an age, never a conclusion: it says that this work was evaluated as directed at this jurisdiction, on this signal, by this issuer. It is never the sentence "this law applies" or "this law does not apply". That sentence is a legal conclusion, and the carrier never makes one.

FieldMeaningValues
partywhich party the reading is aboutone of the five keys above
factwhich fact about the party the law turns onpresence (where they are at the time), residence (where they live), establishment (where the organization is established)
jurisdictionsone or more jurisdiction identifierssee 2.3; unknown is a value
srchow the reading was madedeclared (the party said so: an account, a configuration, a legal notice), observed (read from a network signal at the hop where that signal exists), resolved (looked up from a domain or identifier in a maintained dataset), unknown (no basis)
bywho made the readinga hostname or an identifier the receiver can recognize
atwhen it was madeoptional; a date
eva commitment to an evidence record held elsewhereoptional; opaque to every reader not shown the evidence; never the signal itself
vocabthe vocabulary the identifiers are drawn fromoptional; absent means ISO 3166

Each party has a default fact, so the common case names none: the principal's presence, a subject's residence, and the establishment of an operator, a provider or a counterparty. A reading about a different fact names it, so a principal's declared residence travels beside the edge's reading of their presence without displacing it.

2.3 Jurisdiction identifiers

The base vocabulary is ISO 3166: an alpha-2 country code such as FR, an ISO 3166-2 subdivision code such as US-CA, and the exceptionally reserved code EU for the European Union. unknown is a value. Identifiers are compared without regard to case and written in upper case. Any other published vocabulary may be used by naming it in vocab as a URI; a nested identifier such as urn:ungovr:us/ca is one such vocabulary, and the base is never anything but ISO 3166.

A receiver widens upward only. A subdivision is read as inside its country, and a member state as inside its union, so a reading of DE brings the law of the European Union with it. A country never brings its subdivisions, because a local rule binds inside the locality and a system that widened downward would read every local rule in the country against every piece of work.

2.4 Rules for every hop

  1. Forward every reading you received, unchanged, on every call you make on the same work, including to subagents, queues and batch steps.
  2. Record every reading you were given, with its issuer, in your own record of the work.
  3. Never re-derive a reading you were given from your own network view. The IP address on your socket belongs to the hop before you.
  4. Add a reading only for a party you introduce, and name yourself as its issuer.
  5. Make a reading from a network signal only at the hop where that signal exists, and carry the result, never the signal.
  6. unknown is a value. Never coerce it to a default. When the principal's jurisdiction is unknown, nothing narrows: the work is read against the declared set as a whole, not against no jurisdiction.
  7. Across a trust boundary, verify. A reading you cannot verify is kept in the record marked unverified and treated as unknown for any decision.

A responding hop may return the readings it added, its own establishment as a provider or a counterparty and any party it introduced further down, so the caller's record can carry the fan-out. Whether a response reading is framed from the work's point of view or the speaker's is open question 2.

What travels, what is added per hop, and what never enters Three bands. The first, what travels with the work from the first hop on: the principal's presence, the subjects' residence, and the controlling operator's establishment. The second, what is added at the hop that introduces the party and reported back: a provider's establishment and a counterparty's. The third, what never enters a reading or a record built from it: an IP address, a precise coordinate, and a user or session identifier, in clear or as a digest. Three kinds of fact Travels with the work forwarded unchanged by every hop, to subagents, queues and batch steps principal · presence subject · residence operator · establishment made once, where the fact exists, or declared Added at the hop that introduces the party resolved from a domain by a maintained lookup, reported back so the caller's record carries the fan-out provider · establishment counterparty · establishment one reading per party the hop touched, issued by the hop Never enters not a reading, not a record built from one, not in clear and not as a digest an IP address a precise coordinate a user or session identifier a digest of a low-entropy value is the value
Figure 3. Three kinds of fact. What travels with the work, what is added at the hop that introduces a party, and what never enters a reading or a record built from one.

3Bindings

One model, several carriers. The HTTP header is the reference form; the others map onto it field for field, so a reading made at an edge and a reading read out of a message queue are the same reading.

3.1 The HTTP header

One field, a Structured Fields dictionary (RFC 9651). The name is provisional and is open question 1. It carries no X- prefix, which RFC 6648 deprecated.

Jurisdictional-Context: principal=DE;src=observed;by="edge.example.net";ev="k7Qf2m...", subject=(FR GB unknown);src=declared;by="app.example.com", operator=US-CA;src=declared;by="app.example.com"
PartFormRule
key<party> or <party>.<fact>a bare party key means its default fact; a key appears once, so several jurisdictions for one party and fact go in the inner list
valuea token, or an inner list of tokensFR, US-CA, EU, unknown; in another vocabulary, a string
srctokendeclared, observed, resolved, unknown
bystringthe issuer
atdateoptional
evstringoptional; an opaque commitment
vocabstringoptional; a URI naming the vocabulary of the value

Readings are about the set of jurisdictions for a party and a fact, never about an individual. The field is sent on requests, and on responses only to carry readings the responder added. An intermediary that does not understand it forwards it unchanged, as rule 1 requires.

3.2 Baggage

Inside a trust domain the same readings travel as W3C Baggage members, which the tracing libraries already on every instrumented hop propagate by default, in every language they support. The mapping is one to one: the member key is jurisdiction.<party> or jurisdiction.<party>.<fact>, several jurisdictions are joined with +, and the parameters ride as the member's properties.

baggage: jurisdiction.principal=DE;src=observed;by=edge.example.net, jurisdiction.subject=FR+GB+unknown;src=declared, jurisdiction.operator=US-CA;src=declared

The Baggage specification's own warning applies: do not carry confidential information across a trust boundary in baggage. The context is coarse by construction, so the warning is met by never putting anything else beside it, and by using the signed form of 3.4 the moment the work leaves the domain.

3.3 Messages, remote procedure calls and the agent protocols

A message queue carries the HTTP string unchanged as a message header under the same name, and remote procedure call metadata carries it under the lower-cased name. A batch step that reads a message forwards what it read, as rule 1 requires, so a nightly job is a hop like any other. The Model Context Protocol carries the string in a namespaced metadata key on each request, and the agent-to-agent protocol as an extension activated per request; both need a neutral namespace or URI that nobody owns, which is open question 7. Until one exists an implementer uses a namespace of its own and says so.

3.4 Across a trust boundary

A claim is as good as its issuer. Inside a trust domain the readings are unsigned, because the hops already trust each other. Across a boundary the header is covered by an HTTP message signature (RFC 9421), with key discovery left to the two parties, or the same readings travel as a claim in a token the edge issues to the origin. This draft profiles the header and requires one of the two across a boundary; the signature component set is open question 5. A receiver that cannot verify applies rule 7.

Inside a trust domain and across one Two dashed boxes, each a trust domain. Inside the first, the operator's, three services pass the readings to each other as baggage members, unsigned, the way tracing context already travels. Inside the second, a provider's, the same. Between the two domains one arrow carries the readings as a structured header covered by an HTTP message signature, or as a claim in a token the edge issued, and the receiving domain verifies before it relies on anything. Two tiers, one model The operator's trust domain edge origin agent baggage: jurisdiction.principal=DE;… unsigned, propagated by the tracing libraries already on every hop, never across the boundary A provider's trust domain gateway service model baggage: jurisdiction.principal=DE;… verified once at the gateway, then carried inside the way the operator carried it Jurisdictional-Context: principal=DE;src=observed;… across the boundary: the header, signed, or the same readings as a token claim
Figure 4. Two tiers, one model. Baggage inside a trust domain, where the tracing libraries already carry it; the signed header, or a token claim, across the boundary between two.

4Privacy

The context holds country or subdivision labels and the word unknown. A label at that granularity is a derived, non-identifying value on its own: it sits far outside the radius at which a jurisdiction such as California treats location as sensitive, and it is the granularity regulators already accept as a control rather than as surveillance. It becomes personal data only in the company of an identifier, so the rule is enforced across every field admitted to a record, never checked once on this one.

What never enters a reading, or a record built from one: an IP address, a precise coordinate, a user or session identifier, in clear or as a digest. A digest does not rescue a low-entropy value, because the space of possible inputs is enumerated in seconds and the digest is the value. The signal a reading was made from lives in the evidence record the ev commitment points to, under its own retention and access rules, and the commitment carries a random value of its own so that it is inert to anyone not shown the evidence.

5Three worked examples

Three, chosen to show that the model is for all software and not for agents alone. Each table says what a hop received, what it added, and what its record holds.

5.1 A web request

A user in Bavaria reaches an origin in Virginia through an edge node in Frankfurt. The origin, run by an operator established in California, calls a payment provider established in Ireland.

HopReceivesAddsRecords
Edgenothing: the user's own connectionprincipal=DE;src=observed;by="edge", from the one signal only it seesthe reading and the evidence commitment; never the IP address
Originthe principal reading, verifiedoperator=US-CA;src=declared, from its configurationboth readings, with the edge as the principal's issuer
Payment providerboth readings, signedon its response, provider=IE;src=declaredboth readings as given, and its own

Three records, written by three parties, one reading of the principal.

5.2 A batch job

A nightly job run by an operator established in California sends messages to three recipients. There is no edge and no user: the principal is the operator itself, since the work is done for the organization that runs it.

HopReceivesAddsRecords
Jobnothingprincipal=US-CA and operator=US-CA, both src=declared; subject=(FR GB unknown);src=declared from the account records, one recipient's residence unknownthe readings, per message
Mail relaythe readings, on each messagecounterparty=US;src=resolved for the receiving mail servicethe readings as given

Each sent message's record carries the subject reading, so the outreach law that reaches each recipient can be read later without re-deriving anything, and the recipient whose residence was unknown stays unknown rather than becoming a default.

5.3 An agent task

A person in France asks an agent run by a California operator to compare prices on five retail sites. The harness starts five subagents, one per site, and the agent calls a model whose provider is established in the United States.

HopReceivesAddsRecords
Edgenothingprincipal=FR;src=observedthe reading, never the IP address
Harnessthe principal readingoperator=US-CA;src=declared; passes both to every subagentboth, and the delegation it made
Model callboth readingsprovider=US;src=resolved, from the model's domain and a maintained lookupthe readings as given, and the provider
Each subagentboth readingscounterparty=<code>;src=resolved;by="harness" for its sitethe readings as given, and its counterparty

The aggregate record shows one principal reading across five subagents, five counterparties and one provider. A subagent started without the context would have carried nothing, and that is the case rule 6 names: unknown, read against the declared set, never a default.

6What this proposal does not do

It does not decide which law applies. It does not define a policy language, and it says nothing about what any party owes. It is not a trace: the trace identifiers are a separate and already standard concern, and this context is carried beside them, never inside them. It is not an identity system. It is not a consent signal; Global Privacy Control and the Interactive Advertising Bureau's Global Privacy Platform are complementary and may be referenced from a reading, which is open question 9. It does not replace the Forwarded header, which carries the client's IP address to the origin and is the signal a reading is made from at the edge. It is not legal advice, and adopting it meets no legal responsibility by itself.

7Requirements met

The paper Whose law was that? derives nine requirements from deadlines the law already sets: what any record of a piece of work must do, whatever it is built from, for those deadlines to be read from it. They are stated there, numbered R1 to R9, and each number below links to its statement. This section says how this proposal meets each one and what it leaves to someone else (7.1), then what each kind of software would change to meet them (7.2). An objection to how a requirement is met here is an objection to this mechanism, not to the requirement.

7.1 By requirement

RequirementHow this meets itWhat it leaves to someone else
R1A reading is one statement about one party, under one of five party keys, and the readings for a piece of work are never merged into one country code (2.1, 2.2; figure 2).Which law reaches each party, and what that law asks. The proposal carries the facts and decides nothing (6).
R2Rule 5 lets a reading be made from a network signal only at the hop where that signal exists, rule 4 has a hop add readings only for the parties it introduces, and every reading names its issuer (2.2, 2.4).The check that makes a reading, and the maintained dataset a resolved reading is looked up in.
R3Rule 5 carries the result and never the signal, and no reading or record built from one holds an IP address, a precise coordinate or a user or session identifier, in clear or as a digest (2.4, 4; figure 3).Holding the same line across every other field a record admits, since a label becomes personal data in the company of an identifier (4).
R4The value unknown is permitted for a party's jurisdictions and for a reading's source, and rule 6 forbids coercing it to a default: an unknown principal is read against the declared set as a whole (2.2, 2.4; example 5.3).What a policy does with an unknown, which each deployment decides.
R5The optional ev field is a commitment to an evidence record held elsewhere, with a random value of its own, so it is inert to anyone not shown the evidence (2.2, 4).The evidence store, its retention and who may see it. Whether a commitment has a defined shape is open question 8 (9).
R6Rule 1 forwards every reading to subagents, queues and batch steps, so each subagent holds the principal's reading as given, and a responding hop may return the readings it added, so the caller's record carries the fan-out (2.4; examples 5.2, 5.3).The delegation chain itself, which agent started which and with what scope, written by the framework that starts them (7.2).
R7Rule 1 forwards each reading unchanged, rule 2 records it with its issuer, and rule 3 forbids re-deriving it from a hop's own network view (2.4; figure 1).Verifying a reading that crosses a trust boundary, by a signature or a token claim, with key discovery left to the two parties (3.4; open question 5).
R8Through the readings only: each record carries, per party, the jurisdictions its retention, access and location settings are keyed on (2.2).The settings themselves, which belong to the record format (7.2).
R9The readings travel with the work on every call, a party introduced along the way gets its reading at the hop that introduces it, and a reading may say when it was made, so a record written at the act holds the parties as they were (2.2, 2.4, 3).A party nobody declared and no hop could read. It stays unknown rather than being reconstructed afterwards.

7.2 By component

The same requirements, read as the change each kind of software would make. Each change names the requirement it meets and where this proposal does it. A change that carries no context says so: it is here because a requirement needs it, whatever carries the readings. One change, the model's incident channel, meets none of the nine: it serves the notification clocks directly.

If you maintainChangeMeetsIn this proposal
An edge network, content delivery network or load balancerMake the principal's reading once, at the first hop, the only one at which the user's own IP address exists, at national or subnational granularity, and say it is an observation of where a connection came from, so that a declared residence or establishment can outrank itR2src=observed, and a reading about another fact beside it (2.2); rule 5 (2.4)
Carry the result, never the signal, and keep the IP address out of your own logR3Rule 5 (2.4); section 4
Let the reading say unknown, and bind it to its evidence by a commitment held apartR4, R5Rule 6 (2.4); ev (2.2)
Pass the result on as a reading the origin can authenticate, since every hop downstream works from what you tell itR7Signed across the boundary (3.4); rule 7 (2.4)
An agent gateway, proxy, policy engine or governance toolkitRead the principal's jurisdiction from the reading the edge made, never from the peer IP addressR7Rules 2 and 3 (2.4)
At decision time, make a reading for each counterparty and provider a call reaches, from the destination of the call and a maintained lookup of its domainR1, R2src=resolved (2.2); rule 4 (2.4); example 5.3
Read an unknown against the whole declared set, never as no jurisdictionR4Rule 6 (2.4)
Expose tool arguments to policy at decision time, give policy authors variables for a party's jurisdiction and for the legal responsibility a rule answers to, write both into the verdict, and deny when a rule cannot be evaluatedR1, R2Nothing: a policy reads the readings, and the proposal defines no policy language (6)
Keep payloads out of the action record: digests there, and the content in an access-controlled evidence store with its own retention, because a record that cannot be retracted must not hold a person's dataR3, R5Section 4; ev points into the evidence store (2.2)
An agent framework, harness or tool serverPass the principal's reading to every subagent you start, unchangedR7Rule 1 (2.4); example 5.3
Write the delegation chain down: which agent started which, with what scope, for which principalR6Nothing: the chain is the framework's own record, and the context is not a trace (6). Rule 1 carries the readings down it (2.4)
If you publish a tool, say in its manifest who operates the service behind it and where that operator is established, so a caller does not have to guess from a domainR1, R9A reading with src=declared (2.2)
A model or a model interfaceAccept the readings with a request and return them in your usage record, so that two records of one action agreeR7Rules 1 and 2 (2.4); a response carries the readings it adds (3.1)
Publish where the service is offered from and where its operator is established, as data a caller's provider reading and an operator's transfer record can citeR1, R9A provider reading with src=declared (2.2); example 5.3
Give operators an incident channel with a stated response time, because your own clocks count from the moment you learn of an incident, and an operator is usually the first to knowNoneNothing: the channel carries no context
A record format, audit log or incident frameworkAdd a reading per party, as the result of a named check that says how and by whom it was made, never the signal it ran on, so a later reader can tell a reading from an artifact of the network pathR1, R2, R3The reading, with src and by (2.2); rule 2 (2.4)
Let unknown be a value, and bind each reading to its evidence, held elsewhere, by a commitmentR4, R5Rule 6 (2.4); ev (2.2); section 4
Add fields for the retention period, for who may demand the record and for where it is held, settable per jurisdiction rather than once for the deploymentR8Nothing: these fields carry no context. They are keyed on the readings (2.2)
In an incident framework or a runbook template, take the affected jurisdictions from the readings recorded when the work was done, and carry the rest of the fact pattern as fields, not prose: which families of law are engaged, the moments each clock counts from and the operator's roles, each an enumerated value or a timestamp, with a source and an age. A timeline the framework sets itself sits beside the statutory clocks, on one scale, and never replaces themR9The affected jurisdictions are readings (2.2); the families, the moments and the roles are the framework's own fields
WorkWhat it isRelationship
W3C Baggagecontext propagation for a distributed requesta carrier; this proposal gives it a vocabulary
W3C Trace Contextthe trace identifiersthe trace, which this is not
RFC 7239 Forwardedthe edge's assertion about the clientthe signal a reading is made from, at the edge only
RFC 9651 Structured Fieldsheader syntaxthe syntax used
RFC 9421 HTTP Message Signaturessigning fieldsthe signed form across a boundary
RFC 6648deprecates the X- prefixwhy the header is not X- anything
Global Privacy Controla legal opt-out signal as a headerprecedent for a legal signal riding a request
Global Privacy Platform and OpenRTBper-jurisdiction consent sections through a supply chainthe nearest structural precedent; keyed by jurisdiction, not by party
OpenID AuthZENthe enforcement-point to decision-point interfacewhere a decision point would read the context
Identity Assertion JSON Web Token Authorization Granta grant by which an application turns a user's identity assertion into an access token for an API in another trust domain, through the identity provider that domain already trusts for sign-in; draft-ietf-oauth-identity-assertion-authz-grant-04, a working group document, read carries who the user is, and can carry structured authorization details; the readings stay out of it (8.1)
OAuth Transaction Tokensa short-lived signed token that carries the user's identity, the workload's identity and the authorization context through a call chain inside one trust domain; draft-ietf-oauth-transaction-tokens-11, at working group consensus and awaiting its write-up, read carries who the work is for and what it may do along the call chain, with a fixed subject, and stops at its trust domain; the readings a hop adds travel beside it, not in its transaction context (8.1, figure 5)
RFC 8693 OAuth 2.0 Token Exchangehow a client asks an authorization server for a new security token in exchange for one it holds, including for delegation and impersonation; a Proposed Standard, read carries who acts for whom as a token is exchanged, which a record of delegation can cite; the readings stay out of the token, whose issuer is the authorization server and not the hop that holds the signal (8.1)
OAuth Identity and Authorization Chaining Across Domainshow identity and authorization cross trust domains: a token exchanged inside one domain for a grant the next domain's authorization server accepts, the same way at every boundary; draft-ietf-oauth-identity-chaining-17, in the RFC Editor's queue for publication as a Proposed Standard, read carries identity and authorization over each boundary the readings also cross; the readings cross beside it, signed as 3.4 says, because each new grant is issued by an authorization server and not by the hop that holds the signal (8.1)
IETF agent action records and audit-trail draftspost-hoc records of what an agent did, in a transparency log or an audit trailwhere readings land; the record carries the result, never the signal
W3C Data Privacy Vocabularyrole vocabularythe source of the legal-term mapping in 2.1
LegalRuleMLhow a rule names its jurisdictionthe vocabulary a rule reading the context would use
ISO 3166country and subdivision codesthe base vocabulary

8.1 Why the readings are not in the authorization credential

A reader who builds identity and authorization systems will ask why the readings do not ride in a credential the work already carries: an access token, the authorization details an identity assertion grant can hold, or a Transaction Token's transaction context. Each is a natural home for a fact about who may do what. Each fails the requirements of the paper Whose law was that? for a fact about where each party is, and the table scores the credential against them in the order of the argument. R5 is not scored: where the evidence is held does not turn on the carrier.

RequirementWhat the credential doesWhy the readings cannot ride in it
R9An access token, and the identity assertion it may be granted for, is issued for a session, and the claims it carries are fixed when it is issued.The parties can change with every act: each site a subagent reads is a new counterparty, each model it calls a new provider. A value fixed at the start describes the parties to the first act at best.
R1It names one subject, the party it was issued for.Each party needs a reading of its own, and most parties to a piece of work are not the credential's subject.
R2It is issued by an authorization server or an identity provider.That issuer holds no signal for the subject, the counterparties or the providers. Rule 5 has a reading made where its signal exists, and the issuer would assert what it never observed.
R4It fails closed: a request without a valid credential is refused.The value unknown is permitted, and rule 6 forbids coercing it to a default. A reading the authorization step must accept or refuse turns an unknown into a refusal.
R3It is a bearer credential, so it must never be logged.The record keeps the result. A reading held only in a credential the record may not keep never reaches the record.
R8It expires with its session, and it is kept out of every log.Retention, access and location are settings of the record, made per jurisdiction. A reading that exists only in the credential is under none of them.
R6A Transaction Token is typically minted when a request enters its trust domain and carried along its call chain, but its subject is fixed and it is not accepted outside the trust domain it was issued for.Delegation crosses trust domains: a subagent at a provider, a site read on the principal's behalf. The token stops at the first boundary, where each hop beyond must still record the readings as given.
R7A Transaction Token's transaction context is set by the token service and does not change along the call chain. A hop that needs another value can only ask the token service for a replacement token that adds it.Inside a trust domain the context can carry the readings a hop received, but not those it adds under rule 4. Only the token service can add them, which makes it, and not the hop that holds the signal, the reading's issuer, against R2 as well.
Trust domains and legislation domains: the same shape, a different authority Two dashed boxes side by side, each a trust domain, as in figure 4: the operator's, holding an edge in Frankfurt and an origin and an agent in Virginia, and a provider's, holding a gateway, a model in a United States region and a model in a European Union region partition. A Transaction Token is accepted only inside the trust domain it was issued for, while the readings cross from one domain to the other, signed. Two shaded bands run across both boxes, each a legislation domain: the European Union's law above, United States law below. Each trust domain spans both bands and each band spans both trust domains, so neither contains the other. Under the boxes, outside all of them, stand the parties: the principal in Germany, a subject in France, the operator established in California, the provider in the United States and a counterparty in France. The two kinds of domain touch at the operator, which is joined to the trust domain it runs and is established in a legislation domain, and where the provider draws its European Union region partition on the first band's line. Trust domains and legislation domains the same shape, a different authority, neither inside the other Trust domain authority: the organization that runs it bounds where a Transaction Token is accepted Legislation domain authority: a legislature its law reaches a party through where the party is EU the Union's law US federal and state law The operator's trust domain Txn-Token: accepted only in this domain A provider's trust domain Txn-Token: accepted only in this domain EU-region partition edge, Frankfurt origin, Virginia agent gateway model, US region model, EU region the readings cross, signed 2 The parties, outside every box principal · DE subject · FR operator · US-CA provider · US counterparty · FR 1 A reading names the legislation domain whose law reaches its party, whichever trust domain the work ran in. 1 They touch at the operator, which runs a trust domain and is a party established in a legislation domain. 2 And where a provider draws a partition on a legislation domain's line, as an EU region.
Figure 5. Trust domains and legislation domains have the same shape and a different authority. A trust domain is drawn by the organization that runs it, and a Transaction Token stops at its edge; a legislation domain is drawn by a legislature, and its law reaches a party through where the party is. Neither contains the other. They touch at the operator, which runs a trust domain and is established in a legislation domain, and where a provider partitions its service by EU region. The parties stand outside every box, so the readings follow the parties across every boundary the token stops at.

9Open questions

These are the questions draft 2 puts to readers rather than answers. A reply to any of them is the most useful comment this document can receive.

  1. The header name.
  2. The frame of a response reading: the work's point of view, or the speaker's.
  3. The party registry: whether five keys suffice, and how a sixth is registered.
  4. Supranational codes beyond EU: a registry, or ISO.
  5. The signature profile: the component set and key discovery.
  6. Whether a baggage-only profile is enough inside OpenTelemetry deployments.
  7. The neutral namespace for the Model Context Protocol's metadata key and the Agent2Agent extension URI.
  8. Whether evidence commitments have a defined shape or stay opaque.
  9. Whether a reading should reference a consent signal that arrived with the same work.
  10. Where the proposal should live: the options, with their tradeoffs, are set out in Paths into standards, a companion options paper in this section.

10Status, how to take part, and disclosure

Status
Draft 2, . Not yet before any standards body.
Comments
open@lexlint.io. There is no repository yet; one is opened the day a second organization wants to edit the text.
License
Creative Commons Attribution 4.0. Adopt it, fork it or improve it, with credit, without asking.
Disclosure
LexLint publishes a law library that could be one implementation of a vocabulary. The proposal does not depend on it, and LexLint will move to whatever the community decides.
About this proposalDraft 2, ShowHide

Proposed by LexLint; written by Sean McDermott, Co-Founder and CEO, with AI assistance.

Draft 2 states the model, the bindings and the rules, says how they meet the nine requirements of the paper Whose law was that? and why the readings stay out of the authorization credential, and puts ten questions to readers. It adds section 7, section 8.1 and the four OAuth rows of section 8 to draft 1 of , whose model, bindings and rules it keeps. The terms it uses for parties are plain legal roles; the mapping to the LexLint handbook's six groups is given once, in section 2.1, for readers arriving from there.

© 2026 UnGovr, publishing as LexLint. This proposal, its text and its figures, is licensed under Creative Commons Attribution 4.0: adopt it, adapt it, translate it, carry it into another document or a standards body, including commercially, with credit to LexLint (UnGovr). Logos and wordmarks belong to their owners.