The format

One JSON file, five refusals, no server

rwa/1 is a document an organisation publishes at its own domain. No account, no chain, nothing to sign up for — a stranger fetches it and checks it offline with a validator that imports nothing but node builtins.

npm install @flashyos/assetmesh/.well-known/rwa.json
The document

Ten fields, and none of them is a secret

FieldMeaning
rwarequiredExactly "1".
issuerrequiredorg/slug — who publishes the file.
generatedoptionalISO timestamp of the emit.
assets[]requiredMay be empty. An empty register is honest; an invented one is not recoverable.
assets[].idrequiredprefix/slug, never reissued. The prefix is fixed by kind.
assets[].kindrequiredProperty, Instrument, Credential, Work or Place — directory/1’s vocabulary.
assets[].classrequiredDotted and conventional: real-estate.commercial.
assets[].jurisdictionrequiredUS-IL. What an obligation means depends on where the asset is.
assets[].attestations[]requiredAt least one. Each names its author, its date and its expiry.
assets[].obligations[]optionalWhat a holder is owed, in what unit, by whom, until when.
The rules

Refusals, not warnings

A record that breaks any of these does not validate. The code beside each is the one validateRecord emits, and a test on this site triggers every one of them against the real package — so a rule described here and not enforced there is a failing build rather than a sentence somebody has to notice.

01A reward may not be performance-linkedreward-performance-linked

An obligation whose worth rises with rent, occupancy or sale proceeds is an investment contract nearly everywhere it is offered. The field is required on every obligation, so the question is answered every time rather than noticed later — and the one shape that is reliably a security cannot be emitted by accident.

02An independent claim is not the issuer’s to makeattestation-not-independent

An appraisal signed by the owner is a number in a PDF. Seven claim types — appraised value, audited financials, custody, title, insurance, environmental, occupancy — are refused when the party making them is the party they are about.

03Every attestation expiresattestation-no-expiry

An undated 2019 valuation presented as current is the most common way an asset record misleads, and it does so without anybody lying. Decay is structural: a claim nobody restates stops counting on its own.

04Money and units are integersmoney-not-integer

Integer minor units with the decimals stated. Floats drift, and every settlement rail rejects fractions.

05The starter refuses itselftemplate-placeholder

npx assetmesh adopt writes a record that deliberately does not pass. A checker that says “valid” over org/your-organisation teaches the adopter, on the first run they ever do, that a green check means nothing.

Where it sits

The present tense

An asset record is a standing description of what is true now — restated as facts change, stale when nobody restates it. So it takes backlog/1’s shape rather than shipped/1’s, and for the same reason it cannot be sealed into a checkpoint: nothing here is sealed, so there is no digest to commit to.

FormatTenseSealedDecays
backlog/1futurenoyes
rwa/1presentnoyes
shipped/1pastyesno
Run it
npx assetmesh adopt

One file, at your own domain. It does not validate yet, and it names every placeholder still in it.

npx assetmesh check

Every problem at once, with a path and a stable code. Exit 1 on any.

Apache-2.0, zero runtime dependencies, and vendor-assetmesh.mjs runs the same rules in a repository with no package.json at all.

@flashyos/assetmesh

A record that validates is well-formed. It is not true. No format can vouch for the claims inside it, and one that implied it could would launder an assertion into a verdict. What a reader gets is narrower and honest: who claims what, as of when, until when, and whether the party making a claim is the party it is about.