Enterprise AI Bootcamp Demo 1

One question, three roles

The same question, asked by three people with different authority over the same machine. The difference is not a sentence in the prompt asking the model to be careful. It is a filter on retrieval: the passages a role may not see never enter the context window, and the removal is recorded.

The question

What is the relief-valve setting on the 4 CFM 3000 PSI charging compressor, and how do I adjust it?

Asset: Stewart-Warner 43040-301-01, 4 CFM @ 3000 PSI — the highest-pressure machine in the corpus, seventeen times the working pressure of the 175 PSI shop units.

Service engineer

waiting…

Certified on high-pressure charging plant. Sees the full procedure.

Tiers visible: general, machine, programme · safety-critical policy: allow

Product engineer

waiting…

Design authority. Sees specifications and cross-variant comparison, not field adjustment steps.

Tiers visible: general, machine, programme · safety-critical policy: spec_only

Customer support

waiting…

Non-technical. Barred from high-pressure plant content entirely; the correct behaviour here is to refuse and escalate.

Tiers visible: general, programme · safety-critical policy: deny

The refusal is the feature Customer support gets nothing, and that is the correct outcome. A system that cannot refuse has no no-answer accuracy, and a service copilot that hands a 3000 PSI relief-valve adjustment to an untrained caller is worse than no copilot. Refusal is measured on screen 2, not suppressed.

Why this is a retrieval control, not a prompt

A policy expressed in the system prompt is a suggestion; the passage is still in the context window and one adversarial turn recovers it. A policy applied in apply_role_policy removes the passage before generation, and returns the list of what it removed and why — which is the artefact an auditor asks for. The code is about forty lines in pipeline/retrieval.py.

Index built by scripts/build_index.py at 2026-08-10 01:44:34 in 711s: 25 documents, 3,146 pages, 12,590 improved chunks / 5,434 naive chunks. Embeddings: Snowflake/snowflake-arctic-embed-s (int8 ONNX, Apache-2.0). Reranker: cross-encoder/ms-marco-MiniLM-L-6-v2 (ONNX, Apache-2.0).