Why
Two residual risks after M3, plus operational hardening for untrusted traffic.
Risk one: the extractor invents a claim the source text does not support. Every claim already carries a verbatim quote, so a human can check any finding in seconds, but nothing machine-checks that the quote actually entails the claim.
Risk two: dependence on the Anthropic API for extraction. The extractor should sit behind a trait so a local model can slot in later without touching the pipeline.
What to do
Done when
Scoped per item; this is a hardening bucket, not a single deliverable. Split into separate issues when M3 lands if that works better.
Depends on
Why
Two residual risks after M3, plus operational hardening for untrusted traffic.
Risk one: the extractor invents a claim the source text does not support. Every claim already carries a verbatim quote, so a human can check any finding in seconds, but nothing machine-checks that the quote actually entails the claim.
Risk two: dependence on the Anthropic API for extraction. The extractor should sit behind a trait so a local model can slot in later without touching the pipeline.
What to do
max_sessionsalone is too blunt once untrusted traffic is in front of thisDELETE /v1/sessions/{id}and a documented data-retention story (message contents not logged by default)Done when
Scoped per item; this is a hardening bucket, not a single deliverable. Split into separate issues when M3 lands if that works better.
Depends on