What GuardLLM knows outside the model
Per-flow context is supplied by the host on every call. It is never inferred from content, and it is not retained between flows.
Host declares source_trust = untrusted
1. Ingest
STATE RECORDED2. Session state after ingest
STATE RECORDED3. The proposal
BLOCKEDHost declares source_trust = trusted
1. Ingest
STATE RECORDED2. Session state after ingest
STATE RECORDED3. The proposal
ALLOWEDThe detector saw one text and gave one answer: both columns matched instruction_override, so the divergence cannot be explained by what was detected. Only the declaration differs.
Why per flow and not per session: trust, sensitivity, and content type describe one flow, and a single session commonly mixes flows. An operator instruction and a retrieved web page arrive on the same session and must not inherit each other's trust. What GuardLLM retains across a session is state it derived itself: contamination, provenance, DLP history, and rate counters.
Evidence, scope, and reproduction
Scope and instrumentation
This page runs one text through two sessions that differ in a single declared field, so the effect of the declaration can be read off the results rather than argued for.
SecurityContextTest: tests/test_demo_scenarios.pyExact fixture test: tests/test_demo_scenarios.py::test_security_context_fixture
.venv/bin/python -m pytest tests/test_demo_scenarios.py::test_security_context_fixture -q
Generated fixture