Skip to content

Decisions ​

Where a standard left room, here is what we chose and why. Disagree? Open a discussion.

AreaChoiceWhy
A2A versionA2A 1.0, official @a2a-js/sdk, JSON-RPC bindingCurrent spec; the SDK signs and verifies cards for us
Lake fields on cardsInside a declared A2A extension, marked requiredA2A 1.0 signatures only cover schema fields; extension params are covered. required makes clients say they speak Lake
SignaturesEd25519 (EdDSA) JWS; cards per A2A §8.4 (JCS); messages over JCS of the payloadSmall, fast, widely supported
CredentialsW3C VC 2.0 secured with VC-JOSE-COSE (typ: vc+jwt)Simplest standard securing that reuses the same keys
Pinning recordsVC relatedResource with digestSRIThe original stays untouched in the pod; any change breaks the digest
Synthetic recordsA seeded generator that emits Synthea-shaped FHIR R4Synthea needs Java and minutes per run; the converter also reads real Synthea exports
Fictional drugs"Drug X/Y/Z" under a Lake code systemThe demo must never look like advice about a real medicine
Pod URL inside a househttp://localhost:3000/Solid-OIDC allows plain HTTP only on localhost. Public houses put TLS in front
Sandbox LakesDomain proof skipped and marked sandboxA local Lake has no real domains; the reply says the domain wasn't proved
Ethics and audit claimsCount only as signed credentials from a domain on the owner's trust listAn offer can't vouch for itself, and nobody appoints authorities for the Lake
StudiesDeclarative (up to four yes/no questions), not codeFully auditable and safe to run anywhere; arbitrary code needs attested execution (stretch goal)
What a house sends backOne cell, randomised with unary randomised response (local differential privacy, ε ≤ 4)A single fragment from a one-person house would otherwise be that person's data
BroadcastDirect A2A to every discovered house, 32 at a time; no NATSDirect messaging is required anyway (SPEC §9); a bus is an optimisation to revisit at 1,000 houses (milestone 7)
Converter certificatesThe auditor certifies name@version from an allowlistPinning the package digest is a follow-up
GrantsA join is the owner's standing pre-approval; keys are minted by the owner's approval flow (milestone 4)Agents never mint keys
FederationPull: a node reads its peers' /cards and /signals every 5 s, and re-verifies every card itselfPeers can point at agents but never vouch for them; no new protocol beyond what every node already serves
Discovery with every node downAgents remember the houses they found; every card lives at its owner's addressRegistries are search indexes, not gatekeepers
Record checks under loadFull chain once a minute; in between, re-read the two data files and compare with the digests the verified credentials pinTampering with either file is still caught; a forger can't swap credential files without the issuer's key
Busy, not brokenA house that can't read its pod in time answers busy; agents retry three timesOverload must never be mistaken for a tampered record
Payments at scaleSettled in batches of 100 under one Intent MandateThe budget holds across batches; no message gets too large
MCP connectorPart of @thelakeprotocol/agent; the assistant joins the Lake as its own signed agentThe assistant is a visitor like any other: same card, same rules, same reputation
npm publishingFrom CI on a version tag, with npm provenanceEach package is signed and linked to the exact commit and run that built it
Hosted cardsThe card lives next to the A2A endpoint (…/t/<name>/.well-known/agent-card.json)Many houses can share one host; every card still verifies on its own
QuarantineBy key, after 3 independent blocks; signed blocklist at /signalsBlocking by claimed domain would let forgers frame real organisations
Reputation0.5 + 0.05 per kept deal − 0.15 per blocked attempt, clamped to 0–1, verified identities onlySimple, explainable, and impossible to dent by impersonation
Injection detectionA pattern check that only labels attemptsSafety comes from rules not reading free text; a classifier would be a second line, not the first
SwarmLives in the CLI (lake swarm)One image, nothing new to run
AP2Mandates implemented from the spec as W3C VCs; no AP2 SDK usedThere is no stable JS SDK; the chain is what matters, and it is real
SettlementSimulated; receipts are signedReal money movement is a non-goal
Bloc termsComputed by the visitor from members' signed counters, by a fixed rule anyone can checkNo coordinator needed; a jointly signed bloc counter is future work
One card per WebID at a nodeA newer card replaces the old oneKey rotation must work; stale keys must not
The owner's keyEd25519, made on the phone with @noble/curvesPhones on a home network load the app over plain HTTP, where browsers disable WebCrypto
PairingOne-time token in the printed link; sandbox may allow first-comeA stranger on the Wi-Fi can't claim your house
Live updates in the appPolling once a secondWorks everywhere with no push service; push notifications are a follow-up
LLMNone bundled. Rules decide; templates write reasonsPeople bring their own agents through MCP or A2A

Apache-2.0 · Synthetic data only · Nobody owns the Lake.