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:

  • key is a short dossier-local reference used to connect records and make cycles reviewable;
  • id is a content address over the complete record except its own id field.

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; or
  • unknown, 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

Reproducible 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