Last modified by Robert Schaub on 2025/12/24 20:35

From version 2.2
edited by Robert Schaub
on 2025/11/27 12:08
Change comment: There is no comment for this version
To version 1.1
edited by Robert Schaub
on 2025/11/27 12:02
Change comment: There is no comment for this version

Summary

Details

Page properties
Parent
... ... @@ -1,1 +1,1 @@
1 -FactHarbor.Playground.WebHome
1 +FactHarbor.Specification.Data Model.WebHome
Content
... ... @@ -41,10 +41,10 @@
41 41   (scenarios live at the *claim* level, not per individual phrasing).
42 42  * Verdicts and Scenario–Evidence links are always attached to **versions**:
43 43  * {{code}}SCENARIO_VERSION{{/code}} +
44 - {{code}}EVIDENCE_VERSION{{/code}} →
45 - {{code}}SCENARIO_EVIDENCE_LINK_VERSION{{/code}}
44 + {{code}}EVIDENCE_VERSION{{/code}} →
45 + {{code}}SCENARIO_EVIDENCE_LINK_VERSION{{/code}}
46 46  * {{code}}SCENARIO_VERSION{{/code}} →
47 - {{code}}VERDICT_VERSION{{/code}}
47 + {{code}}VERDICT_VERSION{{/code}}
48 48  
49 49  This ensures that when a Scenario or Evidence changes, old verdicts and links
50 50  remain intact as historical records and can be revisited.
... ... @@ -59,95 +59,124 @@
59 59  
60 60  {{mermaid}}
61 61  erDiagram
62 +
62 62   CLAIM_CLUSTER {
63 - string ClusterID PK
64 - string EmbeddingVectorRef
65 - string Theme
64 + string claimClusterId
65 + string theme
66 + string embeddingVectorRef
67 + string language
68 + datetime createdAt
66 66   }
67 67  
68 68   CLAIM {
69 - string ClaimID PK
70 - string ClusterID FK
71 - string Status
72 - datetime CreatedAt
72 + string claimId
73 + string claimClusterIdFk
74 + string status
75 + datetime createdAt
73 73   }
74 74  
75 75   CLAIM_VERSION {
76 - string ClaimVersionID PK
77 - string ClaimID FK
78 - string Text
79 - string ClaimType
80 - string Domain
81 - datetime CreatedAt
79 + string claimVersionId
80 + string claimIdFk
81 + string text
82 + string language
83 + string claimType
84 + string domain
85 + string authorType
86 + datetime createdAt
82 82   }
83 83  
84 84   SCENARIO {
85 - string ScenarioID PK
86 - string ClaimID FK
87 - string Name
88 - datetime CreatedAt
90 + string scenarioId
91 + string claimIdFk
92 + string key
93 + string title
94 + boolean isDeprecated
89 89   }
90 90  
91 91   SCENARIO_VERSION {
92 - string ScenarioVersionID PK
93 - string ScenarioID FK
94 - string Definitions
95 - string Assumptions
96 - string Boundaries
97 - datetime CreatedAt
98 + string scenarioVersionId
99 + string scenarioIdFk
100 + string versionTag
101 + string definitionsJson
102 + string assumptionsJson
103 + string boundariesJson
104 + string notes
105 + datetime createdAt
98 98   }
99 99  
100 100   EVIDENCE {
101 - string EvidenceID PK
102 - string SourceType
103 - string URL
104 - float ReliabilityScore
109 + string evidenceId
110 + string canonicalSourceId
111 + string mainUrl
112 + string evidenceType
113 + string language
105 105   }
106 106  
107 107   EVIDENCE_VERSION {
108 - string EvidenceVersionID PK
109 - string EvidenceID FK
110 - string Summary
111 - float ReliabilityScore
112 - datetime CreatedAt
117 + string evidenceVersionId
118 + string evidenceIdFk
119 + string snapshotLocation
120 + string extractionSummary
121 + string reliabilityModel
122 + datetime collectedAt
123 + datetime createdAt
113 113   }
114 114  
115 115   SCENARIO_EVIDENCE_LINK {
116 - string LinkID PK
117 - string ScenarioVersionID FK
118 - string EvidenceVersionID FK
119 - float Relevance
120 - string Direction
127 + string scenarioEvidenceLinkId
128 + string scenarioIdFk
129 + string evidenceIdFk
121 121   }
122 122  
132 + SCENARIO_EVIDENCE_LINK_VERSION {
133 + string scenarioEvidenceLinkVersionId
134 + string scenarioEvidenceLinkIdFk
135 + string scenarioVersionIdFk
136 + string evidenceVersionIdFk
137 + float relevance
138 + string direction %% SUPPORTS / CONTRADICTS / MIXED / CONTEXT
139 + string rationale
140 + datetime createdAt
141 + }
142 +
123 123   VERDICT {
124 - string VerdictID PK
125 - string ScenarioID FK
144 + string verdictId
145 + string scenarioIdFk
146 + string verdictType %% e.g. likelihood, classification
126 126   }
127 127  
128 128   VERDICT_VERSION {
129 - string VerdictVersionID PK
130 - string VerdictID FK
131 - float Verdict
132 - float Confidence
133 - string Reasoning
134 - datetime CreatedAt
150 + string verdictVersionId
151 + string verdictIdFk
152 + string scenarioVersionIdFk
153 + float probability
154 + float confidence
155 + string reasoningSummary
156 + string uncertaintyFactorsJson
157 + datetime createdAt
135 135   }
136 136  
160 + %% Relationships
161 +
137 137   CLAIM_CLUSTER ||--o{ CLAIM : contains
138 - CLAIM ||--o{ CLAIM_VERSION : versions
163 + CLAIM ||--o{ CLAIM_VERSION : has_versions
164 + CLAIM ||--o{ SCENARIO : has_scenarios
165 + SCENARIO ||--o{ SCENARIO_VERSION : has_versions
139 139  
140 - CLAIM ||--o{ SCENARIO : has
141 - SCENARIO ||--o{ SCENARIO_VERSION : versions
167 + EVIDENCE ||--o{ EVIDENCE_VERSION : has_versions
142 142  
143 - EVIDENCE ||--o{ EVIDENCE_VERSION : versions
169 + SCENARIO ||--o{ SCENARIO_EVIDENCE_LINK : may_link
170 + EVIDENCE ||--o{ SCENARIO_EVIDENCE_LINK : may_link
144 144  
145 - SCENARIO_VERSION ||--o{ SCENARIO_EVIDENCE_LINK : links
146 - EVIDENCE_VERSION ||--o{ SCENARIO_EVIDENCE_LINK : linked
172 + SCENARIO_EVIDENCE_LINK ||--o{ SCENARIO_EVIDENCE_LINK_VERSION : has_versions
147 147  
148 - SCENARIO ||--o{ VERDICT : assessed
149 - VERDICT ||--o{ VERDICT_VERSION : versions
174 + SCENARIO_VERSION ||--o{ SCENARIO_EVIDENCE_LINK_VERSION : uses_evidence
175 + EVIDENCE_VERSION ||--o{ SCENARIO_EVIDENCE_LINK_VERSION : is_used_in
150 150  
177 + SCENARIO ||--o{ VERDICT : has_verdicts
178 + VERDICT ||--o{ VERDICT_VERSION : has_versions
179 + SCENARIO_VERSION ||--o{ VERDICT_VERSION : assessed_in
151 151  {{/mermaid}}
152 152  
153 153  **Important points:**
... ... @@ -172,145 +172,83 @@
172 172  
173 173  {{mermaid}}
174 174  erDiagram
175 - %% Core clusters shown for context
176 - CLAIM_CLUSTER {
177 - string ClusterID PK
178 - string EmbeddingVectorRef
179 - string Theme
180 - }
181 181  
182 - CLAIM {
183 - string ClaimID PK
184 - string ClusterID FK
185 - string Status
186 - datetime CreatedAt
205 + USER {
206 + string userId
207 + string displayName
208 + string email
209 + string userType %% "human" or "technical"
210 + datetime createdAt
187 187   }
188 188  
189 - CLAIM_VERSION {
190 - string ClaimVersionID PK
191 - string ClaimID FK
192 - string Text
193 - string ClaimType
194 - string Domain
195 - datetime CreatedAt
213 + TECHNICAL_USER {
214 + string technicalUserId
215 + string userIdFk
216 + string description
217 + string systemIdentifier
196 196   }
197 197  
198 - SCENARIO {
199 - string ScenarioID PK
200 - string ClaimID FK
201 - string Name
202 - datetime CreatedAt
220 + ROLE {
221 + string roleId
222 + string code %% e.g. READER, CONTRIBUTOR, REVIEWER, TRUSTED_CONTRIBUTOR, MODERATOR, SYSTEM_ADMIN, FEDERATION_OPERATOR, FEDERATION_ADMIN
223 + string description
224 + boolean isFederationRole
203 203   }
204 204  
205 - SCENARIO_VERSION {
206 - string ScenarioVersionID PK
207 - string ScenarioID FK
208 - string Definitions
209 - string Assumptions
210 - string Boundaries
211 - datetime CreatedAt
227 + USER_ROLE_MEMBERSHIP {
228 + string membershipId
229 + string userIdFk
230 + string roleIdFk
231 + datetime grantedAt
232 + string grantedByUserIdFk
212 212   }
213 213  
214 - EVIDENCE {
215 - string EvidenceID PK
216 - string SourceType
217 - string URL
218 - float ReliabilityScore
235 + REVIEW_ACTION {
236 + string reviewActionId
237 + string subjectType %% e.g. CLAIM_VERSION, SCENARIO_VERSION...
238 + string subjectVersionId
239 + string actionType %% APPROVE, REJECT, FLAG, COMMENT, REQUEST_CHANGES...
240 + string outcome %% ACCEPTED, REJECTED, ESCALATED...
241 + string comment
242 + string createdByUserIdFk
243 + datetime createdAt
219 219   }
220 220  
221 - EVIDENCE_VERSION {
222 - string EvidenceVersionID PK
223 - string EvidenceID FK
224 - string Summary
225 - float ReliabilityScore
226 - datetime CreatedAt
227 - }
246 + %% Versioned data entities (references from the core model)
228 228  
229 - VERDICT {
230 - string VerdictID PK
231 - string ScenarioID FK
248 + CLAIM_VERSION {
249 + string claimVersionId
232 232   }
233 233  
234 - VERDICT_VERSION {
235 - string VerdictVersionID PK
236 - string VerdictID FK
237 - float Verdict
238 - float Confidence
239 - string Reasoning
240 - datetime CreatedAt
252 + SCENARIO_VERSION {
253 + string scenarioVersionId
241 241   }
242 242  
243 - %% Users and roles
244 - USER {
245 - string UserID PK
246 - string Handle
247 - string Email
256 + EVIDENCE_VERSION {
257 + string evidenceVersionId
248 248   }
249 249  
250 - TECHNICAL_USER {
251 - string UserID PK
252 - string SystemName
260 + SCENARIO_EVIDENCE_LINK_VERSION {
261 + string scenarioEvidenceLinkVersionId
253 253   }
254 254  
255 - CONTRIBUTING_USER {
256 - string UserID PK
257 - string DisplayName
264 + VERDICT_VERSION {
265 + string verdictVersionId
258 258   }
259 259  
260 - TRUSTED_CONTRIBUTOR {
261 - string UserID PK
262 - string TrustLevel
263 - }
268 + %% Relationships
264 264  
265 - REVIEWER {
266 - string UserID PK
267 - string Domain
268 - }
270 + USER ||--o{ TECHNICAL_USER : may_be
271 + USER ||--o{ USER_ROLE_MEMBERSHIP : has_role
272 + ROLE ||--o{ USER_ROLE_MEMBERSHIP : assigned_to
269 269  
270 - EXPERT {
271 - string UserID PK
272 - string ExpertiseArea
273 - }
274 -
275 - FEDERATION_NODE {
276 - string NodeID PK
277 - string Region
278 - }
279 -
280 - FEDERATION_ADMIN {
281 - string UserID PK
282 - string Permissions
283 - }
284 -
285 - REVIEW_ACTION {
286 - string ReviewActionID PK
287 - string UserID FK
288 - string TargetEntityType
289 - string TargetEntityVersionID
290 - string ActionType
291 - string Comment
292 - datetime Timestamp
293 - }
294 -
295 - %% Inheritance / specialization (modelled as relationships)
296 - USER ||--o{ TECHNICAL_USER : "is a"
297 - USER ||--o{ CONTRIBUTING_USER : "is a"
298 -
299 - CONTRIBUTING_USER ||--o{ TRUSTED_CONTRIBUTOR : "subset"
300 - CONTRIBUTING_USER ||--o{ REVIEWER : "subset"
301 - CONTRIBUTING_USER ||--o{ EXPERT : "subset"
302 -
303 - TECHNICAL_USER ||--o{ FEDERATION_NODE : "operates"
304 - TECHNICAL_USER ||--o{ FEDERATION_ADMIN : "administers"
305 -
306 - %% Review actions on versioned entities
307 307   USER ||--o{ REVIEW_ACTION : performs
308 308  
309 - REVIEW_ACTION }o--|| CLAIM_VERSION : reviews
310 - REVIEW_ACTION }o--|| SCENARIO_VERSION : reviews
311 - REVIEW_ACTION }o--|| EVIDENCE_VERSION : reviews
312 - REVIEW_ACTION }o--|| VERDICT_VERSION : reviews
313 -
276 + CLAIM_VERSION ||--o{ REVIEW_ACTION : is_reviewed_in
277 + SCENARIO_VERSION ||--o{ REVIEW_ACTION : is_reviewed_in
278 + EVIDENCE_VERSION ||--o{ REVIEW_ACTION : is_reviewed_in
279 + SCENARIO_EVIDENCE_LINK_VERSION ||--o{ REVIEW_ACTION : is_reviewed_in
280 + VERDICT_VERSION ||--o{ REVIEW_ACTION : is_reviewed_in
314 314  {{/mermaid}}
315 315  
316 316  Notes:
... ... @@ -342,7 +342,7 @@
342 342  * It may inherit some links from earlier scenarios, or start empty depending
343 343   on the change classification (cosmetic vs. conceptual).
344 344  * All verdicts for that scenario are recalculated and stored as new
345 - {{code}}VERDICT_VERSION{{/code}} entries.
312 + {{code}}VERDICT_VERSION{{/code}} entries.
346 346  
347 347  * REVIEW_ACTIONs are always attached to the **exact version** that was seen by
348 348   the reviewer. This preserves a faithful audit trail if data later changes.