capital
Paper, funded, simulated or mixed, and where the fills came from. The single most misreadable fact about any record, enumerated so it cannot be softened into prose.
Observed, simulated, model-estimated and planned claims remain visibly separate.
Proposed open standardcanli.paper-evidence.v0
Almost every way a published track record misleads is an omission, not a wrong number: the capital was paper and it did not say so, the costs were modelled and it did not say so, the result was the best of two hundred tries and it did not say so. This schema makes those the required fields.
Status. Proposed, version zero, published for criticism. It has one implementation, which is mine, and no independent one. That is a statement of maturity, not modesty: a format with a single implementer is a house style until somebody else can read it.
12 top-level members, every one of them mandatory. The interesting ones are the last three.
capitalPaper, funded, simulated or mixed, and where the fills came from. The single most misreadable fact about any record, enumerated so it cannot be softened into prose.
identityWhat the record is about and whether that identity
was frozen before the returns were opened. false is a legitimate answer and
far more useful than an absent field.
returnsCarries basis and
sharpe_reportable. A short sample must set the latter false and leave the
Sharpe null rather than publish a figure the sample cannot carry.
costsWhat was charged and what was assumed. Absent cost modelling is itself a disclosure.
selectionHow much searching produced the result. Without it a Sharpe ratio is uninterpretable, which is the most common defect in published performance.
correctionsWhat has been withdrawn. A record with no correction history and no statement that it has none is silent, not clean.
provenanceAt least one source binding with a SHA-256, so a reader can check something without trusting the publisher.
claim_maturity.does_not_establishAt least one entry, enforced by the schema. Every record fails to establish something, and a publisher who cannot name one has not looked. This is the field the standard exists for: it is the only one that cannot be satisfied by pointing at a number you already had.
A validator with 0 dependencies, and 12 invalid vectors, each breaking exactly one rule so an implementer can diff them against the valid one and read the rule off the difference. On the last run, 13 of 13 vectors behaved as declared and 12 failed at the pointer they declare. That second number is the one worth having: a vector failing for an unrelated reason looks like a passing test while hiding a rule that does not work. The receipt is published.
| Vector | Violates | Why it matters |
|---|---|---|
missing-required-claim-maturity | required: claim_maturity | A record that never says what it fails to establish is the defect this standard exists to prevent. |
empty-does-not-establish | minItems: 1 | Every record fails to establish something. An empty list means the publisher did not look. |
unknown-capital-kind | enum | Capital kind is enumerated so it cannot be softened into prose. |
wrong-schema-id | const | A record claiming a version it does not implement is worse than an unversioned one. |
unexpected-property | additionalProperties: false | Extra fields are where unreviewed claims enter a standardised record. |
malformed-sha256 | pattern | A truncated or mistyped digest cannot be checked, so it is not provenance. |
impossible-date | format: date | A regex accepts 2026-02-30. A record's period must be a date that exists. |
no-source-bindings | minItems: 1 | A record bound to nothing is an assertion. |
semantic-unreportable-sharpe-reported | semantic: sharpe_reportable false but a Sharpe is published | Declaring the sample cannot support a figure and then publishing it anyway. |
semantic-paper-net-of-realised | semantic: PAPER capital cannot be net of REALISED costs | Realised costs require funded execution. This is how a paper record acquires the authority of a funded one. |
semantic-uncounted-trials | semantic: trials_counted true but trial_count null | Claiming to count trials without a count. |
semantic-reversed-period | semantic: first_observation after last_observation | A period that runs backwards passes every type check. |
A standard whose only example is invented is a wish. The valid vector is this project's live paper record, generated from the same artifacts the site renders from, and the build fails if it ever stops conforming. Writing it was the useful part: mapping your own record into a schema that asks what you do not know is where you find out whether you can answer.
Version zero. Breaking changes bump the version in the schema
member, which is a const so a record can never claim a version it does not
implement. Criticism is welcome through
the governed review route,
and the honest next milestone is one independent implementation attempt, pass or fail.
MIT licensed, like everything else here. Authored by Arhan Canli.