Lombard Street
The year is 1833. You are a bank clerk in the City of London, carrying a packet of cheques. The paper in your hand represents real promises between people who may never meet. Each cheque names the bank that must decide its fate.
Your bank cannot make that decision. It does not hold the paying customer’s account; it does not know whether the signature, funds and instructions are good. Nor can it simply hand the paper to a messenger and later say, “trust us, we sent it.” Your bank needs a record that the item left its care. The other bank needs a record that it arrived, was examined and was either honoured, refused or held. By the end of the day, both banks need to know what they owe one another.
For a small number of banks, clerks can walk from door to door. As the city grows, that becomes a thicket of bilateral journeys: more places to visit, more packets to account for and more opportunities for a dispute to become “trust me, we sent it.” The problem is not merely moving paper. It is preserving responsibility while the paper moves.
So you do not walk to every bank. You walk to Lombard Street. There, clerks exchange labelled packets at member desks. A clerk can account for sending; another can account for receiving. The room can compare the day’s totals and show where the books agree or differ. It can make the exchange legible without making all the banks one bank.
Then the packet continues. At the bank it was addressed to, someone opens that bank’s own book and examines the cheque under that bank’s own rules. The clearing room has no right to make this decision for it. A packet on a desk is not an honoured cheque. Delivery is not acceptance.
London clerks began meeting to exchange cheques around 1770. In 1833, the first purpose-built Bankers’ Clearing House opened on Lombard Street. It made the exchange of instruments and the reconciliation of totals a shared piece of infrastructure. It did not turn the clearing house into the bank that decided whether a particular instrument was good. That remained the receiving bank’s responsibility. The Bank of England records the same progression from clerks meeting to the 1833 clearing house.
Lombard Street is a story about that move. It is not a claim that Nomos is a bank, broker or clearing house. It is a way to understand how independent parties can cooperate at scale without pretending that one of them owns everyone else’s truth: centralise the chore of exchange, not the authority to judge another party’s book.
That split is not bureaucracy. It is how a network of peers stays accountable without asking every participant to take one intermediary’s word for reality.
A canal, a sovereign and four million pounds
Section titled “A canal, a sovereign and four million pounds”Now move forward to November 1875. Steamships are using the young Suez Canal to cut the journey between Europe and Asia. The waterway is a commercial company, an Egyptian concession, a French project, a route on which British shipping has an enormous stake—and the Khedive of Egypt is badly short of money.
He owns 176,602 shares: nearly 44% of the Suez Canal Company. Benjamin Disraeli’s Government wants them. Yet a government cannot simply conjure £4m because Parliament is not sitting. N. M. Rothschild & Sons advances the money to the Government. The shares change hands. They are delivered to the Bank of England for custody. Parliament later supplies the expenditure and the advance is repaid. The Rothschild Archive preserves the loan receipts and records the five-month repayment.
The purchase sits inside an institutional world with a cast large enough to matter: Khedive Ismail; Disraeli and the British Government; Lionel de Rothschild and his London bank; the Bank of England; Parliament; and the Canal Company. The Bank of England’s own archive records the 176,602-share acquisition and that the certificates were delivered to it to hold on behalf of the Chancellor and Lionel de Rothschild. Bank of England archive record.
It is a gripping deal precisely because the parties are not interchangeable. Rothschild can advance money; the Bank can hold certificates; Parliament can supply public money; Britain can buy shares. None of those facts turns its holder into the Canal’s operator or the sovereign of Egypt. Parliament’s later supply can make the public expenditure accountable; it cannot rewrite who advanced the money in November.
No one had “the Suez transaction”
Section titled “No one had “the Suez transaction””The November purchase did not create a universal right to decide what happened next on the Canal. The Canal already had its own continuing legal and operating world. The 1856 concession described it as a neutral passage open to merchant vessels; a later international convention reinforced free navigation. Suez Canal Authority history and the 1888 Convention. Today, too, the Authority permits transit under its navigation rules rather than treating ownership of a share as a transit permission. Current Rules of Navigation.
So a shipping company and its vessel belong to the wider Suez system, not to
the causal chain of the November purchase. The purchase may give Britain
financial ownership and influence. It does not lead to
Britain.decideCanalPassage().
THE 1875 PURCHASE
Khedive ──sale──> SharePurchase <── British Government ↑ PurchaseAdvance ↑ Rothschild
ShareCertificates ──> ShareCustody <── Bank of EnglandParliament ──> ParliamentarySupply
THE CANAL CONTINUES AS ITS OWN DOMAIN
ShippingCompany ──owns──> Vessel ──requests──> CanalPassage ↑ decided by Canal CompanyFollow every causal edge of the purchase and you still do not arrive at a passage decision. Economic ownership, finance, custody, constitutional authority and operational authority are different capabilities. Each party can truthfully record only the part it was competent to perform.
This is the point at which you should want to see the law and the USDA. A
single suez_purchase: complete row cannot answer the interesting questions:
who is a party; who acted in which capacity; what is a share purchase; which
bank carried the advance; where the certificates were held; what the public
supply settles; or who may decide a transit. The useful thing is a causal graph
of claims made by actors with different authority.
The same problem, now in milliseconds
Section titled “The same problem, now in milliseconds”Today the packet is an application-generated message, the clerk may be code and the trip can take milliseconds. Yet the shape of the problem is unchanged: independent organisations and devices must exchange consequential facts across networks that can be slow, partitioned or operated by someone else.
The tempting modern answer is a central service with a database: send it an API call, let it decide what happened, and ask it to tell everyone the current truth. That is fast and often useful—but it makes the service a “trust me bro” authority. If a party needs to know what was offered, which rules applied, why it was admitted, or whether an earlier state has been rewritten, it must appeal to the central operator.
Nomos takes the Lombard Street boundary instead. It makes delivery and coordination useful without confusing either with authority—and it makes the real chain from promise to advance, custody, public authority and consequence legible rather than burying it in a mutable current-state row.
The packet becomes a Nomos domain
Section titled “The packet becomes a Nomos domain”Follow one cheque. It is not a bill: string plus a mutable status field in
somebody’s database. The people, paper and decisions in the story have
different owners and different meanings, so Nomos gives them different typed
records:
House (merchant) ─┐House (payee) ─┼──> BillHouse (drawee) ─┘ ├──> Endorsement ├──> DeliveryDocket + DeliveryItem ├──> DraweeDecision └──> ClearingProofBill records who drew, pays and examines the instrument. Endorsement is a
separate, attributable transfer of that bill—not another line of text appended
to it. DeliveryDocket records a route. DraweeDecision records the receiving
house’s acceptance or refusal. ClearingProof records that the clearing work
reconciled. None is allowed to impersonate another.
The important decision is visible in the shape of the model. There is no
Bill.accepted flag for the sending bank, clearing room or host to flip. An
acceptance is a new DraweeDecision made by the receiving house. The record
structure prevents a convenient but false story about who decided what.
The Suez purchase applies the same discipline to a deal that could otherwise
become a tangle of names and status fields. A share sale is not the bank’s
advance; an advance is not custody; and the whole purchase is not the Canal
Company’s separate decision to admit a vessel.
export const PurchaseAdvance = aggregate("PurchaseAdvance", { advancedBy: t.ref(SuezParty), receivedBy: t.ref(SuezParty), supports: t.ref(SharePurchase), principal: SuezSterling.field(), advancedOn: SuezDate.field(),}).public();The next records carry the thread without conflating their authority:
ShareCustody says who delivered the certificates, who holds them and for whom;
ParliamentarySupply says which advance Parliament later settled; and the
separate Canal domain has CanalPassage, requested by a shipping company and
decided by the Canal Company. A person such as Disraeli or Rothschild is also a
record with a stated capacity and the party for whom they acted; neither turns
into the Government or the bank by appearing in the same transaction.
Khedive's CanalShareCertificate ──> SharePurchase <── British Government │N. M. Rothschild & Sons ──> PurchaseAdvance │ ShareCustody ──> Bank of England │ ParliamentarySupply
ShippingCompany ──> Vessel ──> CanalPassage <── Canal CompanyThis is a deliberately bounded teaching reconstruction, not a claim to have
digitised every term or consequence of the Suez deal. Its value is that it
never manufactures an all-powerful deal record merely to make the graph look
tidy.
The author writes the law, not a bag of JSON
Section titled “The author writes the law, not a bag of JSON”Nomos starts with the product’s language. Here, a bill’s terms are a named value object: its number, pre-decimal amount, issue date and due date are each typed things, not strings whose format every client must rediscover.
export const CivilDate = valueObject("CivilDate", { year: z.number().int(), month: z.number().int(), day: z.number().int(),});
export const SterlingAmount = valueObject("SterlingAmount", { pounds: z.number().int(), shillings: z.number().int(), pence: z.number().int(),});
export const BillNumber = valueObject("BillNumber", { year: z.number().int(), sequence: z.number().int(),});
export const BillTerms = valueObject("BillTerms", { number: BillNumber, faceValue: SterlingAmount, issuedOn: CivilDate, dueOn: CivilDate,});The bill then refers to real House records. It cannot silently substitute
"bank:baring-brothers" for a relationship whose identity and custody matter.
export const Bill = aggregate("Bill", { drawer: t.ref(House), drawee: t.ref(House), payee: t.ref(House), terms: BillTerms.field(),}).public();BillTerms.field() deliberately uses the default FirstWriterWins field
driver, not last-writer-wins. More importantly, this domain exposes no directive
that mutates a Bill after issue. If the product later needs a correction or
amendment, it should create a distinct, attributable record and law for that
business event—not rewrite the issued instrument.
That one declaration is the source of truth for the business shape. From it, Nomos generates the client method that issues a bill, the nominal types that method accepts and returns, the law the kernel applies, and the durable form in which the law and records can be inspected.
USDA is the legible form of the law and book
Section titled “USDA is the legible form of the law and book”USDA is the readable text form of OpenUSD. In Nomos it is not a decorative
export and it is not another handwritten application schema. The compiler
lowers the authored domain into a canonical USDA package: named type
descriptions for CivilDate, SterlingAmount and BillTerms; typed references
from Bill to House; closed choices for a decision such as accepted or
refused; and the directives and queries that are lawful for the domain.
The resulting shape remains visible all the way down. In the ordinary clearing scene it looks like this:
Bill drawer, drawee, payee -> typed references to House terms -> BillTerms number -> BillNumber { year, sequence } faceValue -> SterlingAmount { pounds, shillings, pence } issuedOn -> CivilDate { year, month, day } dueOn -> CivilDate { year, month, day }
DraweeDecision bill -> typed reference to Bill decidedBy -> typed reference to House outcome -> accepted | refused reason -> honoured | insufficient-evidence | outside-authority decidedOn -> CivilDateIn the Suez case, the generated USDA names the types and their edges rather than preserving a JSON convention in a wiki. These are literal selections from the compiled teaching package (the opaque scope names are compiler identities):
def Scope "a_3ebb4fa122f49a01"{ custom uniform string nomos:label = "ShareCustody" custom uniform string nomos:wireType = "lombard-street.ShareCustody" custom uniform bool nomos:public = true
def Scope "Fields" { def Scope "f_4b8792e0910d9259" { custom uniform string nomos:label = "heldFor" custom uniform token nomos:storageKind = "ref" custom uniform string nomos:schemaIdentity = "f7af3263f5022b7eff6a59d05fa9be6514cc115aaba30c1df9309f958d2ca5ce" custom uniform token[] nomos:mergeDriver = ["FirstWriterWins"] custom uniform bool nomos:required = true custom rel nomos:refTarget = </Nomos/Domains/d_524b9ea260d66369/Aggregates/a_a0776cf1d9fa44d3> custom uniform token nomos:referenceMode = "current" }
def Scope "f_354e2e1bccbba84c" { custom uniform string nomos:label = "shares" custom uniform token nomos:storageKind = "ref" custom uniform string nomos:schemaIdentity = "e979185d8ee96af6e68837c5b4456ffd9b7f495ea243dccefbc40dff9af0871a" custom uniform token[] nomos:mergeDriver = ["FirstWriterWins"] custom uniform bool nomos:required = true custom rel nomos:refTarget = </Nomos/Domains/d_524b9ea260d66369/Aggregates/a_cb75a7a08dd32b1e> custom uniform token nomos:referenceMode = "current" } }}The intentionally opaque target paths are compiler identities, not application
string conventions. The meaningful declarations are stable: ShareCustody, its
wire type, and typed links to a SuezParty and a CanalShareCertificate. The
complete compiled package contains the publicly callable agreeSharePurchase,
advancePurchaseFunds, depositCanalShares,
authoriseParliamentarySupply and decideCanalPassage laws. A reader can
therefore ask the package—not a handwritten retrospective narrative—what
records can be created and how their causal links are typed.
This matters because the type survives the boundary. A TypeScript or Flutter
application gets a NomosRef<House> where a house is required and a
NomosRef<Bill> where a bill is required; it is not asked to reconstruct those
facts from a convention-laden string. The kernel receives a representation of
the same declared law rather than trusting whichever client happened to be
connected first. A later reader can inspect the historical law and the accepted
record without trusting today’s server to narrate yesterday’s event.
USDA makes the book inspectable. The generated application makes the book usable. Neither asks the product team to maintain a second, informal type system beside its domain.
Open the book yourself
Section titled “Open the book yourself”The law tells us which records and relationships are possible. A frontier shows what a particular participant can actually claim at one point in time. That state is not hidden behind a Nomos query API or copied into a reporting database: it is a Git tree containing one canonical USDA blob per aggregate.
Download the Suez 1875 teaching frontier.
It is a small, real Git bundle emitted by the kernel’s canonical state-tree
encoder. It contains the purchase chain—parties, principals, certificate,
purchase, advance, custody and Parliamentary supply—but deliberately contains
no CanalPassage. The latter belongs to the continuing Canal domain, not the
purchase.
curl -LO https://docs.nomos.cafe/examples/suez-1875-frontier.bundlegit clone suez-1875-frontier.bundle suez-1875cd suez-1875
git fsck --stricttip=$(git rev-parse refs/heads/main)git cat-file -p "$tip" # the marked frontier commitgit rev-parse "${tip}:state/aggregates" # identity of this complete stategit ls-tree -r --name-only "$tip" state/aggregatesThe bundle is a four-frontier history, not one final snapshot:
1. Parties and share certificate 9 aggregates2. Share purchase agreed 10 aggregates3. Rothschild advance and Bank custody recorded 12 aggregates4. Parliamentary supply settles the advance 13 aggregatesgit log --oneline --reversegit diff HEAD~3 HEAD~2 -- state/aggregates # the purchase enters the bookgit diff HEAD~2 HEAD~1 -- state/aggregates # advance and custody enter itgit diff HEAD~1 HEAD -- state/aggregates # the supply enters itThis is the developer’s fixture journey. Its stages mirror the facts that
recordCanalShareCertificate, agreeSharePurchase,
advancePurchaseFunds, depositCanalShares and
authoriseParliamentarySupply make separately accountable; they do not patch a
mutable deal.status. The blocks below are literal USDA from the bundle—complete
aggregate files where they are short and otherwise complete field scopes. They
are not a friendlier JSON notation invented for the article.
1. The asset exists before it can be sold
Section titled “1. The asset exists before it can be sold”recordCanalShareCertificate first creates a certificate. A developer testing
the domain can see that the issuer is a typed reference and the quantity is an
integer, rather than a number hidden inside a free-form purchase payload.
#usda 1.0( defaultPrim = "Aggregate")
def Scope "Aggregate"{ custom uniform token nomos:format = "nomos.aggregate-state.v3" custom uniform string nomos:id = "certificate:suez-176602" def Scope "Fields" { def Scope "Field_type_710e150a78" { custom uniform string nomos:id = "__type" custom uniform uint64 nomos:stampPhysical = 0 custom uniform uint64 nomos:stampLogical = 27 custom uniform uint64 nomos:stampReplica = 1875 custom uniform token nomos:valueKind = "string" custom uniform string nomos:value = "CanalShareCertificate" } def Scope "Field_issuer_535c6f8eb5" { custom uniform string nomos:id = "issuer" custom uniform uint64 nomos:stampPhysical = 0 custom uniform uint64 nomos:stampLogical = 28 custom uniform uint64 nomos:stampReplica = 1875 custom uniform token nomos:valueKind = "reference" custom uniform string nomos:refWorkspace = "suez-1875-teaching" custom uniform string nomos:refType = "SuezParty" custom uniform string nomos:refId = "party:suez-canal-company" } def Scope "Field_quantity_1a7b308d8d" { custom uniform string nomos:id = "quantity" custom uniform uint64 nomos:stampPhysical = 0 custom uniform uint64 nomos:stampLogical = 29 custom uniform uint64 nomos:stampReplica = 1875 custom uniform token nomos:valueKind = "int" custom uniform int64 nomos:value = 176602 } }}2. The sale is a new record, not a changed certificate
Section titled “2. The sale is a new record, not a changed certificate”agreeSharePurchase adds a SharePurchase. It names two SuezParty records,
refers to the existing certificate, and carries a named SuezSterling amount.
The certificate did not grow a currentOwner string, and the purchase did not
pretend to be the bank’s advance.
def Scope "Field_buyer_6dbd0f28d0"{ custom uniform string nomos:id = "buyer" custom uniform uint64 nomos:stampPhysical = 0 custom uniform uint64 nomos:stampLogical = 32 custom uniform uint64 nomos:stampReplica = 1875 custom uniform token nomos:valueKind = "reference" custom uniform string nomos:refWorkspace = "suez-1875-teaching" custom uniform string nomos:refType = "SuezParty" custom uniform string nomos:refId = "party:british-government"}def Scope "Field_price_683b531f41"{ custom uniform string nomos:id = "price" custom uniform uint64 nomos:stampPhysical = 0 custom uniform uint64 nomos:stampLogical = 34 custom uniform uint64 nomos:stampReplica = 1875 custom uniform token nomos:valueKind = "value-object" custom uniform string nomos:valueType = "SuezSterling" def Scope "Members" { def NomosValueMember "Member_pence_c74276c1d6" { custom uniform string nomos:key = "pence" custom uniform token nomos:nominalKind = "int" custom uniform int64 nomos:nominalValue = 0 } def NomosValueMember "Member_pounds_ba5ae1ecf0" { custom uniform string nomos:key = "pounds" custom uniform token nomos:nominalKind = "int" custom uniform int64 nomos:nominalValue = 4000000 } def NomosValueMember "Member_shillings_89a6631aad" { custom uniform string nomos:key = "shillings" custom uniform token nomos:nominalKind = "int" custom uniform int64 nomos:nominalValue = 0 } }}def Scope "Field_shares_4a64609f7d"{ custom uniform string nomos:id = "shares" custom uniform uint64 nomos:stampPhysical = 0 custom uniform uint64 nomos:stampLogical = 33 custom uniform uint64 nomos:stampReplica = 1875 custom uniform token nomos:valueKind = "reference" custom uniform string nomos:refWorkspace = "suez-1875-teaching" custom uniform string nomos:refType = "CanalShareCertificate" custom uniform string nomos:refId = "certificate:suez-176602"}3. Finance and custody follow as distinct claims
Section titled “3. Finance and custody follow as distinct claims”The next frontier adds PurchaseAdvance and ShareCustody. This is where a
data scientist can follow the causal edge rather than infer it from names: the
advance explicitly supports the purchase. The Bank’s custody record separately
states who holds the certificates and for whom.
def Scope "Field_supports_66312e5e57"{ custom uniform string nomos:id = "supports" custom uniform uint64 nomos:stampPhysical = 0 custom uniform uint64 nomos:stampLogical = 39 custom uniform uint64 nomos:stampReplica = 1875 custom uniform token nomos:valueKind = "reference" custom uniform string nomos:refWorkspace = "suez-1875-teaching" custom uniform string nomos:refType = "SharePurchase" custom uniform string nomos:refId = "purchase:suez-1875"}def Scope "Field_heldBy_f9249a5732"{ custom uniform string nomos:id = "heldBy" custom uniform uint64 nomos:stampPhysical = 0 custom uniform uint64 nomos:stampLogical = 45 custom uniform uint64 nomos:stampReplica = 1875 custom uniform token nomos:valueKind = "reference" custom uniform string nomos:refWorkspace = "suez-1875-teaching" custom uniform string nomos:refType = "SuezParty" custom uniform string nomos:refId = "party:bank-of-england"}def Scope "Field_heldFor_3205643684"{ custom uniform string nomos:id = "heldFor" custom uniform uint64 nomos:stampPhysical = 0 custom uniform uint64 nomos:stampLogical = 46 custom uniform uint64 nomos:stampReplica = 1875 custom uniform token nomos:valueKind = "reference" custom uniform string nomos:refWorkspace = "suez-1875-teaching" custom uniform string nomos:refType = "SuezParty" custom uniform string nomos:refId = "party:british-government"}4. Parliament’s supply settles an advance; it does not revise the sale
Section titled “4. Parliament’s supply settles an advance; it does not revise the sale”Finally, authoriseParliamentarySupply creates a record with its own public
authority. Its settles field reaches the advance, not the purchase. That is
the causal distinction a useful analysis should preserve.
def Scope "Field_beneficiary_56ed021beb"{ custom uniform string nomos:id = "beneficiary" custom uniform uint64 nomos:stampPhysical = 0 custom uniform uint64 nomos:stampLogical = 50 custom uniform uint64 nomos:stampReplica = 1875 custom uniform token nomos:valueKind = "reference" custom uniform string nomos:refWorkspace = "suez-1875-teaching" custom uniform string nomos:refType = "SuezParty" custom uniform string nomos:refId = "party:british-government"}def Scope "Field_settles_36809acb6f"{ custom uniform string nomos:id = "settles" custom uniform uint64 nomos:stampPhysical = 0 custom uniform uint64 nomos:stampLogical = 51 custom uniform uint64 nomos:stampReplica = 1875 custom uniform token nomos:valueKind = "reference" custom uniform string nomos:refWorkspace = "suez-1875-teaching" custom uniform string nomos:refType = "PurchaseAdvance" custom uniform string nomos:refId = "advance:rothschild-suez-1875"}The commit is marked nomos-state-tree nomos.workspace-frontier.v3.
workspace.usda declares the aggregate count, while the Git object ID of
state/aggregates identifies the entire folded state. There is no parallel
JSON snapshot or host-owned reporting table to trust.
For example, the custody record can be opened straight from Git and read with ordinary OpenUSD tooling:
git show "${tip}:state/aggregates/4c/96/custody:bank-of-england-suez-1875--4c966bf5ac9b1b6d5b7f233b53cbaac5f25f23b31c856dac0a3a3237e87ef587.usda" \ > share-custody.usdausdcat share-custody.usdaIts fields do not rely on an analyst knowing private string conventions. The
USDA states that it is ShareCustody; heldBy and heldFor are complete typed
Nomos references, including workspace, aggregate type and record ID; and
receivedOn is a nested SuezDate value object. A researcher can follow those
references, group the thirteen records, diff two frontiers, or build an
independent analysis with Git and OpenUSD libraries alone.
This is a bounded teaching reconstruction, not a newly discovered 1875 ledger. Its HLC stamps are a logical fixture sequence, not claimed Victorian clock readings. In a live Nomos workspace, the kernel additionally verifies that the state is the fold of admitted history under the exact law available at that frontier. Git and USDA make the evidence available for inspection; they do not turn a raw parser into the authority that admits business acts.
The offer is the modern packet
Section titled “The offer is the modern packet”The application does not update a remote row called Bill. It makes a typed
offer to issue a bill. The generated API expresses that distinction directly:
const { bill } = await application.issueBill({ drawer: merchant, drawee: payingBank, payee: collectingBank, terms: { number: { year: 1833, sequence: 17 }, faceValue: { pounds: 1250, shillings: 0, pence: 0 }, issuedOn: { year: 1833, month: 6, day: 12 }, dueOn: { year: 1833, month: 9, day: 12 }, },});If the law admits the offer, bill is a typed, durable reference—not an
optimistic guess that a database row exists somewhere. That accepted fact can
then cause another typed effect: a delivery, an endorsement, or a presentation
to the drawee. The receiving workspace still makes its own decision when it
examines that effect.
| On Lombard Street | In Nomos |
|---|---|
| A member bank’s book | A sovereign workspace with durable custody |
| The bank’s examination | A workspace kernel applying that workspace’s law |
| A labelled paper instrument | A typed offer or causally linked effect |
| Messengers, desks and balancing | Peer runtime: address, route, track and reconcile |
| Roads, rooms, locks and clocks | Platform capabilities: network, files, keys, time and process execution |
One accountable circuit
Section titled “One accountable circuit”An application authors a typed offer for an addressed workspace. The peer runtime gets it there, but cannot change the receiving workspace’s history. The target kernel independently examines identity, authority, evidence and law. It then admits the offer, refuses it, or records a named wait. If it admits the offer, the workspace advances its own durable history and returns an accountable receipt.
typed offer -> route to the addressed workspace -> target kernel examines under its own law -> admit, refuse or record a named wait -> append admitted history to that workspace's custody -> return an accountable receiptThe network may be slow or absent without changing a fact already supported by the local book. When connectivity returns, peers share and reconcile their independently admitted history. A route never becomes permission to mutate a recipient’s records.
What Nomos is not trying to replace
Section titled “What Nomos is not trying to replace”Nomos is not a matching engine. It does not discover the best counterparty, price an order, optimise a market, net cash positions or become a new payment rail. Those are specialised economic systems with their own rules.
Nomos provides a different substrate: accountable business facts through time and across networks. It lets each participant keep custody of its own history, apply its own law at its own boundary, and exchange effects that can be traced back to their cause. A delivery service can deliver; a host can host; neither has to become the unquestioned owner of everyone’s past.
That is the modern version of the necessity that Lombard Street made visible. The machinery is faster. The need for independent books, clear responsibility, receipts and reconciliation has not gone away.
A test for a real product
Section titled “A test for a real product”When modelling a product, ask four questions:
- Whose business fact is this?
- Who may decide whether it is valid?
- What evidence and receipt make that decision accountable later?
- Which part merely carries, hosts, indexes or reconciles it?
If the answer to all four is “our central database,” the system has collapsed the clearing room into a bank. Model a domain shows how Nomos turns a product’s own familiar nouns and verbs into typed law without losing those boundaries.