Skip to content

Proposed open standardcanli.paper-evidence.v0

A performance record that states what it does not know.

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.

What it requires, and why

12 top-level members, every one of them mandatory. The interesting ones are the last three.

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.

identity

What 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.

returns

Carries 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.

costs

What was charged and what was assumed. Absent cost modelling is itself a disclosure.

selection

How much searching produced the result. Without it a Sharpe ratio is uninterpretable, which is the most common defect in published performance.

corrections

What has been withdrawn. A record with no correction history and no statement that it has none is silent, not clean.

provenance

At least one source binding with a SHA-256, so a reader can check something without trusting the publisher.

claim_maturity.does_not_establish

At 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.

Conformance

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.

VectorViolatesWhy it matters
missing-required-claim-maturityrequired: claim_maturityA record that never says what it fails to establish is the defect this standard exists to prevent.
empty-does-not-establishminItems: 1Every record fails to establish something. An empty list means the publisher did not look.
unknown-capital-kindenumCapital kind is enumerated so it cannot be softened into prose.
wrong-schema-idconstA record claiming a version it does not implement is worse than an unversioned one.
unexpected-propertyadditionalProperties: falseExtra fields are where unreviewed claims enter a standardised record.
malformed-sha256patternA truncated or mistyped digest cannot be checked, so it is not provenance.
impossible-dateformat: dateA regex accepts 2026-02-30. A record's period must be a date that exists.
no-source-bindingsminItems: 1A record bound to nothing is an assertion.
semantic-unreportable-sharpe-reportedsemantic: sharpe_reportable false but a Sharpe is publishedDeclaring the sample cannot support a figure and then publishing it anyway.
semantic-paper-net-of-realisedsemantic: PAPER capital cannot be net of REALISED costsRealised costs require funded execution. This is how a paper record acquires the authority of a funded one.
semantic-uncounted-trialssemantic: trials_counted true but trial_count nullClaiming to count trials without a count.
semantic-reversed-periodsemantic: first_observation after last_observationA period that runs backwards passes every type check.

The flagship instance is my own record

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.

Governance

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.