Add classified evidence presentations

This commit is contained in:
2026-08-22 19:28:06 +02:00
parent dc0147aebc
commit 10dcd567c6
18 changed files with 414 additions and 45 deletions
+11 -2
View File
@@ -8,6 +8,7 @@ Status: accepted design foundation; the core schema, template lifecycle, fronten
- An **exhibit type** describes its domain behavior: folder, document, clipping, note, event, party, or conclusion.
- A **widget** is the frontend visualization and interaction implementation selected for an exhibit type.
- A **document type** specializes a document exhibit: image, PDF, web capture, email, article, filing, price list, text, or generic file.
- A **capture kind** describes how imported image evidence is understood and physically presented: photo, scene, clipping, full page, or not yet classified. It is independent of file format and document type.
- A **board** is a neutral container for exhibits. Both mutable levels and immutable template versions own boards.
- A board may define a temporal viewport (`board_timeline_settings`). If absent, the client derives a range from dated evidence; if present, the range clones and resets with the board.
- A **level** is a mutable board copy used for either play or authoring.
@@ -121,9 +122,17 @@ CREATE TABLE osint.document_types (
name TEXT NOT NULL UNIQUE
);
CREATE TABLE osint.document_capture_kinds (
id TEXT PRIMARY KEY,
name TEXT NOT NULL UNIQUE,
description TEXT NOT NULL
);
CREATE TABLE osint.document_exhibits (
exhibit_id UUID PRIMARY KEY REFERENCES osint.exhibits(id) ON DELETE CASCADE,
document_type_id TEXT NOT NULL REFERENCES osint.document_types(id),
capture_kind_id TEXT NOT NULL DEFAULT 'unclassified'
REFERENCES osint.document_capture_kinds(id),
asset_id UUID REFERENCES osint.assets(id),
title TEXT NOT NULL,
published_at TIMESTAMPTZ,
@@ -296,7 +305,7 @@ Red investigative thread is derived from `exhibit_connections`. Extraction prove
## Document metadata
Known, semantically important values remain real columns: `published_at`, `captured_at`, and `source_uri`. Truly author-defined fields use typed metadata definitions and values rather than JSONB or one untyped EAV table.
Known, semantically important values remain real columns: `published_at`, `captured_at`, `source_uri`, and `capture_kind_id`. Capture kind is player-selected source interpretation used for physical board presentation and contextual connection copy; it never changes the immutable asset, OCR text, provenance, MIME type, or document type. Truly author-defined fields use typed metadata definitions and values rather than JSONB or one untyped EAV table.
```sql
CREATE TABLE osint.metadata_fields (
@@ -323,7 +332,7 @@ The following are computed and must not become duplicate source-of-truth tables:
- Grey timeline projection: document exhibit position to `published_at` on the timeline.
- Pale red containment band: folder position to contained exhibit position.
- Folder flight animation: closed folder position to the exhibit's stored `xpos` and `ypos`.
- Widget selection: `exhibit_type` plus optional `document_type` mapped through the frontend registry.
- Widget selection: `exhibit_type` plus optional `document_type` mapped through the frontend registry. For imported image documents, `capture_kind` selects a physical presentation variant within that document widget.
## Transactional operations