81 lines
2.6 KiB
Python
81 lines
2.6 KiB
Python
from __future__ import annotations
|
|
from pydantic import BaseModel, Field
|
|
from typing import Literal
|
|
|
|
TrustStatus = Literal["trusted", "provisional", "rejected", "needs_review"]
|
|
CitationStatus = Literal["unreviewed", "verified", "needs_source_check", "misleading", "irrelevant", "fabricated"]
|
|
|
|
class ConceptReviewEntry(BaseModel):
|
|
concept_id: str
|
|
title: str
|
|
description: str = ""
|
|
prerequisites: list[str] = Field(default_factory=list)
|
|
mastery_signals: list[str] = Field(default_factory=list)
|
|
status: TrustStatus = "needs_review"
|
|
notes: list[str] = Field(default_factory=list)
|
|
|
|
|
|
class CitationReviewEntry(BaseModel):
|
|
citation_review_id: str
|
|
artifact_id: str
|
|
artifact_path: str = ""
|
|
artifact_title: str = ""
|
|
source_kind: Literal["citation_key", "extracted_reference"] = "citation_key"
|
|
locator: str = ""
|
|
citation_key: str = ""
|
|
title: str = ""
|
|
author: str = ""
|
|
year: str = ""
|
|
venue: str = ""
|
|
source_bib_path: str = ""
|
|
raw_bibtex: str = ""
|
|
status: CitationStatus = "unreviewed"
|
|
notes: list[str] = Field(default_factory=list)
|
|
related_concept_ids: list[str] = Field(default_factory=list)
|
|
related_claim_ids: list[str] = Field(default_factory=list)
|
|
|
|
class DraftPackData(BaseModel):
|
|
pack: dict = Field(default_factory=dict)
|
|
concepts: list[ConceptReviewEntry] = Field(default_factory=list)
|
|
conflicts: list[str] = Field(default_factory=list)
|
|
review_flags: list[str] = Field(default_factory=list)
|
|
attribution: dict = Field(default_factory=dict)
|
|
|
|
class ReviewAction(BaseModel):
|
|
action_type: str
|
|
target: str = ""
|
|
payload: dict = Field(default_factory=dict)
|
|
rationale: str = ""
|
|
|
|
class ReviewLedgerEntry(BaseModel):
|
|
reviewer: str
|
|
action: ReviewAction
|
|
|
|
class ReviewSession(BaseModel):
|
|
reviewer: str
|
|
draft_pack: DraftPackData
|
|
citation_reviews: list[CitationReviewEntry] = Field(default_factory=list)
|
|
ledger: list[ReviewLedgerEntry] = Field(default_factory=list)
|
|
|
|
class WorkspaceMeta(BaseModel):
|
|
workspace_id: str
|
|
title: str
|
|
path: str
|
|
created_at: str
|
|
last_opened_at: str
|
|
notes: str = ""
|
|
|
|
class WorkspaceRegistry(BaseModel):
|
|
workspaces: list[WorkspaceMeta] = Field(default_factory=list)
|
|
recent_workspace_ids: list[str] = Field(default_factory=list)
|
|
|
|
class ImportPreview(BaseModel):
|
|
ok: bool = False
|
|
source_dir: str
|
|
workspace_id: str
|
|
overwrite_required: bool = False
|
|
errors: list[str] = Field(default_factory=list)
|
|
warnings: list[str] = Field(default_factory=list)
|
|
summary: dict = Field(default_factory=dict)
|
|
semantic_warnings: list[str] = Field(default_factory=list)
|