feat(stage5): implement claim extraction — atomic verifiable claims from sources

- Claim model with provenance, evidence_span, attribution, claim_type
- Stage5Extractor: LLM-based atomic claim extraction from source content
  - Never summarizes — always extracts atomic, verifiable claims
  - Claims require evidence span (exact quote from source)
  - Attribution per claim (who says what)
  - Claim types: fact, opinion, prediction, recommendation, claim
  - Confidence score 0.0–1.0 per claim
  - Bounded concurrency, SSRF-safe, max content truncation
- REST API: GET/POST /research/{run_id}/claims
- 36 tests: parsing, edge cases, integration, validation
This commit is contained in:
NSCT Agent
2026-08-23 17:56:01 +00:00
parent b8181deb05
commit e8b6515f67
7 changed files with 1533 additions and 0 deletions

View File

@@ -87,6 +87,10 @@ def create_app() -> FastAPI:
from nsct.api.planner import router as planner_router
app.include_router(planner_router, tags=["planner"])
# Mount claim extraction router (Stage 5)
from nsct.api.claims import router as claims_router
app.include_router(claims_router, tags=["research"])
return app