Add sources and citations API (Phase 1: sources-first spine)

Source CRUD (reusable, tree-scoped) and Citation create/list/soft-delete linking one source to exactly one fact (person/event/name/relationship). Editor-gated writes, privacy-filtered reads, audit throughout; tenant + existence validation on source and target. list_citations returns all tree citations so the UI can render 'sourced' indicators in one round-trip. 22 tests pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Justin Paul <justin@jpaul.me>
This commit is contained in:
2026-06-06 13:17:33 -04:00
parent fbb9d0195c
commit 064bb6ea65
7 changed files with 511 additions and 1 deletions
+12 -1
View File
@@ -2,7 +2,16 @@
from fastapi import APIRouter
from app.api.v1 import auth, events, persons, relationships, trees, users
from app.api.v1 import (
auth,
citations,
events,
persons,
relationships,
sources,
trees,
users,
)
api_router = APIRouter(prefix="/api/v1")
api_router.include_router(auth.router)
@@ -11,3 +20,5 @@ api_router.include_router(trees.router)
api_router.include_router(persons.router)
api_router.include_router(events.router)
api_router.include_router(relationships.router)
api_router.include_router(sources.router)
api_router.include_router(citations.router)