content-explorer/contracts/fact-policy.md
tegwick 072a7fa550 Freeze the v0.1 contract and the local ingest connector.
The snapshot and manifest schemas, both example dataspaces, and the shared text renderer now pass the fixture validator and the negative contract tests. JSON, NDJSON, and Markdown frontmatter publish a snapshot only when rights, identity, and references allow it. CONTENT-WP-0001 and CONTENT-WP-0003 are marked finished against those artifacts. CONTENT-WP-0000-T04 stays open. SCOPE.md and the 19:05 scope-against-intent note record the stop.

Assistant: grok
Assistant-Session: 01a130f1-abfb-7d71-9cd6-a8b75ec7f95a
2026-10-12 19:07:32 +02:00

19 lines
1.1 KiB
Markdown

# Fact policy v0.1
A claim is a statement about one entity field. It is not a proof. The snapshot keeps every claim. The manifest `factPolicy` only decides what a display may show.
| Situation | Claim shape | `resolve_claims` state |
|---|---|---|
| No claim for that key | absent | `missing` |
| The field was checked and has no value | `status: unknown` | `unknown` |
| One asserted value | `status: asserted` | `present` |
| The holder asked not to display it | `status: withheld` | `withheld` |
| Two asserted values | both `status: asserted` | `contradicted` |
Policies when values disagree:
- `show-all` returns every asserted value and state `contradicted`.
- `withhold` returns no values and state `contradicted`.
- `preferred` returns the single claim with `preferred: true`. If none or more than one is marked, it returns no values and state `contradicted`.
Absence is not the same as unknown, and unknown is not the same as false. A relation with no `sourceRefs` is invalid. It is not stored as an unsourced fact. Conflicting claims stay in the snapshot either way. The policy does not delete them.