Reference validator for finding-declaration documents (the experiment-findings verdict layer).
Project description
Finding Declaration Schema — Specification v0.1 (draft)
1. Purpose
A machine-readable format for declaring experiment findings — the verdict layer (what an experiment established), distinct from metrics, provenance, and workflow. Exists because no tracking tool or metadata standard covers this layer (verified across 40+ tools/standards, 2026-07).
The canonical structure is derived from a cross-domain survey (ML, clinical,
A/B, security, formal-methods, simulation, systematic reviews, physics) — see
PLAN.md for the derivation evidence.
2. Conformance language (RFC 2119)
The key words MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, SHOULD NOT, RECOMMENDED, MAY, and OPTIONAL are to be interpreted as described in RFC 2119.
3. Document structure
A finding-declaration document is a JSON object. The root object:
- MUST contain a
$schemafield pinning this spec version (self-declaring version — consumers MUST be able to tell what version they read). - MUST contain a
findingsarray with one or more finding objects. - MAY contain an
experimentstring (identifier of the producing experiment) and agenerated_atRFC 3339 timestamp (provenance — RECOMMENDED, not part of any finding).
4. Required finding fields (5)
Every object in findings MUST contain exactly these five fields:
4.1 finding_id (string, REQUIRED)
A stable, citable identifier. MUST match ^[A-Za-z0-9][A-Za-z0-9_.-]*$.
MUST be unique within the document. Without an ID, a finding cannot be
referenced, deduplicated, or gated on — universal by operational necessity.
4.2 claim (string, REQUIRED)
The declarative assertion ("X holds under Y"). MUST NOT be empty. A finding without a declarative claim is raw data, not a finding.
4.3 verdict (enum, REQUIRED)
The truth-status of the claim. MUST be exactly one of:
| Value | Meaning |
|---|---|
CONFIRMED |
The claim is supported by the evidence/proof. |
PARTIAL |
The claim is supported but weakly (attenuated, mixed across metrics, sub-threshold, e.g. physics 3σ, clinical non-inferiority). |
REFUTED |
The claim is contradicted by positive evidence against it (e.g. physics exclusion, formal disproof, ML degradation). |
INCONCLUSIVE |
Insufficient evidence to confirm or refute; the question remains open and could be settled by more work. |
UNDECIDABLE |
Proven that the question cannot be settled within the applicable framework (formal-methods independence/undecidability — a terminal positive result, NOT "we lack data"). |
This 5-state set is necessary and sufficient (8-domain derivation, PLAN.md).
UNDECIDABLE is categorically distinct from INCONCLUSIVE — collapsing them
loses the difference between "unsettled" and "proven-unsettlable."
4.4 evidence (object, REQUIRED — polymorphic)
The basis for the verdict. The form varies by domain; the presence does not. A finding without evidence is an opinion. MUST contain:
type(enum, REQUIRED): one ofNUMERIC,STATISTICAL,PROOF,POC,QUALITATIVE,CITATION.summary(string, REQUIRED): one-line human-readable digest. MUST NOT be empty.artifact(string, RECOMMENDED): a reference (path, URI, metric key) to the backing artifact. Omitted only when the evidence is self-contained insummary.
4.5 scope (object, REQUIRED)
The conditions under which the claim is asserted. MUST have at least one
property. Overgeneralization is the #1 cross-experiment failure mode; scope is
the only defense. Every domain conditions its claims (env/population/axioms/
segment/parameter-range). Examples: {"environment": "CartPole"}, {"axioms": "ZFC"}, {"population": "adults, n=240"}, {"protocol_version": "v2"}.
5. Optional extensions (domain-specific)
These MAY be present. They are NOT universal (some domains cannot represent them; making them required would force fiction):
hypothesis(string) — the pre-stated prediction, when the finding tests one. Absent for exploratory/formal/theorem-as-claim findings.effect_size(number | object) — continuous magnitude (clinical HR, ML perf gap).severity(enum) — categorical magnitude (security HIGH/MEDIUM/LOW).confidence(object) —{ci: [lo,hi], p_value, n, test_type}or{rating: 1-5}.comparison(string) —finding_idof a baseline this is compared against.mechanism(string | object) — causal/mechanistic model (failure-mode class, clinical mechanism).localization(object) — where the finding lives ({file, line_range}/{module, theorem}).falsification_criterion(string) — what evidence would overturn this verdict.implication(string) — what to do with this finding.
6. Excluded (belong to provenance, not findings)
These MUST NOT be required finding fields; they live in the provenance layer
(the experiment/document context): timestamp, author, git_commit, seed,
compute, runtime, raw_data, logs, pre_registration_hash,
reproducibility_status. Findings MAY reference provenance via
evidence.artifact, not embed it.
7. Versioning
This is v0.1 (draft). The $schema URI pins the version. When published:
- Major (1.0): breaking changes (new required field, removed field, changed enum) — new
$schemaURI + migration path. - Minor (0.x): backward-compatible additions (new optional fields).
- Patch: clarifications that do not change validation outcomes.
Backward-compatibility rules (Avro-style): adding optional fields with defaults is always safe; adding a required field or a verdict-enum value is a major change.
8. Serialization
JSON is the canonical serialization. YAML is an accepted alternative (same
structure). The $schema field MUST be present in either.
9. Provenance of this design
- 5 required fields: derived from 6-domain survey, confirmed by evoecos
decisions.mdconverging on the same core from the consumption side. - 5 verdict states: derived from 8-domain necessity/sufficiency proof, confirmed
by evoecos
_normalize_verdictindependently arriving at cardinality 5. - See
PLAN.mdfor full evidence.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file findcheck-0.1.0.tar.gz.
File metadata
- Download URL: findcheck-0.1.0.tar.gz
- Upload date:
- Size: 13.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0a83168abca68fb9c1c5a454d3aa2c73bb08f5043e5a4600da401a62551b780e
|
|
| MD5 |
cc596729d2df13112ae53a962ac86c75
|
|
| BLAKE2b-256 |
782dfbd40aade6ff63dc29ebecb88f6a7a2588f20cee94f99c4f09a1c56e1308
|
File details
Details for the file findcheck-0.1.0-py3-none-any.whl.
File metadata
- Download URL: findcheck-0.1.0-py3-none-any.whl
- Upload date:
- Size: 8.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
215828433f3cb0ab3bc57e29a193421b62dc61c894547c96fc55b9c86f3ac2d4
|
|
| MD5 |
8b0e6e1a8637ba724b41f74efe7dac3c
|
|
| BLAKE2b-256 |
080ea1ae66b360d5a6fa4f3a323ab01fd96c730c05264698788e1d5278b04f74
|