Repository object · documentation
Reversible claim dossiers
Status: reversible alpha application contracts exercised by four reviewed vertical slices.
- Source path
docs/dossiers.md- Media type
text/markdown- Object ID
em:documentation:sha256:8dfc3b2016e9345c0e8b8d4533b916c53f1c0fca174be79a551dbc6cddf9462a- Content digest
18a4f49fdaddd09f48e78aaf961bf9dc1847ef2a836475b4d3f50f9ed232b5d5
Source content
Reversible claim dossiers
Status: reversible alpha application contracts exercised by four reviewed vertical slices.
The dossier module represents enough structure to test a real How We Know case without promoting an early model into the Epistemic Mesh protocol. It lives in epistemedia.dossier, not schemas/, and may change incompatibly while the pilot is measured.
No dossier is accepted merely because it validates. Validation establishes shape, integrity, referential closure, and disclosure safety—not truth, evidentiary quality, licensing permission, or governance acceptance.
Identity model
Every record has two identities:
keyis a short dossier-local reference used to connect records and make cycles reviewable;idis a content address over the complete record except its ownidfield.
The dossier has a content-addressed dossier_id over the full document except that field. Local keys are not global identifiers. Adapters expose content IDs; authors use keys only inside the dossier package.
Strict validation rejects missing fields, extra fields, duplicate keys, duplicate stable IDs, malformed content addresses, and dangling references.
Object layers
| Collection | Application meaning |
| --- | --- |
| `source_works` | Logical identity of a paper, page, dataset, report, instrument output, or other source |
| `editions` | Exact retrieved version and bytes or canonical JSON actually examined |
| `spans` | Exact text-offset quote or JSON Pointer value plus locator and digest |
| `propositions` | Semantic statement and scope without endorsement or global status |
| `assertions` | An actor’s dated stance toward a proposition, grounded in exact spans and one explicit lineage |
| `lineages` | Known or unknown dependence state, dimensions, roots, dependencies, and member assertions |
| `evidence_relations` | Support, rebuttal, qualification, undercutting, replication, failed replication, or dependence |
| `claim_families` | A bounded question joining related propositions, assertions, and evidence relations |
| `evaluations` | A label and reason codes produced under an explicit policy and frontier |
Propositions do not contain truth, confidence, probability, or similarly intrinsic verdict fields. Those field names are forbidden recursively. A policy-relative evaluation is a separate record and cannot silently become a property of the proposition.
Works, editions, and exact spans
A source work and an examined edition must remain different records. An edition stores:
- its work reference and edition label;
- retrieval time with timezone;
- media type;
- exact text or structured JSON content used by the pilot;
- SHA-256 digest and byte length.
A text span gives start and end character offsets, a human-readable locator label, the exact quote, and its SHA-256 digest. Validation rejects out-of-bounds offsets, quote mismatches, and digest mismatches.
A structured span gives a JSON Pointer, label, exact selected value, and digest over canonical JSON. The alpha model intentionally supports only content that can be checked locally and deterministically; an inaccessible URL or citation label cannot stand in for examined bytes.
License and snapshot decisions still belong to research review. The model’s ability to store content does not grant permission to commit copyrighted source material.
Lineage and independence
Every assertion points to exactly one lineage, and that lineage must list the assertion. A lineage is either:
known, with declared dependence dimensions and zero or more lineage dependencies; orunknown, with an explicit note stating that its lineage is unknown.
Dependence cycles fail validation. The reference independence summary collapses known dependent lineages to their known roots. Unknown lineages contribute to an explicit unknown count and receive zero automatic independence credit. A known lineage that ultimately depends on an unknown lineage also receives no root credit for that path.
The calculation is instrumentation for the pilot, not a universal evidence-scoring policy.
Disclosure ordering and noninterference
public_dossier() validates the complete package, removes private records, recomputes the public dossier content address, and validates referential closure again. A public record that depends on a removed private record fails closed.
The source dossier ID may change when private records change. The public dossier ID and every public adapter must remain byte-for-byte unchanged when only disconnected private records change. Tests exercise this noninterference contract.
Interface parity
DossierProjection begins from the disclosure-safe public dossier and exposes:
- deterministic JSON;
- Markdown;
- semantic HTML;
- an API-style envelope;
- an MCP resource;
- CLI JSON text.
Every form carries the same public dossier_id. After independent review, an explicit application
manifest may bind one exact dossier and review receipt into the public compiler. The compiler scans
accepted manifests in deterministic order and rejects duplicate case numbers, slugs, dossier
identities, source paths, generated routes, and MCP resource URIs. Each profile binds exact dossier
and review-receipt bytes, format, reviewer identity, reviewed head, and independence checks before
producing HTML, Markdown, static JSON, local API, MCP, and CLI representations from the same
disclosure-safe object. This makes the dossier publicly discoverable on the static site; it does
not activate the reserved hosted API/MCP runtime.
Construction and validation
from epistemedia.dossier import DossierProjection, stamp_dossier, validate_dossier
dossier = stamp_dossier(application_material_without_ids)
validate_dossier(dossier)
public_projection = DossierProjection.from_dossier(dossier)
print(public_projection.id)
The synthetic fixture builder and adversarial mutations are in tests/test_dossiers.py. Four real
applications are selected in catalog/dossiers/: Case 001 preserves its legacy feature profile;
Case 002 uses its agent-citation-lineage profile; and Cases 003–004 share a generic bounded-
proposition adapter while retaining their own count units, ledgers, terminology, and practical
readings. Every case remains byte-bound to its independent review receipt. Synthetic fixtures
demonstrate mechanics only and make no empirical or philosophical claims.
Promotion boundary
This format must not be copied into schemas/ or described as protocol v1 without a later normative task, independent evaluation, compatibility analysis, and migration plan. The pilot should first reveal which fields survive real source work, exact-span review, lineage adjudication, and two genuinely different policy evaluations.
Build receipt
Reproduce this projection
- Catalog
em:catalog:sha256:9bfc972213cba2cde167386103dc2c011ee74639fb7f0794c54120fbbdef1a5d- Frontier
em:frontier:sha256:f33be3eae4c75232d56750ef9a1aa79d96274ece3417d65a75c1391bf61a81bf- Accepted commit
f92846570180dfa4511263f8ba98ecd18f7772c9- Epistemic policy
commons-balanced-v0.1- Disclosure policy
public-noninterference-v0.1- Compiler
epistemedia/0.2.0