Add classified evidence presentations
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user