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| Field | Meaning | |
|---|---|---|
| rwa | required | Exactly "1". |
| issuer | required | org/slug — who publishes the file. |
| generated | optional | ISO timestamp of the emit. |
| assets[] | required | May be empty. An empty register is honest; an invented one is not recoverable. |
| assets[].id | required | prefix/slug, never reissued. The prefix is fixed by kind. |
| assets[].kind | required | Property, Instrument, Credential, Work or Place — directory/1’s vocabulary. |
| assets[].class | required | Dotted and conventional: real-estate.commercial. |
| assets[].jurisdiction | required | US-IL. What an obligation means depends on where the asset is. |
| assets[].attestations[] | required | At least one. Each names its author, its date and its expiry. |
| assets[].obligations[] | optional | What a holder is owed, in what unit, by whom, until when. |
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.
reward-performance-linkedAn 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.
attestation-not-independentAn 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.
attestation-no-expiryAn 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.
money-not-integerInteger minor units with the decimals stated. Floats drift, and every settlement rail rejects fractions.
template-placeholdernpx 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.
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.
| Format | Tense | Sealed | Decays |
|---|---|---|---|
| backlog/1 | future | no | yes |
| rwa/1 | present | no | yes |
| shipped/1 | past | yes | no |
npx assetmesh adoptOne file, at your own domain. It does not validate yet, and it names every placeholder still in it.
npx assetmesh checkEvery 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.
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.