What is real vs demo vs simulated
The playground runs in your browser — no sidecar, no SPIRE socket, no cluster NetworkPolicy. We label trace lines Real, Demo, or Simulated so diligence stays honest.
| Label | What runs | Why |
|---|---|---|
| Real | @blekline/contracts enforce, YAML policy parse, payload keyword deny, egress allowlist | Same libraries as MCP server and CI — provable in OSS |
| Demo | Lineage contamination block | Uses a simplified session flag + destructive-tool list that mirrors Lineage Firewall semantics. Production graph + mandatory hop live in the ingress sidecar (LineageGraph in @blekline/runtime-engine) |
| Simulated | SPIFFE / IAM / OAuth M2M attestation | Narrative trace only — the docs page cannot call SPIRE or AWS STS. Workload identity verification ships on fleet / K8s eval (JWT-SVID verify, SPIRE in Helm values) |
Why not fake everything? Mask, deny, and egress enforcement are the wedge — they must be real so a security reviewer can diff against npm packages. Attestation and full lineage graph need infrastructure; we simulate/demo those rather than imply crypto that did not run.
Why lineage is Demo, not Simulated: The playground does evaluate contamination + destructive tools — it is simplified logic, not a scripted PASS/FAIL string. On cluster, the sidecar maintains an intent graph with TTL and /v1/lineage/contaminate.
Scenarios
- Prompt injection → DROP TABLE — contaminated session + destructive SQL (lineage Demo + policy Real)
- Egress exfiltration — disallowed external host (Real egress rule)
- Compliant RAG query — allowlisted destination (Real allow path)